diff --git a/.github/workflows/dynamoAllNet6.0_build.yml b/.github/workflows/build_dynamo_all_net6.0.yml similarity index 70% rename from .github/workflows/dynamoAllNet6.0_build.yml rename to .github/workflows/build_dynamo_all_net6.0.yml index f8965faa87a..a538fc12402 100644 --- a/.github/workflows/dynamoAllNet6.0_build.yml +++ b/.github/workflows/build_dynamo_all_net6.0.yml @@ -1,6 +1,8 @@ -# Build Dynamo using latest VS and DotNET -name: DynamoAllNet6.0-Build +# Build DynamoAll.sln with .NET 6.0 +name: Build DynamoAll.sln net6.0 + on: [push,pull_request] + jobs: build: runs-on: windows-latest @@ -19,7 +21,7 @@ jobs: - name: Install dependencies for windows runtime run: | - dotnet restore $Env:GITHUB_WORKSPACE\Dynamo\src\Dynamo.All.sln /p:Configuration=Release --runtime=win10-x64 + dotnet restore $Env:GITHUB_WORKSPACE\Dynamo\src\Dynamo.All.sln /p:Configuration=Release --runtime=win-x64 - name: Build Dynamo with MSBuild for Windows run: | echo "***Continue with the build, Good luck developer!***" @@ -31,10 +33,21 @@ jobs: cd "$Env:GITHUB_WORKSPACE\Dynamo\bin\AnyCPU\Release" echo "***Locating DynamoCLI for Windows!***" test ".\DynamoCLI.exe" && echo "DynamoCLI exists!" - - name: Upload Artifact + - name: Upload Build Artifact uses: actions/upload-artifact@v3 with: name: DynamoSandbox path: ${{ github.workspace }}\Dynamo\bin\AnyCPU\Release if-no-files-found: warn retention-days: 3 + - name: Save Pull Request Number + env: + PR_NUMBER: ${{ github.event.number }} + run: $PR_NUMBER | Out-File -FilePath pr_number.txt + - name: Upload Pull Request Artifact + uses: actions/upload-artifact@v3 + with: + name: pr_number + path: ${{ github.workspace }}\pr_number.txt + if-no-files-found: warn + retention-days: 3 diff --git a/.github/workflows/build_dynamo_all_net8.0.yml b/.github/workflows/build_dynamo_all_net8.0.yml new file mode 100644 index 00000000000..5e6a5bf284c --- /dev/null +++ b/.github/workflows/build_dynamo_all_net8.0.yml @@ -0,0 +1,53 @@ +# Build DynamoAll.sln with .NET 8.0 +name: Build DynamoAll.sln net8.0 + +on: [push,pull_request] + +jobs: + build: + runs-on: windows-latest + steps: + - name: Checkout Dynamo Repo + uses: actions/checkout@v4 + with: + path: Dynamo + repository: DynamoDS/Dynamo + - name: Setup dotnet + uses: actions/setup-dotnet@v3 + with: + dotnet-version: '8.0.x' + - name: Disable problem matcher + run: echo "::remove-matcher owner=csc::" + + - name: Install dependencies for windows runtime + run: | + dotnet restore $Env:GITHUB_WORKSPACE\Dynamo\src\Dynamo.All.sln /p:Configuration=Release --runtime=win-x64 -p:DotNet=net8.0 + - name: Build Dynamo with MSBuild for Windows + run: | + echo "***Continue with the build, Good luck developer!***" + cd "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\MSBuild\Current\Bin\" + .\MSBuild.exe $Env:GITHUB_WORKSPACE\Dynamo\src\Dynamo.All.sln /p:Configuration=Release /p:DotNet=net8.0 + # look for Dynamo + - name: Navigate to Dynamo Windows Folder + run: | + cd "$Env:GITHUB_WORKSPACE\Dynamo\bin\AnyCPU\Release" + echo "***Locating DynamoCLI for Windows!***" + test ".\DynamoCLI.exe" && echo "DynamoCLI exists!" + - name: Upload Build Artifact + uses: actions/upload-artifact@v3 + with: + name: DynamoSandbox + path: ${{ github.workspace }}\Dynamo\bin\AnyCPU\Release + if-no-files-found: warn + retention-days: 3 + - name: Save Pull Request Number + env: + PR_NUMBER: ${{ github.event.number }} + run: $PR_NUMBER | Out-File -FilePath pr_number.txt + - name: Upload Pull Request Artifact + uses: actions/upload-artifact@v3 + with: + name: pr_number + path: ${{ github.workspace }}\pr_number.txt + if-no-files-found: warn + retention-days: 3 diff --git a/.github/workflows/close_stale_issues.yml b/.github/workflows/close_stale_issues.yml index 163881dbcb9..5be33ab496a 100644 --- a/.github/workflows/close_stale_issues.yml +++ b/.github/workflows/close_stale_issues.yml @@ -17,8 +17,9 @@ jobs: days-before-close: 0 only-labels: needs more info close-issue-message: Given that there has been no additional information added, this issue will be closed for now. Please reopen and provide additional information if you wish the Dynamo team to investigate further. - - name: Summary + - name: Summary # Print markdown list of closed issues or "No Issues" message if no issues were closed + env: + ISSUES_URL: ${{ format('{0}/{1}/issues', github.server_url, github.repository) }} run: | - echo "# Closed Issues" >> $GITHUB_STEP_SUMMARY - echo "" >> $GITHUB_STEP_SUMMARY - echo "${{ steps.close_issues.outputs.closed-issues-prs }}" >> $GITHUB_STEP_SUMMARY + echo '# Closed Issues' >> $GITHUB_STEP_SUMMARY + echo '${{ steps.close_issues.outputs.closed-issues-prs }}' | jq --raw-output 'if (. == []) then "- No Issues." else .[] | "- \(.title) - [#\(.number)](\(env.ISSUES_URL)/\(.number))" end' >> $GITHUB_STEP_SUMMARY diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index e56b89d23ef..5e90bee85a3 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -46,7 +46,7 @@ jobs: # ℹī¸ Command-line programs to run using the OS shell. # 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun - name: Install dependencies for windows runtime - run: dotnet restore $Env:GITHUB_WORKSPACE\Dynamo\src\Dynamo.All.sln --runtime=win10-x64 + run: dotnet restore $Env:GITHUB_WORKSPACE\Dynamo\src\Dynamo.All.sln --runtime=win-x64 - name: Build Dynamo with MSBuild for Windows run: | echo "***Continue with the build, Good luck developer!***" diff --git a/.github/workflows/dynamoBinDiff.yml b/.github/workflows/dynamoBinDiff.yml index 92108408997..440094f431f 100644 --- a/.github/workflows/dynamoBinDiff.yml +++ b/.github/workflows/dynamoBinDiff.yml @@ -18,7 +18,7 @@ jobs: run: echo "::remove-matcher owner=csc::" - name: Install dependencies for windows runtime run: | - dotnet restore $Env:GITHUB_WORKSPACE\net60_Win_Dynamo\src\Dynamo.All.sln /p:Configuration=Release --runtime=win10-x64 + dotnet restore $Env:GITHUB_WORKSPACE\net60_Win_Dynamo\src\Dynamo.All.sln /p:Configuration=Release --runtime=win-x64 - name: Build Dynamo current branch with MSBuild for NET60-Windows run: | echo "***Continue with the build, Good luck developer!***" @@ -53,7 +53,7 @@ jobs: run: echo "::remove-matcher owner=csc::" - name: Install dependencies for windows runtime run: | - dotnet restore $Env:GITHUB_WORKSPACE\master_net60_Win_Dynamo\src\Dynamo.All.sln /p:Configuration=Release --runtime=win10-x64 + dotnet restore $Env:GITHUB_WORKSPACE\master_net60_Win_Dynamo\src\Dynamo.All.sln /p:Configuration=Release --runtime=win-x64 - name: Build Dynamo master branch with MSBuild for NET60-Windows run: | echo "***Continue with the build, Good luck developer!***" diff --git a/.github/workflows/dynamoNet6.0_build.yml b/.github/workflows/dynamoNet6.0_build.yml index 034aa66856b..f52c91e31fb 100644 --- a/.github/workflows/dynamoNet6.0_build.yml +++ b/.github/workflows/dynamoNet6.0_build.yml @@ -19,7 +19,7 @@ jobs: - name: Install dependencies for windows runtime run: | - dotnet restore $Env:GITHUB_WORKSPACE\Dynamo\src\DynamoCore.sln /p:Configuration=Release --runtime=win10-x64 + dotnet restore $Env:GITHUB_WORKSPACE\Dynamo\src\DynamoCore.sln /p:Configuration=Release --runtime=win-x64 - name: Build Dynamo with MSBuild for Windows run: | echo "***Continue with the build, Good luck developer!***" diff --git a/.github/workflows/generate_changelog.yml b/.github/workflows/generate_changelog.yml index 32b727affb8..581379c242a 100644 --- a/.github/workflows/generate_changelog.yml +++ b/.github/workflows/generate_changelog.yml @@ -22,7 +22,7 @@ jobs: - name: Generate changelog id: changelog - uses: metcalfc/changelog-generator@v4.1.0 + uses: metcalfc/changelog-generator@v4.2.0 with: myToken: ${{ secrets.GITHUB_TOKEN }} head-ref: ${{ github.event.inputs.head-ref }} diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml deleted file mode 100644 index 2ee2ee4b4a8..00000000000 --- a/.github/workflows/test.yml +++ /dev/null @@ -1,51 +0,0 @@ -name: Test - -on: - workflow_run: - workflows: - - DynamoAllNet6.0-Build - types: - - completed - -env: - TEST_EXECUTE_DOWNLOAD_URL: https://downloads.smartbear.com/TestExecute1552SLM.exe - -jobs: - ui_smoke_tests: - name: UI Smoke Tests - timeout-minutes: 60 - runs-on: windows-latest - steps: - - name: Checkout - uses: actions/checkout@v4 - with: - repository: DynamoDS/DynamoTestCompleteTests - token: ${{ secrets.DYNAMO_TESTS_TOKEN }} - ref: master - - name: Download TestExecute - run: Invoke-WebRequest -Uri "${{ env.TEST_EXECUTE_DOWNLOAD_URL }}" -OutFile ".\TE.exe" - - name: Install TestExecute - shell: cmd - run: .\TE.exe -SilentInstall - - name: Download Artifact - uses: dawidd6/action-download-artifact@v2 - with: - name: DynamoSandbox - workflow: ${{ github.event.workflow_run.workflow_id }} - path: ${{ github.workspace }}\build - - name: Run Tests - shell: cmd - run: .github\scripts\run_tests.bat ${{ secrets.TEST_EXECUTE_ACCESS_KEY }} Dynamo\Dynamo.pjs DynamoSandbox SmokeTests - - name: UI Smoke Tests Report - uses: dorny/test-reporter@v1.7.0 - if: always() - with: - name: UI Smoke Test Report - path: reports/report.xml - reporter: java-junit - - name: Action Summary - if: always() - run: | - type summary.md | Out-File -FilePath $env:GITHUB_STEP_SUMMARY -Append - echo "" >> $GITHUB_STEP_SUMMARY - echo ":package: Trigerred by: [${{ github.event.workflow_run.name }}](${{ github.event.workflow_run.html_url }})" >> $env:GITHUB_STEP_SUMMARY diff --git a/.github/workflows/ui_smoke_tests.yml b/.github/workflows/ui_smoke_tests.yml new file mode 100644 index 00000000000..a62c86e5ac3 --- /dev/null +++ b/.github/workflows/ui_smoke_tests.yml @@ -0,0 +1,74 @@ +name: UI Smoke Tests + +on: + workflow_run: + workflows: + - Build DynamoAll.sln net6.0 + - Build DynamoAll.sln net8.0 + types: + - completed + +env: + TEST_EXECUTE_DOWNLOAD_URL: https://downloads.smartbear.com/TestExecute1552SLM.exe + ACTOR: ${{ github.actor }} + WORKFLOW_ID: ${{ github.event.workflow_run.workflow_id }} + RUN_ID: ${{ github.event.workflow_run.id }} + RUN_NAME: ${{ github.event.workflow_run.name }} + RUN_URL: ${{ github.event.workflow_run.html_url }} + +jobs: + ui_smoke_tests: + name: UI Smoke Tests + timeout-minutes: 60 + runs-on: windows-latest + if: ${{ github.event.workflow_run.conclusion == 'success' }} + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + repository: DynamoDS/DynamoTestCompleteTests + token: ${{ secrets.DYNAMO_TESTS_TOKEN }} + ref: master + - name: Download TestExecute + run: Invoke-WebRequest -Uri "${{ env.TEST_EXECUTE_DOWNLOAD_URL }}" -OutFile ".\TE.exe" + - name: Install TestExecute + shell: cmd + run: .\TE.exe -SilentInstall + - name: Download Build Artifact + uses: dawidd6/action-download-artifact@v2 + with: + name: DynamoSandbox + workflow: ${{ env.WORKFLOW_ID }} + run_id: ${{ env.RUN_ID }} + path: ${{ github.workspace }}\build + - name: Download Pull Request Artifact + uses: dawidd6/action-download-artifact@v2 + with: + name: pr_number + workflow: ${{ env.WORKFLOW_ID }} + run_id: ${{ env.RUN_ID }} + path: ${{ github.workspace }}\pr + - name: Run UI Smoke Tests + shell: cmd + run: .github\scripts\run_tests.bat ${{ secrets.TEST_EXECUTE_ACCESS_KEY }} Dynamo\Dynamo.pjs DynamoSandbox SmokeTests + - name: UI Smoke Tests Report + uses: dorny/test-reporter@v1.7.0 + if: always() + with: + name: UI Smoke Test Report + path: reports/report.xml + reporter: java-junit + - name: Read Pull Request Number + id: read_pr_number + run: | + "pr_number=$(Get-Content ${{ github.workspace }}\pr\pr_number.txt)" | Out-File -FilePath $env:GITHUB_OUTPUT -Append + - name: Summary + env: + PR_NUMBER: ${{ steps.read_pr_number.outputs.pr_number }} + PR_URL: ${{ format('{0}/{1}/pull', github.server_url, github.repository) }} + if: always() + run: | + Get-Content summary.md | Out-File -FilePath $env:GITHUB_STEP_SUMMARY -Append + "Actor: @$env:ACTOR" | Out-File -FilePath $env:GITHUB_STEP_SUMMARY -Append + "Workflow Run: [$env:RUN_NAME]($env:RUN_URL)" | Out-File -FilePath $env:GITHUB_STEP_SUMMARY -Append + "Pull Request: [$env:PR_NUMBER]($env:PR_URL/$env:PR_NUMBER)" | Out-File -FilePath $env:GITHUB_STEP_SUMMARY -Append diff --git a/Directory.Build.props b/Directory.Build.props new file mode 100644 index 00000000000..9462831e8e9 --- /dev/null +++ b/Directory.Build.props @@ -0,0 +1,12 @@ + + + + $(MSBuildThisFileDirectory)src\ + + diff --git a/LICENSE.txt b/LICENSE.txt index 0d35c2a6539..e37dd3aceb2 100644 --- a/LICENSE.txt +++ b/LICENSE.txt @@ -92,6 +92,35 @@ Copyright (c) 2022 Fonticons, Inc. (https://fontawesome.com) In the Font Awesome Free download, the CC BY 4.0 license applies to all icons packaged as SVG and JS file types. +Icons: CC BY 4.0 License (https://creativecommons.org/licenses/by/4.0/): The Font Awesome Free download is licensed under a Creative Commons Attribution 4.0 International License and applies to all icons packaged as SVG and JS file types. + +Fonts: SIL OFL 1.1 License +In the Font Awesome Free download, the SIL OFL license applies to all icons packaged as web and desktop font files. +Copyright (c) 2023 Fonticons, Inc. (https://fontawesome.com) +with Reserved Font Name: "Font Awesome". +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license can be found at: http://scripts.sil.org/OFL + +Code: MIT License (https://opensource.org/licenses/MIT) +In the Font Awesome Free download, the MIT license applies to all non-font and +non-icon files. +Copyright 2023 Fonticons, Inc. +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in the +Software without restriction, including without limitation the rights to use, copy, +modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, +and to permit persons to whom the Software is furnished to do so, subject to the +following conditions: +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A +PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + Cyotek.Drawing.BitmapFont v.2.0.0: https://github.com/cyotek/Cyotek.Drawing.BitmapFont https://github.com/cyotek/Cyotek.Drawing.BitmapFont/blob/master/LICENSE.txt @@ -683,13 +712,6 @@ The above copyright notice and this permission notice shall be included in all c THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -SoapFormatter v1.0.11 -https://github.com/novotnyllc/SoapFormatter/blob/main/LICENSE - -In general, the runtime and its class libraries are licensed under the -terms of the MIT license, and some third party code is licensed under -the 3-clause BSD license. See the file "PATENTS.TXT" for Microsoft's -patent grant on the Mono codebase. coverlet.collector v.3.1.2 The MIT License (MIT) diff --git a/doc/distrib/License.rtf b/doc/distrib/License.rtf index e02b574379e..a79d98d0c6f 100644 --- a/doc/distrib/License.rtf +++ b/doc/distrib/License.rtf @@ -1,1881 +1,930 @@ -{\rtf1\adeflang1025\ansi\ansicpg1252\uc1\adeff4\deff0\stshfdbch31505\stshfloch31506\stshfhich31506\stshfbi0\deflang1033\deflangfe1033\themelang1033\themelangfe0\themelangcs0{\fonttbl{\f0\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f2\fbidi \fmodern\fcharset0\fprq1{\*\panose 02070309020205020404}Courier New;} -{\f3\fbidi \froman\fcharset2\fprq2{\*\panose 05050102010706020507}Symbol;}{\f4\fbidi \fswiss\fcharset0\fprq2{\*\panose 020b0604020202020204}Helvetica;}{\f10\fbidi \fnil\fcharset2\fprq2{\*\panose 05000000000000000000}Wingdings;} -{\f34\fbidi \froman\fcharset0\fprq2{\*\panose 02040503050406030204}Cambria Math;}{\f40\fbidi \fswiss\fcharset0\fprq2{\*\panose 020b0604030504040204}Verdana;}{\flomajor\f31500\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;} -{\fdbmajor\f31501\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\fhimajor\f31502\fbidi \fswiss\fcharset0\fprq2{\*\panose 020f0302020204030204}Calibri Light;} -{\fbimajor\f31503\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\flominor\f31504\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;} -{\fdbminor\f31505\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\fhiminor\f31506\fbidi \fswiss\fcharset0\fprq2{\*\panose 020f0502020204030204}Calibri;} -{\fbiminor\f31507\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f43\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\f44\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;} -{\f46\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\f47\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\f48\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\f49\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);} -{\f50\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\f51\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\f63\fbidi \fmodern\fcharset238\fprq1 Courier New CE;}{\f64\fbidi \fmodern\fcharset204\fprq1 Courier New Cyr;} -{\f66\fbidi \fmodern\fcharset161\fprq1 Courier New Greek;}{\f67\fbidi \fmodern\fcharset162\fprq1 Courier New Tur;}{\f68\fbidi \fmodern\fcharset177\fprq1 Courier New (Hebrew);}{\f69\fbidi \fmodern\fcharset178\fprq1 Courier New (Arabic);} -{\f70\fbidi \fmodern\fcharset186\fprq1 Courier New Baltic;}{\f71\fbidi \fmodern\fcharset163\fprq1 Courier New (Vietnamese);}{\f83\fbidi \fswiss\fcharset238\fprq2 Helvetica CE;}{\f84\fbidi \fswiss\fcharset204\fprq2 Helvetica Cyr;} -{\f86\fbidi \fswiss\fcharset161\fprq2 Helvetica Greek;}{\f87\fbidi \fswiss\fcharset162\fprq2 Helvetica Tur;}{\f88\fbidi \fswiss\fcharset177\fprq2 Helvetica (Hebrew);}{\f89\fbidi \fswiss\fcharset178\fprq2 Helvetica (Arabic);} -{\f90\fbidi \fswiss\fcharset186\fprq2 Helvetica Baltic;}{\f91\fbidi \fswiss\fcharset163\fprq2 Helvetica (Vietnamese);}{\f383\fbidi \froman\fcharset238\fprq2 Cambria Math CE;}{\f384\fbidi \froman\fcharset204\fprq2 Cambria Math Cyr;} -{\f386\fbidi \froman\fcharset161\fprq2 Cambria Math Greek;}{\f387\fbidi \froman\fcharset162\fprq2 Cambria Math Tur;}{\f390\fbidi \froman\fcharset186\fprq2 Cambria Math Baltic;}{\f391\fbidi \froman\fcharset163\fprq2 Cambria Math (Vietnamese);} -{\f443\fbidi \fswiss\fcharset238\fprq2 Verdana CE;}{\f444\fbidi \fswiss\fcharset204\fprq2 Verdana Cyr;}{\f446\fbidi \fswiss\fcharset161\fprq2 Verdana Greek;}{\f447\fbidi \fswiss\fcharset162\fprq2 Verdana Tur;} -{\f450\fbidi \fswiss\fcharset186\fprq2 Verdana Baltic;}{\f451\fbidi \fswiss\fcharset163\fprq2 Verdana (Vietnamese);}{\flomajor\f31508\fbidi \froman\fcharset238\fprq2 Times New Roman CE;} -{\flomajor\f31509\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\flomajor\f31511\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\flomajor\f31512\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;} -{\flomajor\f31513\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\flomajor\f31514\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\flomajor\f31515\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;} -{\flomajor\f31516\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fdbmajor\f31518\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\fdbmajor\f31519\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;} -{\fdbmajor\f31521\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fdbmajor\f31522\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\fdbmajor\f31523\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);} -{\fdbmajor\f31524\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fdbmajor\f31525\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\fdbmajor\f31526\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);} -{\fhimajor\f31528\fbidi \fswiss\fcharset238\fprq2 Calibri Light CE;}{\fhimajor\f31529\fbidi \fswiss\fcharset204\fprq2 Calibri Light Cyr;}{\fhimajor\f31531\fbidi \fswiss\fcharset161\fprq2 Calibri Light Greek;} -{\fhimajor\f31532\fbidi \fswiss\fcharset162\fprq2 Calibri Light Tur;}{\fhimajor\f31533\fbidi \fswiss\fcharset177\fprq2 Calibri Light (Hebrew);}{\fhimajor\f31534\fbidi \fswiss\fcharset178\fprq2 Calibri Light (Arabic);} -{\fhimajor\f31535\fbidi \fswiss\fcharset186\fprq2 Calibri Light Baltic;}{\fhimajor\f31536\fbidi \fswiss\fcharset163\fprq2 Calibri Light (Vietnamese);}{\fbimajor\f31538\fbidi \froman\fcharset238\fprq2 Times New Roman CE;} -{\fbimajor\f31539\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\fbimajor\f31541\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fbimajor\f31542\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;} -{\fbimajor\f31543\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\fbimajor\f31544\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fbimajor\f31545\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;} -{\fbimajor\f31546\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\flominor\f31548\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\flominor\f31549\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;} -{\flominor\f31551\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\flominor\f31552\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\flominor\f31553\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);} -{\flominor\f31554\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\flominor\f31555\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\flominor\f31556\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);} -{\fdbminor\f31558\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\fdbminor\f31559\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\fdbminor\f31561\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;} -{\fdbminor\f31562\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\fdbminor\f31563\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\fdbminor\f31564\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);} -{\fdbminor\f31565\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\fdbminor\f31566\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fhiminor\f31568\fbidi \fswiss\fcharset238\fprq2 Calibri CE;} -{\fhiminor\f31569\fbidi \fswiss\fcharset204\fprq2 Calibri Cyr;}{\fhiminor\f31571\fbidi \fswiss\fcharset161\fprq2 Calibri Greek;}{\fhiminor\f31572\fbidi \fswiss\fcharset162\fprq2 Calibri Tur;} -{\fhiminor\f31573\fbidi \fswiss\fcharset177\fprq2 Calibri (Hebrew);}{\fhiminor\f31574\fbidi \fswiss\fcharset178\fprq2 Calibri (Arabic);}{\fhiminor\f31575\fbidi \fswiss\fcharset186\fprq2 Calibri Baltic;} -{\fhiminor\f31576\fbidi \fswiss\fcharset163\fprq2 Calibri (Vietnamese);}{\fbiminor\f31578\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\fbiminor\f31579\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;} -{\fbiminor\f31581\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fbiminor\f31582\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\fbiminor\f31583\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);} -{\fbiminor\f31584\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fbiminor\f31585\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\fbiminor\f31586\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}} -{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0; -\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;\red0\green0\blue0;\red0\green0\blue0;\caccentone\ctint255\cshade191\red47\green84\blue150; -\caccentone\ctint255\cshade127\red31\green55\blue99;\chyperlink\ctint255\cshade255\red5\green99\blue193;\red96\green94\blue92;\red225\green223\blue221;\cfollowedhyperlink\ctint255\cshade255\red149\green79\blue114;\red165\green165\blue165; -\red109\green210\blue255;\red70\green70\blue70;\red74\green74\blue74;\red5\green99\blue193;\red36\green41\blue47;}{\*\defchp \fs22\loch\af31506\hich\af31506\dbch\af31505 }{\*\defpap \ql \li0\ri0\sa160\sl259\slmult1 -\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 }\noqfpromote {\stylesheet{\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 \rtlch\fcs1 \af4\afs24\alang1025 \ltrch\fcs0 -\fs24\lang1033\langfe2052\loch\f4\hich\af4\dbch\af31505\cgrid\langnp1033\langfenp2052 \snext0 \sqformat \spriority0 Normal;}{\s1\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\outlinelevel0\rin0\lin0\itap0 \rtlch\fcs1 \af4\afs24\alang1025 \ltrch\fcs0 -\fs24\lang1033\langfe2052\loch\f4\hich\af4\dbch\af31505\cgrid\langnp1033\langfenp2052 \sbasedon0 \snext0 \slink15 \sqformat heading 1;}{\s2\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\outlinelevel1\rin0\lin0\itap0 \rtlch\fcs1 \af4\afs24\alang1025 -\ltrch\fcs0 \fs24\lang1033\langfe2052\loch\f4\hich\af4\dbch\af31505\cgrid\langnp1033\langfenp2052 \sbasedon0 \snext0 \slink16 \sqformat heading 2;}{\s3\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\outlinelevel2\rin0\lin0\itap0 \rtlch\fcs1 -\af4\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe2052\loch\f4\hich\af4\dbch\af31505\cgrid\langnp1033\langfenp2052 \sbasedon0 \snext0 \slink17 \sqformat heading 3;}{\s4\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\outlinelevel3\rin0\lin0\itap0 -\rtlch\fcs1 \af4\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe2052\loch\f4\hich\af4\dbch\af31505\cgrid\langnp1033\langfenp2052 \sbasedon0 \snext0 \slink18 \sqformat heading 4;}{\*\cs10 \additive \ssemihidden \sunhideused \spriority1 -Default Paragraph Font;}{\*\ts11\tsrowd\trftsWidthB3\trpaddl108\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\trcbpat1\trcfpat1\tblind0\tblindtype3\tsvertalt\tsbrdrt\tsbrdrl\tsbrdrb\tsbrdrr\tsbrdrdgl\tsbrdrdgr\tsbrdrh\tsbrdrv -\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs22\alang1025 \ltrch\fcs0 \fs22\lang1033\langfe1033\loch\f31506\hich\af31506\dbch\af31505\cgrid\langnp1033\langfenp1033 -\snext11 \ssemihidden \sunhideused Normal Table;}{\*\cs15 \additive \rtlch\fcs1 \af0\afs32 \ltrch\fcs0 \fs32\cf19\loch\f31502\hich\af31502\dbch\af31501 \sbasedon10 \slink1 \spriority9 Heading 1 Char;}{\*\cs16 \additive \rtlch\fcs1 \af0\afs26 \ltrch\fcs0 -\fs26\cf19\loch\f31502\hich\af31502\dbch\af31501 \sbasedon10 \slink2 \ssemihidden \spriority9 Heading 2 Char;}{\*\cs17 \additive \rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \fs24\cf20\loch\f31502\hich\af31502\dbch\af31501 -\sbasedon10 \slink3 \ssemihidden \spriority9 Heading 3 Char;}{\*\cs18 \additive \rtlch\fcs1 \ai\af0\afs24 \ltrch\fcs0 \i\fs24\cf19\loch\f31502\hich\af31502\dbch\af31501 \sbasedon10 \slink4 \ssemihidden \spriority9 Heading 4 Char;}{\*\cs19 \additive -\rtlch\fcs1 \af0 \ltrch\fcs0 \ul\cf21 \sbasedon10 \sunhideused \styrsid14298549 Hyperlink;}{\*\cs20 \additive \rtlch\fcs1 \af0 \ltrch\fcs0 \cf22\chshdng0\chcfpat0\chcbpat23 \sbasedon10 \ssemihidden \sunhideused \styrsid14298549 Unresolved Mention;}{\* -\cs21 \additive \rtlch\fcs1 \af0 \ltrch\fcs0 \ul\cf24 \sbasedon10 \ssemihidden \sunhideused \styrsid4611777 FollowedHyperlink;}{\s22\ql \li0\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 -\rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe1033\loch\f0\hich\af0\dbch\af31505\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext22 \ssemihidden \sunhideused \styrsid9731339 Normal (Web);}{\*\cs23 \additive \rtlch\fcs1 \ai\af0 -\ltrch\fcs0 \i \sbasedon10 \ssemihidden \sunhideused \styrsid9731339 HTML Variable;}}{\*\listtable{\list\listtemplateid-1{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext -\'01\u-3913 ?;}{\levelnumbers;}\f3\fs20\fbias0 \fi-360\li720\jclisttab\tx720\lin720 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\'01o;}{\levelnumbers;}\f2\fs20\fbias0 -\fi-360\li1440\jclisttab\tx1440\lin1440 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}\f10\fs20\fbias0 \fi-360\li2160 -\jclisttab\tx2160\lin2160 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}\f10\fs20\fbias0 \fi-360\li2880\jclisttab\tx2880\lin2880 } -{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}\f10\fs20\fbias0 \fi-360\li3600\jclisttab\tx3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23 -\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}\f10\fs20\fbias0 \fi-360\li4320\jclisttab\tx4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0 -\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}\f10\fs20\fbias0 \fi-360\li5040\jclisttab\tx5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative -\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}\f10\fs20\fbias0 \fi-360\li5760\jclisttab\tx5760\lin5760 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext -\'01\u-3929 ?;}{\levelnumbers;}\f10\fs20\fbias0 \fi-360\li6480\jclisttab\tx6480\lin6480 }{\listname ;}\listid404035829}}{\*\listoverridetable{\listoverride\listid404035829\listoverridecount0\ls1}}{\*\pgptbl {\pgp\ipgp0\itap0\li0\ri0\sb0\sa0}{\pgp\ipgp0 -\itap0\li0\ri0\sb0\sa0}{\pgp\ipgp4\itap0\li0\ri0\sb0\sa0}{\pgp\ipgp0\itap0\li0\ri0\sb0\sa0}{\pgp\ipgp4\itap0\li0\ri0\sb0\sa0}{\pgp\ipgp4\itap0\li0\ri0\sb0\sa0}}{\*\rsidtbl \rsid262518\rsid411363\rsid868937\rsid1060736\rsid1784394\rsid2829184\rsid2959855 -\rsid3092893\rsid3225273\rsid3346706\rsid3998130\rsid4197417\rsid4265300\rsid4352418\rsid4484117\rsid4611777\rsid4933710\rsid5534482\rsid6512127\rsid6759865\rsid6955063\rsid7303292\rsid7632792\rsid7959640\rsid8078116\rsid8279958\rsid9377761\rsid9460105 -\rsid9635992\rsid9658238\rsid9731339\rsid10299691\rsid10497410\rsid11167982\rsid12335516\rsid12339523\rsid12538758\rsid12653622\rsid12931539\rsid13390354\rsid13906562\rsid14187697\rsid14298549\rsid14628192\rsid14700233\rsid14892156\rsid15019625 -\rsid15220234\rsid15758779\rsid16075008\rsid16089027\rsid16215368\rsid16401238\rsid16455092\rsid16659309}{\mmathPr\mmathFont34\mbrkBin0\mbrkBinSub0\msmallFrac0\mdispDef1\mlMargin0\mrMargin0\mdefJc1\mwrapIndent1440\mintLim0\mnaryLim1}{\info -{\operator Tiberiu Pinzariu}{\creatim\yr2023\mo5\dy24\hr14\min10}{\revtim\yr2023\mo10\dy20\hr13\min53}{\version50}{\edmins51}{\nofpages28}{\nofwords12773}{\nofchars72811}{\nofcharsws85414}{\vern79}}{\*\xmlnstbl {\xmlns1 http://schemas.microsoft.com/office -/word/2003/wordml}}\paperw12240\paperh15840\margl1440\margr1440\margt1440\margb1440\gutter0\ltrsect -\widowctrl\ftnbj\aenddoc\hyphhotz425\trackmoves0\trackformatting1\donotembedsysfont0\relyonvml0\donotembedlingdata1\grfdocevents0\validatexml0\showplaceholdtext0\ignoremixedcontent0\saveinvalidxml0\showxmlerrors0\horzdoc\dghspace120\dgvspace120 -\dghorigin1701\dgvorigin1984\dghshow0\dgvshow3\jcompress\viewkind1\viewscale100\rsidroot1784394 \nouicompat \fet0{\*\wgrffmtfilter 2450}\nofeaturethrottle1\ilfomacatclnup0\ltrpar \sectd \ltrsect\linex0\sectdefaultcl\sftnbj {\*\pnseclvl1 -\pnucrm\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl4\pnlcltr\pnstart1\pnindent720\pnhang {\pntxta )}}{\*\pnseclvl5 -\pndec\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl8\pnlcltr\pnstart1\pnindent720\pnhang -{\pntxtb (}{\pntxta )}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}\pard\plain \ltrpar\ql \li0\ri0\sb240\sl276\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 \rtlch\fcs1 \af4\afs24\alang1025 \ltrch\fcs0 -\fs24\lang1033\langfe2052\loch\af4\hich\af4\dbch\af31505\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \ab\af4\afs22 \ltrch\fcs0 \b\fs22\cf25\lang2057\langfe2052\langnp2057\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 \hich\f4 @DYNAMO v.3.0.0 \'a9\loch\f4 - 2023 Autodesk, Inc. All rights reserved. -\par \hich\af4\dbch\af31505\loch\f4 Dynamo License -\par }\pard \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\lang2057\langfe2052\langnp2057\insrsid9658238 -\par \hich\af4\dbch\af31505\loch\f4 Those portions created by Ian are \hich\af4\dbch\af31505\loch\f4 provided with the following copyright: -\par -\par \hich\af4\dbch\af31505\loch\f4 Copyright 2017 Ian Keough -\par -\par \hich\af4\dbch\af31505\loch\f4 Those portions created by Autodesk employees are provided with the following copyright: -\par -\par \hich\af4\dbch\af31505\loch\f4 Copyright 2023 Autodesk, Inc. -\par -\par \hich\af4\dbch\af31505\loch\f4 Licensed under the Apache License, Version 2.0 (the "License"); you m\hich\af4\dbch\af31505\loch\f4 ay not use this file except in compliance with the License. You may obtain a copy of the License at }{\field{\*\fldinst { -\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\lang2057\langfe2052\langnp2057\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 -HYPERLINK "https://nam11.safelinks.protection.outlook.com/?url=http%3A%2F%2Fwww.apache.org%2Flicenses%2FLICENSE-2.0&data=04%7C01%7CJames.Conner%40autodesk.c\hich\af4\dbch\af31505\loch\f4 -om%7Cdaecd65781944b855e7808d946251ff6%7C67bff79e7f914433a8e5c9252d2ddc1d%7C0%7C0%7C637617947520120511%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=hM4SECRXlI3Y3bhWd0n7aVFES8pYfE3tfdiIfbSsdIo%3D&re -\hich\af4\dbch\af31505\loch\f4 s\hich\af4\dbch\af31505\loch\f4 erved=0" }{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\lang2057\langfe2052\langnp2057\insrsid1784394 {\*\datafield -00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b4a030000680074007400700073003a002f002f006e0061006d00310031002e0073006100660065006c0069006e006b0073002e00700072006f00740065006300740069006f006e002e006f00750074006c006f006f00 -6b002e0063006f006d002f003f00750072006c003d0068007400740070002500330041002500320046002500320046007700770077002e006100700061006300680065002e006f00720067002500320046006c006900630065006e007300650073002500320046004c004900430045004e00530045002d0032002e00300026 -0064006100740061003d0030003400250037004300300031002500370043004a0061006d00650073002e0043006f006e006e00650072002500340030006100750074006f006400650073006b002e0063006f006d00250037004300640061006500630064003600350037003800310039003400340062003800350035006500 -37003800300038006400390034003600320035003100660066003600250037004300360037006200660066003700390065003700660039003100340034003300330061003800650035006300390032003500320064003200640064006300310064002500370043003000250037004300300025003700430036003300370036 -003100370039003400370035003200300031003200300035003100310025003700430055006e006b006e006f0077006e002500370043005400570046007000620047005a0073006200330064003800650079004a00570049006a006f0069004d004300340077004c006a00410077004d004400410069004c0043004a005100 -49006a006f006900560032006c0075004d007a00490069004c0043004a004200540069004900360049006b003100680061005700770069004c0043004a00580056004300490036004d006e00300025003300440025003700430031003000300030002600730064006100740061003d0068004d003400530045004300520058 -006c004900330059003300620068005700640030006e00370061005600460045005300380070005900660045003300740066006400690049006600620053007300640049006f002500330044002600720065007300650072007600650064003d0030000000795881f43b1d7f48af2c825dc485276300000000a5ab0003006b -005b000070000000723600000000}}}{\fldrslt {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\lang2057\langfe2052\langnp2057\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 http://www.apac\hich\af4\dbch\af31505\loch\f4 he.org/licenses/LICENSE-2.0}}} -\sectd \ltrsect\linex0\sectdefaultcl\sftnbj {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\lang2057\langfe2052\langnp2057\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 }{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 -\fs22\cf25\lang2057\langfe2052\langnp2057\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 -Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License fo -\hich\af4\dbch\af31505\loch\f4 r the specific language governing permissions and limitations under the License.}{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\lang2057\langfe2052\langnp2057\insrsid9658238 -\par }{\rtlch\fcs1 \ab\af40\afs20 \ltrch\fcs0 \b\f40\fs20\lang2057\langfe2052\langnp2057\insrsid9658238 -\par }\pard \ltrpar\ql \li0\ri0\sb240\sl276\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \ab\af4\afs22 \ltrch\fcs0 \b\fs22\cf25\lang2057\langfe2052\langnp2057\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 Privacy -\par }\pard \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\lang2057\langfe2052\langnp2057\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 To learn more about Autodesk\hich\f4 \rquote \loch\f4 -s online and offline privacy practices, please see the }{\field{\*\fldinst {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\lang2057\langfe2052\langnp2057\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 -HYPERLINK "http://www.autodesk.com/company/legal-notices-trademarks/privacy-statem\hich\af4\dbch\af31505\loch\f4 ent"}{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\lang2057\langfe2052\langnp2057\insrsid1784394 {\*\datafield -00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90bae00000068007400740070003a002f002f007700770077002e006100750074006f006400650073006b002e0063006f006d002f0063006f006d00700061006e0079002f006c006500670061006c002d006e006f007400 -69006300650073002d00740072006100640065006d00610072006b0073002f0070007200690076006100630079002d00730074006100740065006d0065006e0074000000795881f43b1d7f48af2c825dc485276300000000a5ab000300590073002000000000006d00000000}}}{\fldrslt {\rtlch\fcs1 \af4\afs22 -\ltrch\fcs0 \fs22\ul\cf26\lang2057\langfe2052\langnp2057\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 Autodesk Privacy Statement}}}\sectd \ltrsect\linex0\sectdefaultcl\sftnbj {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 -\fs22\ul\cf26\lang2057\langfe2052\langnp2057\insrsid9658238 .}{\rtlch\fcs1 \af40\afs16 \ltrch\fcs0 \f40\fs16\lang2057\langfe2052\langnp2057\insrsid9658238 -\par -\par }\pard \ltrpar\ql \li0\ri0\sb240\sl276\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \ab\af4\afs22 \ltrch\fcs0 \b\fs22\cf25\lang2057\langfe2052\langnp2057\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 Autodesk Trademarks -\par }\pard \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\lang2057\langfe2052\langnp2057\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 The trademarks on the }{\field{\*\fldinst {\rtlch\fcs1 -\af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\lang2057\langfe2052\langnp2057\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 HYPERLINK "https://www.au\hich\af4\dbch\af31505\loch\f4 todesk.com/company/legal-notices-trademarks/intellectual-property/trademarks"}{ -\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\lang2057\langfe2052\langnp2057\insrsid1784394 {\*\datafield -00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90bce000000680074007400700073003a002f002f007700770077002e006100750074006f006400650073006b002e0063006f006d002f0063006f006d00700061006e0079002f006c006500670061006c002d006e006f00 -740069006300650073002d00740072006100640065006d00610072006b0073002f0069006e00740065006c006c00650063007400750061006c002d00700072006f00700065007200740079002f00740072006100640065006d00610072006b0073000000795881f43b1d7f48af2c825dc485276300000000a5ab0003007300 -6f007500000000016500000000}}}{\fldrslt {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\lang2057\langfe2052\langnp2057\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 Autodesk Trademarks page}}}\sectd \ltrsect\linex0\sectdefaultcl\sftnbj {\rtlch\fcs1 -\af4\afs22 \ltrch\fcs0 \fs22\cf25\lang2057\langfe2052\langnp2057\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 are registered trademarks or trademarks of Autodesk, Inc., and/or its subsidiaries and/or affiliates in the USA and/or other countries. - -\par -\par \hich\af4\dbch\af31505\loch\f4 All other brand names, product names or trademarks belong to their respective holders. -\par }\pard \ltrpar\ql \li0\ri0\sb240\sl276\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \ab\af4\afs22 \ltrch\fcs0 \b\fs22\cf25\lang2057\langfe2052\langnp2057\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 Au -\hich\af4\dbch\af31505\loch\f4 todesk Cloud and Desktop Components}{\rtlch\fcs1 \ab\af40\afs22 \ltrch\fcs0 \b\f40\fs22\lang2057\langfe2052\langnp2057\insrsid9658238 -\par }\pard \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\lang2057\langfe2052\langnp2057\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 -This Product or Service may incorporate or use background Autodesk online and desktop technology components.\~ For information about these components, see}{\rtlch\fcs1 \af40\afs22 \ltrch\fcs0 \f40\fs22\lang2057\langfe2052\langnp2057\insrsid9658238 -\hich\af40\dbch\af31505\loch\f40 }{\field{\*\fldinst {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\lang2057\langfe2052\langnp2057\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 HYPERLINK "https://www.autodesk.com/company/legal-notices-trademar -\hich\af4\dbch\af31505\loch\f4 ks/autodesk-cloud-platform-components"}{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\lang2057\langfe2052\langnp2057\insrsid1784394 {\*\datafield -00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90bd2000000680074007400700073003a002f002f007700770077002e006100750074006f006400650073006b002e0063006f006d002f0063006f006d00700061006e0079002f006c006500670061006c002d006e006f00 -740069006300650073002d00740072006100640065006d00610072006b0073002f006100750074006f006400650073006b002d0063006c006f00750064002d0070006c006100740066006f0072006d002d0063006f006d0070006f006e0065006e00740073000000795881f43b1d7f48af2c825dc485276300000000a5ab00 -0300461a34ff6d01340000004e00610000}}}{\fldrslt {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\lang2057\langfe2052\langnp2057\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 Autodesk Cloud Platform Components}}}\sectd \ltrsect\linex0\sectdefaultcl\sftnbj -{\rtlch\fcs1 \af0\afs22 \ltrch\fcs0 \f0\fs22\cf25\lang2057\langfe2052\langnp2057\insrsid9658238 \hich\af0\dbch\af31505\loch\f0 }{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\lang2057\langfe2052\langnp2057\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 -and }{\field{\*\fldinst {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\lang2057\langfe2052\langnp2057\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 HYPER\hich\af4\dbch\af31505\loch\f4 -LINK "https://www.autodesk.com/company/legal-notices-trademarks/autodesk-desktop-platform-components"}{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\lang2057\langfe2052\langnp2057\insrsid1784394 {\*\datafield -00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90bd6000000680074007400700073003a002f002f007700770077002e006100750074006f006400650073006b002e0063006f006d002f0063006f006d00700061006e0079002f006c006500670061006c002d006e006f00 -740069006300650073002d00740072006100640065006d00610072006b0073002f006100750074006f006400650073006b002d006400650073006b0074006f0070002d0070006c006100740066006f0072006d002d0063006f006d0070006f006e0065006e00740073000000795881f43b1d7f48af2c825dc4852763000000 -00a5ab00030073096f004f005d0000017b00690030}}}{\fldrslt {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\lang2057\langfe2052\langnp2057\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 Autodesk Desktop Platform Components}}}\sectd \ltrsect -\linex0\sectdefaultcl\sftnbj {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\lang2057\langfe2052\langnp2057\insrsid9658238 . -\par }{\rtlch\fcs1 \af40\afs18 \ltrch\fcs0 \f40\fs18\lang2057\langfe2052\langnp2057\insrsid9658238 -\par }\pard \ltrpar\ql \li0\ri0\sb168\widctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \ab\af4\afs22 \ltrch\fcs0 \b\fs22\cf25\lang2057\langfe2052\langnp2057\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 LIBG,\hich\af4\dbch\af31505\loch\f4 - ProtoGeometry v.2.7.0, }{\rtlch\fcs1 \ab\af4\afs22 \ltrch\fcs0 \b\fs22\cf25\lang2057\langfe2052\langnp2057\insrsid7303292\charrsid7303292 \hich\af4\dbch\af31505\loch\f4 -DynamoVisualProgramming.Analytics, CER, ADP, GRegRevitAuth, AGET, IDSDK, IDSDK Wrapper, ForgeUnits.NET, ForgeUnits.Schemas,}{\rtlch\fcs1 \ab\af4\afs22 \ltrch\fcs0 \b\fs22\cf25\lang2057\langfe2052\langnp2057\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 -, and Autodesk.GeometryPrimitive}{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\lang2057\langfe2052\langnp2057\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 are closed source files licensed by Autodesk under the license that can be found here } -{\field{\*\fldinst {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\lang2057\langfe2052\langnp2057\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 HYPERLINK https://github.com/DynamoDS/Dynamo/tree/ma\hich\af4\dbch\af31505\loch\f4 ster/doc/distrib/Autodesk.rtf }{ -\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\lang2057\langfe2052\langnp2057\insrsid1784394 {\*\datafield -00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90ba8000000680074007400700073003a002f002f006700690074006800750062002e0063006f006d002f00440079006e0061006d006f00440053002f00440079006e0061006d006f002f0074007200650065002f006d00 -610073007400650072002f0064006f0063002f0064006900730074007200690062002f004100750074006f006400650073006b002e007200740066000000795881f43b1d7f48af2c825dc485276300000000a5ab0003006f806ff00000710000507300610065}}}{\fldrslt {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 -\fs22\lang2057\langfe2052\langnp2057\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 https://github.com/DynamoDS/Dynamo/tree/master/doc/distrib/Autodesk.rtf}}}\sectd \ltrsect\linex0\sectdefaultcl\sftnbj {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 -\fs22\cf25\lang2057\langfe2052\langnp2057\insrsid9658238 -\par }\pard \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \af40\afs18 \ltrch\fcs0 \f40\fs18\lang2057\langfe2052\langnp2057\insrsid9658238 -\par }{\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \f40\fs20\lang2057\langfe2052\langnp2057\insrsid9658238 -\par }{\rtlch\fcs1 \ab\af4\afs22 \ltrch\fcs0 \b\fs22\cf25\lang2057\langfe2052\langnp2057\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 Third-Party Trademarks, Software Credits and Attributions -\par }{\rtlch\fcs1 \af40\afs18 \ltrch\fcs0 \f40\fs18\lang2057\langfe2052\langnp2057\insrsid9658238 -\par }{\rtlch\fcs1 \ab\af4\afs22 \ltrch\fcs0 \b\fs22\cf25\lang2057\langfe2052\langnp2057\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 Greg v.}{\rtlch\fcs1 \af0 \ltrch\fcs0 \f0\lang2057\langfe2052\langnp2057\insrsid9658238 \hich\af0\dbch\af31505\loch\f0 }{ -\rtlch\fcs1 \ab\af4\afs22 \ltrch\fcs0 \b\fs22\cf25\lang2057\langfe2052\langnp2057\insrsid6512127\charrsid6512127 \hich\af4\dbch\af31505\loch\f4 v.2.5.0.5076}{\rtlch\fcs1 \ab\af4\afs22 \ltrch\fcs0 \b\fs22\cf25\lang2057\langfe2052\langnp2057\insrsid9658238 -\hich\af4\dbch\af31505\loch\f4 : -\par }{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\lang2057\langfe2052\langnp2057\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 (The MIT License) -\par \hich\af4\dbch\af31505\loch\f4 Copyright (c) 2013 Peter Boyer }{\field{\*\fldinst {\rtlch\fcs1 \af0 \ltrch\fcs0 \f0\ul\cf26\lang2057\langfe2052\langnp2057\insrsid9658238 \hich\af0\dbch\af31505\loch\f0 HYPERLINK "mailto:peter.boyer@autodesk.com" }{ -\rtlch\fcs1 \af0 \ltrch\fcs0 \f0\ul\cf26\lang2057\langfe2052\langnp2057\insrsid1784394 {\*\datafield -00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b580000006d00610069006c0074006f003a00700065007400650072002e0062006f0079006500720040006100750074006f006400650073006b002e0063006f006d000000795881f43b1d7f48af2c825dc48527630000 -0000a5ab000300730061000000460000007000690035}}}{\fldrslt {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\lang2057\langfe2052\langnp2057\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 peter.boyer@autodesk.com}}}\sectd \ltrsect\linex0\sectdefaultcl\sftnbj -{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\lang2057\langfe2052\langnp2057\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 - Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the 'Software'), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, -\hich\af4\dbch\af31505\loch\f4 m\hich\af4\dbch\af31505\loch\f4 erge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: -\par -\par \hich\af4\dbch\af31505\loch\f4 The above copyright notice and this permission notice shall be included in al\hich\af4\dbch\af31505\loch\f4 l copies or substantial portions of the Software. -\par -\par \hich\af4\dbch\af31505\loch\f4 THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -\hich\af4\dbch\af31505\loch\f4 -NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -\par }{\rtlch\fcs1 \af40\afs18 \ltrch\fcs0 \f40\fs18\lang2057\langfe2052\langnp2057\insrsid9658238 -\par }{\rtlch\fcs1 \ab\af4\afs22 \ltrch\fcs0 \b\fs22\cf25\lang2057\langfe2052\langnp2057\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 Microsoft.CSharp v.4.0.0.0: -\par }{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\lang2057\langfe2052\langnp2057\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 The MIT License (MIT) -\par \hich\af4\dbch\af31505\loch\f4 Copyright (c) .NET Foundation and Contributors -\par \hich\af4\dbch\af31505\loch\f4 All rights reserved. -\par -\par \hich\af4\dbch\af31505\loch\f4 Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "S\hich\af4\dbch\af31505\loch\f4 -oftware"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do -\hich\af4\dbch\af31505\loch\f4 \hich\af4\dbch\af31505\loch\f4 so, subject to the following conditions: -\par }{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf25\lang2057\langfe2052\langnp2057\insrsid9658238 -\par }{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\lang2057\langfe2052\langnp2057\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -\par -\par \hich\af4\dbch\af31505\loch\f4 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, IN\hich\af4\dbch\af31505\loch\f4 -CLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, T -\hich\af4\dbch\af31505\loch\f4 O\hich\af4\dbch\af31505\loch\f4 RT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -\par }{\rtlch\fcs1 \af40\afs18 \ltrch\fcs0 \f40\fs18\lang2057\langfe2052\langnp2057\insrsid9658238 -\par }{\rtlch\fcs1 \ab\af4\afs22 \ltrch\fcs0 \b\fs22\cf25\lang2057\langfe2052\langnp2057\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 Newtonsoft.Json v.13.0.1: -\par }{\field{\*\fldinst {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\lang2057\langfe2052\langnp2057\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 -HYPERLINK "https://nam11.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2FJamesNK%2FNewtonsoft\hich\af4\dbch\af31505\loch\f4 -.Json&data=04%7C01%7CJames.Conner%40autodesk.com%7Cdaecd65781944b855e7808d946251ff6%7C67bff79e7f914433a8e5c9252d2ddc1d%7C0%7C0%7C637617947520419200%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=hvR -\hich\af4\dbch\af31505\loch\f4 4\hich\af4\dbch\af31505\loch\f4 mYgVhMPpQh4uLCJ3PY9Ywr8mM0vqXF98ac8mPXA%3D&reserved=0" }{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\lang2057\langfe2052\langnp2057\insrsid1784394 {\*\datafield -00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b4a030000680074007400700073003a002f002f006e0061006d00310031002e0073006100660065006c0069006e006b0073002e00700072006f00740065006300740069006f006e002e006f00750074006c006f006f00 -6b002e0063006f006d002f003f00750072006c003d00680074007400700073002500330041002500320046002500320046006700690074006800750062002e0063006f006d002500320046004a0061006d00650073004e004b002500320046004e006500770074006f006e0073006f00660074002e004a0073006f006e0026 -0064006100740061003d0030003400250037004300300031002500370043004a0061006d00650073002e0043006f006e006e00650072002500340030006100750074006f006400650073006b002e0063006f006d00250037004300640061006500630064003600350037003800310039003400340062003800350035006500 -37003800300038006400390034003600320035003100660066003600250037004300360037006200660066003700390065003700660039003100340034003300330061003800650035006300390032003500320064003200640064006300310064002500370043003000250037004300300025003700430036003300370036 -003100370039003400370035003200300034003100390032003000300025003700430055006e006b006e006f0077006e002500370043005400570046007000620047005a0073006200330064003800650079004a00570049006a006f0069004d004300340077004c006a00410077004d004400410069004c0043004a005100 -49006a006f006900560032006c0075004d007a00490069004c0043004a004200540069004900360049006b003100680061005700770069004c0043004a00580056004300490036004d006e00300025003300440025003700430031003000300030002600730064006100740061003d0068007600520034006d005900670056 -0068004d005000700051006800340075004c0043004a00330050005900390059007700720038006d004d0030007600710058004600390038006100630038006d005000580041002500330044002600720065007300650072007600650064003d0030000000795881f43b1d7f48af2c825dc485276300000000a5ab00030075 -000010e436ad00f8006c45690066}}}{\fldrslt {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\lang2057\langfe2052\langnp2057\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 https://github.com/JamesNK/Newtonsoft.Json}}}\sectd \ltrsect -\linex0\sectdefaultcl\sftnbj {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\lang2057\langfe2052\langnp2057\insrsid9658238 -\par }{\field{\*\fldinst {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\lang2057\langfe2052\langnp2057\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 -HYPERLINK "https://nam11.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2FJamesNK%2FNewtonsoft.Json%2Fblob%2Fmaster%2FLICENSE.md&data=04%7C01%7CJames.Conner%40auto\hich\af4\dbch\af31505\loch\f4 -desk.com%7Cdaecd65781944b855e7808d946251ff6%7C67bff79e7f914433a8e5c9252d2ddc1d%7C0%7C0%7C637617947520429148%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=OuX0yvu%2F0kVS7X5KARjQ3p9Ycg8qvk67fFAaKNEWx -\hich\af4\dbch\af31505\loch\f4 b\hich\af4\dbch\af31505\loch\f4 M%3D&reserved=0" }{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\lang2057\langfe2052\langnp2057\insrsid1784394 {\*\datafield -00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b88030000680074007400700073003a002f002f006e0061006d00310031002e0073006100660065006c0069006e006b0073002e00700072006f00740065006300740069006f006e002e006f00750074006c006f006f00 -6b002e0063006f006d002f003f00750072006c003d00680074007400700073002500330041002500320046002500320046006700690074006800750062002e0063006f006d002500320046004a0061006d00650073004e004b002500320046004e006500770074006f006e0073006f00660074002e004a0073006f006e0025 -003200460062006c006f0062002500320046006d00610073007400650072002500320046004c004900430045004e00530045002e006d006400260064006100740061003d0030003400250037004300300031002500370043004a0061006d00650073002e0043006f006e006e00650072002500340030006100750074006f00 -6400650073006b002e0063006f006d00250037004300640061006500630064003600350037003800310039003400340062003800350035006500370038003000380064003900340036003200350031006600660036002500370043003600370062006600660037003900650037006600390031003400340033003300610038 -00650035006300390032003500320064003200640064006300310064002500370043003000250037004300300025003700430036003300370036003100370039003400370035003200300034003200390031003400380025003700430055006e006b006e006f0077006e002500370043005400570046007000620047005a00 -73006200330064003800650079004a00570049006a006f0069004d004300340077004c006a00410077004d004400410069004c0043004a00510049006a006f006900560032006c0075004d007a00490069004c0043004a004200540069004900360049006b003100680061005700770069004c0043004a0058005600430049 -0036004d006e00300025003300440025003700430031003000300030002600730064006100740061003d004f0075005800300079007600750025003200460030006b00560053003700580035004b00410052006a0051003300700039005900630067003800710076006b003600370066004600410061004b004e0045005700 -780062004d002500330044002600720065007300650072007600650064003d0030000000795881f43b1d7f48af2c825dc485276300000000a5ab00030064002c002e00790000005c16687b22}}}{\fldrslt {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 -\fs22\ul\cf26\lang2057\langfe2052\langnp2057\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 https://github.com/JamesNK/Newtonsoft.Json/blob/master/LICENSE.md}}}\sectd \ltrsect\linex0\sectdefaultcl\sftnbj {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 -\fs22\ul\cf26\lang2057\langfe2052\langnp2057\insrsid9658238 -\par }{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\lang2057\langfe2052\langnp2057\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 The MIT License (MIT) -\par \hich\af4\dbch\af31505\loch\f4 Copyright (c) 2007 James Newton-King -\par -\par \hich\af4\dbch\af31505\loch\f4 -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, m -\hich\af4\dbch\af31505\loch\f4 e\hich\af4\dbch\af31505\loch\f4 rge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: -\par -\par \hich\af4\dbch\af31505\loch\f4 The above copyright notice and this permission notice shall be included in all\hich\af4\dbch\af31505\loch\f4 copies or substantial portions of the Software. -\par -\par \hich\af4\dbch\af31505\loch\f4 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN N -\hich\af4\dbch\af31505\loch\f4 -O EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -\par -\par }{\rtlch\fcs1 \ab\af4\afs22 \ltrch\fcs0 \b\fs22\cf25\lang2057\langfe2052\langnp2057\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 RestSharp v.106.12.0.0: -\par }{\field{\*\fldinst {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\lang2057\langfe2052\langnp2057\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 -HYPERLINK "https://nam11.safelinks.protection.outlook.com/?url=http%3A%2F%2Fwww.apache.org%2Flicenses%2FLICENSE-2.0&data=04%7C01%7CJames.Conner%40autodesk.com%7Cdaecd65781944b855e7808d946251ff6%7C67bff79e7f914433a8e5c9252d2ddc1d%7C -\hich\af4\dbch\af31505\loch\f4 0%7C0%7C637617947520478947%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=foUoDUPyy8Or0rkNJtlLjI9XfJO7gemOLFnuKIkflHU%3D&reserved=0" }{\rtlch\fcs1 \af4\afs22 -\ltrch\fcs0 \fs22\ul\cf26\lang2057\langfe2052\langnp2057\insrsid1784394 {\*\datafield -00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b4a030000680074007400700073003a002f002f006e0061006d00310031002e0073006100660065006c0069006e006b0073002e00700072006f00740065006300740069006f006e002e006f00750074006c006f006f00 -6b002e0063006f006d002f003f00750072006c003d0068007400740070002500330041002500320046002500320046007700770077002e006100700061006300680065002e006f00720067002500320046006c006900630065006e007300650073002500320046004c004900430045004e00530045002d0032002e00300026 -0064006100740061003d0030003400250037004300300031002500370043004a0061006d00650073002e0043006f006e006e00650072002500340030006100750074006f006400650073006b002e0063006f006d00250037004300640061006500630064003600350037003800310039003400340062003800350035006500 -37003800300038006400390034003600320035003100660066003600250037004300360037006200660066003700390065003700660039003100340034003300330061003800650035006300390032003500320064003200640064006300310064002500370043003000250037004300300025003700430036003300370036 -003100370039003400370035003200300034003700380039003400370025003700430055006e006b006e006f0077006e002500370043005400570046007000620047005a0073006200330064003800650079004a00570049006a006f0069004d004300340077004c006a00410077004d004400410069004c0043004a005100 -49006a006f006900560032006c0075004d007a00490069004c0043004a004200540069004900360049006b003100680061005700770069004c0043004a00580056004300490036004d006e00300025003300440025003700430031003000300030002600730064006100740061003d0066006f0055006f0044005500500079 -00790038004f007200300072006b004e004a0074006c004c006a0049003900580066004a004f003700670065006d004f004c0046006e0075004b0049006b0066006c00480055002500330044002600720065007300650072007600650064003d0030000000795881f43b1d7f48af2c825dc485276300000000a5ab00030e49 -6354000048740000006d3d69002d}}}{\fldrslt {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\lang2057\langfe2052\langnp2057\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 http://www.apache.org/licenses/LICENSE-2.0}}}\sectd \ltrsect -\linex0\sectdefaultcl\sftnbj {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\lang2057\langfe2052\langnp2057\insrsid9658238 -\par }{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\lang2057\langfe2052\langnp2057\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 \hich\f4 Copyright \'a9\loch\f4 2021 Alexe Zimarev -\par -\par \hich\af4\dbch\af31505\loch\f4 Licensed unde\hich\af4\dbch\af31505\loch\f4 r the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at }{\field{\*\fldinst { -\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\lang2057\langfe2052\langnp2057\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 HYPERLINK http://www.apache.org/licenses/LICENSE-2.0 }{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 -\fs22\lang2057\langfe2052\langnp2057\insrsid1784394 {\*\datafield -00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b6e00000068007400740070003a002f002f007700770077002e006100700061006300680065002e006f00720067002f006c006900630065006e007300650073002f004c004900430045004e00530045002d0032002e00 -30000000795881f43b1d7f48af2c825dc485276300000000a5ab0003126e000000220074000000c712200033}}}{\fldrslt {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\lang2057\langfe2052\langnp2057\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 -http://www.apache.org/licenses/LICENSE-2.0}}}\sectd \ltrsect\linex0\sectdefaultcl\sftnbj {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\lang2057\langfe2052\langnp2057\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 - Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, W\hich\af4\dbch\af31505\loch\f4 -ITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. -\par }{\rtlch\fcs1 \af40\afs18 \ltrch\fcs0 \f40\fs18\lang2057\langfe2052\langnp2057\insrsid9658238 -\par }\pard \ltrpar\ql \li0\ri0\sl288\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \ab\af4\afs22 \ltrch\fcs0 \b\fs22\cf25\lang2057\langfe2052\kerning1\langnp2057\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 System.Collections.Immutable -}{\rtlch\fcs1 \ab\af4\afs22 \ltrch\fcs0 \b\fs22\cf25\lang2057\langfe2052\kerning1\langnp2057\insrsid8078116\charrsid8078116 \hich\af4\dbch\af31505\loch\f4 v.5.0.0}{\rtlch\fcs1 \ab\af4\afs22 \ltrch\fcs0 -\b\fs22\cf25\lang2057\langfe2052\kerning1\langnp2057\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 : -\par }\pard \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\lang2057\langfe2052\langnp2057\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 Copyright (c) 2017 .NET Foundation and Contributors -\par \hich\af4\dbch\af31505\loch\f4 All rights reserved. -\par -\par \hich\af4\dbch\af31505\loch\f4 Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without res\hich\af4\dbch\af31505\loch\f4 -triction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -\par -\par \hich\af4\dbch\af31505\loch\f4 The \hich\af4\dbch\af31505\loch\f4 above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. -\par -\par \hich\af4\dbch\af31505\loch\f4 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF M\hich\af4\dbch\af31505\loch\f4 -ERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN C -\hich\af4\dbch\af31505\loch\f4 O\hich\af4\dbch\af31505\loch\f4 NNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -\par }{\rtlch\fcs1 \af40\afs18 \ltrch\fcs0 \f40\fs18\lang2057\langfe2052\langnp2057\insrsid9658238 -\par }\pard \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid411363 {\rtlch\fcs1 \ab\af4\afs22 \ltrch\fcs0 \b\fs22\cf25\lang1031\langfe2052\kerning2\langnp1031\insrsid411363 \hich\af4\dbch\af31505\loch\f4 FontAwesome5 v.2.1.11: -\par }{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\lang1031\langfe2052\langnp1031\insrsid411363 \hich\af4\dbch\af31505\loch\f4 https://www.nuget.org/packages/FontAwesome5/ -\par \hich\af4\dbch\af31505\loch\f4 https://github.com/MartinTopfstedt/FontAwesome5/blob/master/LICENSE -\par }{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\insrsid411363 \hich\af4\dbch\af31505\loch\f4 MIT License -\par \hich\af4\dbch\af31505\loch\f4 Copyright (c) 2018 MartinTopfstedt -\par -\par \hich\af4\dbch\af31505\loch\f4 The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. -\par -\par \hich\af4\dbch\af31505\loch\f4 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIE\hich\af4\dbch\af31505\loch\f4 -S OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF O -\hich\af4\dbch\af31505\loch\f4 R\hich\af4\dbch\af31505\loch\f4 IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -\par }\pard \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \af40\afs18 \ltrch\fcs0 \f40\fs18\insrsid9658238 -\par }\pard \ltrpar\ql \li0\ri0\sl288\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \ab\af4\afs22 \ltrch\fcs0 \b\fs22\cf25\kerning1\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 Cyotek.Drawing.BitmapFont }{\rtlch\fcs1 \ab\af4\afs22 -\ltrch\fcs0 \b\fs22\cf25\kerning1\insrsid6955063\charrsid6955063 \hich\af4\dbch\af31505\loch\f4 v.2.0.0}{\rtlch\fcs1 \ab\af4\afs22 \ltrch\fcs0 \b\fs22\cf25\kerning1\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 : -\par }\pard \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\field{\*\fldinst {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 HYPERLI\hich\af4\dbch\af31505\loch\f4 -NK "https://nam11.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fcyotek%2FCyotek.Drawing.BitmapFont&data=04%7C01%7CJames.Conner%40autodesk.com%7Cdaecd65781944b855e7808d946251ff6%7C67bff79e7f914433a8e5c9252d2ddc1d%7C0%7C0%7C63761794752016 -0\hich\af4\dbch\af31505\loch\f4 343%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=kvdO%2FPPgz3PuASG6zv93DwNJ4gPkL6T6islWBwoI9Xk%3D&reserved=0" }{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 -\fs22\ul\cf26\insrsid1784394 {\*\datafield -00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b60030000680074007400700073003a002f002f006e0061006d00310031002e0073006100660065006c0069006e006b0073002e00700072006f00740065006300740069006f006e002e006f00750074006c006f006f00 -6b002e0063006f006d002f003f00750072006c003d00680074007400700073002500330041002500320046002500320046006700690074006800750062002e0063006f006d00250032004600630079006f00740065006b00250032004600430079006f00740065006b002e00440072006100770069006e0067002e00420069 -0074006d006100700046006f006e007400260064006100740061003d0030003400250037004300300031002500370043004a0061006d00650073002e0043006f006e006e00650072002500340030006100750074006f006400650073006b002e0063006f006d00250037004300640061006500630064003600350037003800 -31003900340034006200380035003500650037003800300038006400390034003600320035003100660066003600250037004300360037006200660066003700390065003700660039003100340034003300330061003800650035006300390032003500320064003200640064006300310064002500370043003000250037 -004300300025003700430036003300370036003100370039003400370035003200300031003600300033003400330025003700430055006e006b006e006f0077006e002500370043005400570046007000620047005a0073006200330064003800650079004a00570049006a006f0069004d004300340077004c006a004100 -77004d004400410069004c0043004a00510049006a006f006900560032006c0075004d007a00490069004c0043004a004200540069004900360049006b003100680061005700770069004c0043004a00580056004300490036004d006e00300025003300440025003700430031003000300030002600730064006100740061 -003d006b00760064004f002500320046005000500067007a0033005000750041005300470036007a00760039003300440077004e004a003400670050006b004c00360054003600690073006c005700420077006f004900390058006b002500330044002600720065007300650072007600650064003d0030000000795881f4 -3b1d7f48af2c825dc485276300000000a5ab00030053002000000000000000c41f6d0000}}}{\fldrslt {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 https://github.com/cyotek/Cyotek.Drawing.BitmapFont}}}\sectd \ltrsect -\linex0\sectdefaultcl\sftnbj {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\insrsid9658238 -\par }{\field{\*\fldinst {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 HYPERLINK "https://nam11.safelinks.protection\hich\af4\dbch\af31505\loch\f4 -.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fcyotek%2FCyotek.Drawing.BitmapFont%2Fblob%2Fmaster%2FLICENSE.txt&data=04%7C01%7CJames.Conner%40autodesk.com%7Cdaecd65781944b855e7808d946251ff6%7C67bff79e7f914433a8e5c9252d2ddc1d%7C0%7C0%7C637617947520170297%7CU -\hich\af4\dbch\af31505\loch\f4 n\hich\af4\dbch\af31505\loch\f4 known%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=WjEf%2FyE1koklbovxfFzHrScckILOiAOQlGkhPLaZ%2FL8%3D&reserved=0" }{\rtlch\fcs1 \af4\afs22 -\ltrch\fcs0 \fs22\ul\cf26\insrsid1784394 {\*\datafield -00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90ba0030000680074007400700073003a002f002f006e0061006d00310031002e0073006100660065006c0069006e006b0073002e00700072006f00740065006300740069006f006e002e006f00750074006c006f006f00 -6b002e0063006f006d002f003f00750072006c003d00680074007400700073002500330041002500320046002500320046006700690074006800750062002e0063006f006d00250032004600630079006f00740065006b00250032004600430079006f00740065006b002e00440072006100770069006e0067002e00420069 -0074006d006100700046006f006e00740025003200460062006c006f0062002500320046006d00610073007400650072002500320046004c004900430045004e00530045002e00740078007400260064006100740061003d0030003400250037004300300031002500370043004a0061006d00650073002e0043006f006e00 -6e00650072002500340030006100750074006f006400650073006b002e0063006f006d0025003700430064006100650063006400360035003700380031003900340034006200380035003500650037003800300038006400390034003600320035003100660066003600250037004300360037006200660066003700390065 -003700660039003100340034003300330061003800650035006300390032003500320064003200640064006300310064002500370043003000250037004300300025003700430036003300370036003100370039003400370035003200300031003700300032003900370025003700430055006e006b006e006f0077006e00 -2500370043005400570046007000620047005a0073006200330064003800650079004a00570049006a006f0069004d004300340077004c006a00410077004d004400410069004c0043004a00510049006a006f006900560032006c0075004d007a00490069004c0043004a004200540069004900360049006b003100680061 -005700770069004c0043004a00580056004300490036004d006e00300025003300440025003700430031003000300030002600730064006100740061003d0057006a00450066002500320046007900450031006b006f006b006c0062006f0076007800660046007a00480072005300630063006b0049004c004f0069004100 -4f0051006c0047006b00680050004c0061005a002500320046004c0038002500330044002600720065007300650072007600650064003d0030000000795881f43b1d7f48af2c825dc485276300000000a5ab000300730000000000000000006900000001}}}{\fldrslt {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 -\fs22\ul\cf26\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 https://github.com/cyotek/Cyotek.Drawing.BitmapFont/blob/master/LICENSE.tx\hich\af4\dbch\af31505\loch\f4 t}}}\sectd \ltrsect\linex0\sectdefaultcl\sftnbj {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 -\fs22\ul\cf26\insrsid9658238 -\par }{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 The MIT License (MIT) -\par \hich\af4\dbch\af31505\loch\f4 \hich\f4 Copyright \'a9\loch\f4 2012-2021 Cyotek Ltd. -\par -\par \hich\af4\dbch\af31505\loch\f4 -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, m -\hich\af4\dbch\af31505\loch\f4 e\hich\af4\dbch\af31505\loch\f4 rge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: -\par -\par \hich\af4\dbch\af31505\loch\f4 The above copyright notice and this permission notice shall be included in all\hich\af4\dbch\af31505\loch\f4 copies or substantial portions of the Software. -\par -\par \hich\af4\dbch\af31505\loch\f4 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN N -\hich\af4\dbch\af31505\loch\f4 -O EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -\par }{\rtlch\fcs1 \af40\afs18 \ltrch\fcs0 \f40\fs18\insrsid9658238 -\par }\pard \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid6759865 {\rtlch\fcs1 \ab\af4\afs22 \ltrch\fcs0 \b\fs22\cf25\kerning1\insrsid6759865\charrsid6759865 \hich\af4\dbch\af31505\loch\f4 Helix Toolkit v.2.24.0: -\par \hich\af4\dbch\af31505\loch\f4 HelixToolkit.Core.Wpf v.2.24.0: -\par \hich\af4\dbch\af31505\loch\f4 HelixToolkit.SharpDX.Core v.2.24.0: -\par \hich\af4\dbch\af31505\loch\f4 HelixT\hich\af4\dbch\af31505\loch\f4 oolkit.SharpDX.Core.Wpf v.2.24.0:}{\rtlch\fcs1 \ab\af4\afs22 \ltrch\fcs0 \b\fs22\cf25\kerning1\insrsid6759865 -\par }{\field{\*\fldinst {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 -HYPERLINK "https://nam11.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fhelix-toolkit%2Fhelix-toolkit&data=04%7C01%7CJames.Conner%40autodesk.com%7Cdaecd65781944b855e7808d946251ff6%7C67bff79e7f914433a8e5c9252d2ddc1d -\hich\af4\dbch\af31505\loch\f4 %7C0%7C0%7C637617947520210113%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=dfWqblB8VdDL63AyawNfgrFG2TD08PCrheqsu%2B7K0Us%3D&reserved=0" }{\rtlch\fcs1 \af4\afs22 -\ltrch\fcs0 \fs22\ul\cf26\insrsid1784394 {\*\datafield -00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b56030000680074007400700073003a002f002f006e0061006d00310031002e0073006100660065006c0069006e006b0073002e00700072006f00740065006300740069006f006e002e006f00750074006c006f006f00 -6b002e0063006f006d002f003f00750072006c003d00680074007400700073002500330041002500320046002500320046006700690074006800750062002e0063006f006d00250032004600680065006c00690078002d0074006f006f006c006b0069007400250032004600680065006c00690078002d0074006f006f006c -006b0069007400260064006100740061003d0030003400250037004300300031002500370043004a0061006d00650073002e0043006f006e006e00650072002500340030006100750074006f006400650073006b002e0063006f006d0025003700430064006100650063006400360035003700380031003900340034006200 -38003500350065003700380030003800640039003400360032003500310066006600360025003700430036003700620066006600370039006500370066003900310034003400330033006100380065003500630039003200350032006400320064006400630031006400250037004300300025003700430030002500370043 -0036003300370036003100370039003400370035003200300032003100300031003100330025003700430055006e006b006e006f0077006e002500370043005400570046007000620047005a0073006200330064003800650079004a00570049006a006f0069004d004300340077004c006a00410077004d00440041006900 -4c0043004a00510049006a006f006900560032006c0075004d007a00490069004c0043004a004200540069004900360049006b003100680061005700770069004c0043004a00580056004300490036004d006e00300025003300440025003700430031003000300030002600730064006100740061003d0064006600570071 -0062006c00420038005600640044004c003600330041007900610077004e0066006700720046004700320054004400300038005000430072006800650071007300750025003200420037004b003000550073002500330044002600720065007300650072007600650064003d0030000000795881f43b1d7f48af2c825dc485 -276300000000a5ab0003000000330000f22e000064640050000b}}}{\fldrslt {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 https://github.com/helix-toolkit/helix-toolkit}}}\sectd \ltrsect\linex0\sectdefaultcl\sftnbj { -\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\insrsid9658238 -\par }\pard \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\field{\*\fldinst {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 HYPERLINK "https://nam11.safe\hich\af4\dbch\af31505\loch\f4 -links.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fhelix-toolkit%2Fhelix-toolkit%2Fblob%2Fdevelop%2FLICENSE&data=04%7C01%7CJames.Conner%40autodesk.com%7Cdaecd65781944b855e7808d946251ff6%7C67bff79e7f914433a8e5c9252d2ddc1d%7C0%7C0%7C63761794752021 -0\hich\af4\dbch\af31505\loch\f4 113%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=qUPlp6EXAxHOk9eACY7DopacUlVCn355KLenUznV%2Ft0%3D&reserved=0" }{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 -\fs22\ul\cf26\insrsid1784394 {\*\datafield -00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b8c030000680074007400700073003a002f002f006e0061006d00310031002e0073006100660065006c0069006e006b0073002e00700072006f00740065006300740069006f006e002e006f00750074006c006f006f00 -6b002e0063006f006d002f003f00750072006c003d00680074007400700073002500330041002500320046002500320046006700690074006800750062002e0063006f006d00250032004600680065006c00690078002d0074006f006f006c006b0069007400250032004600680065006c00690078002d0074006f006f006c -006b006900740025003200460062006c006f00620025003200460064006500760065006c006f0070002500320046004c004900430045004e0053004500260064006100740061003d0030003400250037004300300031002500370043004a0061006d00650073002e0043006f006e006e006500720025003400300061007500 -74006f006400650073006b002e0063006f006d002500370043006400610065006300640036003500370038003100390034003400620038003500350065003700380030003800640039003400360032003500310066006600360025003700430036003700620066006600370039006500370066003900310034003400330033 -0061003800650035006300390032003500320064003200640064006300310064002500370043003000250037004300300025003700430036003300370036003100370039003400370035003200300032003100300031003100330025003700430055006e006b006e006f0077006e0025003700430054005700460070006200 -47005a0073006200330064003800650079004a00570049006a006f0069004d004300340077004c006a00410077004d004400410069004c0043004a00510049006a006f006900560032006c0075004d007a00490069004c0043004a004200540069004900360049006b003100680061005700770069004c0043004a00580056 -004300490036004d006e00300025003300440025003700430031003000300030002600730064006100740061003d007100550050006c0070003600450058004100780048004f006b0039006500410043005900370044006f0070006100630055006c00560043006e003300350035004b004c0065006e0055007a006e005600 -250032004600740030002500330044002600720065007300650072007600650064003d0030000000795881f43b1d7f48af2c825dc485276300000000a5ab0003005365d40000000000000050006100a8}}}{\fldrslt {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\insrsid9658238 -\hich\af4\dbch\af31505\loch\f4 https://github.com/helix-toolkit/helix-toolkit/blob/develop/LICENSE}}}\sectd \ltrsect\linex0\sectdefaultcl\sftnbj {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\insrsid9658238 -\par }{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 The MIT\hich\af4\dbch\af31505\loch\f4 License (MIT) -\par \hich\af4\dbch\af31505\loch\f4 Copyright (c) 2019 Helix Toolkit contributors -\par -\par \hich\af4\dbch\af31505\loch\f4 Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, in -\hich\af4\dbch\af31505\loch\f4 -cluding without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: -\par -\par \hich\af4\dbch\af31505\loch\f4 The above copyri\hich\af4\dbch\af31505\loch\f4 ght notice and this permission notice shall be included in all copies or substantial portions of the Software. -\par -\par \hich\af4\dbch\af31505\loch\f4 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILI\hich\af4\dbch\af31505\loch\f4 -TY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WI -\hich\af4\dbch\af31505\loch\f4 T\hich\af4\dbch\af31505\loch\f4 H THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -\par }{\rtlch\fcs1 \af40\afs18 \ltrch\fcs0 \f40\fs18\insrsid9658238 -\par }\pard \ltrpar\ql \li0\ri0\sl288\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid8279958 {\rtlch\fcs1 \ab\af4\afs22 \ltrch\fcs0 \b\fs22\cf25\kerning1\insrsid8279958\charrsid8279958 \hich\af4\dbch\af31505\loch\f4 SharpDX v.4.2.0: -\par \hich\af4\dbch\af31505\loch\f4 SharpDX.D3DCompiler v.4.2.0: -\par \hich\af4\dbch\af31505\loch\f4 SharpDX.Direct2D1 v.4.2.0: -\par \hich\af4\dbch\af31505\loch\f4 SharpDX.Direct3D11 v.4.2.0: -\par \hich\af4\dbch\af31505\loch\f4 SharpDX.Direct3D9 v.4.2.0: -\par \hich\af4\dbch\af31505\loch\f4 SharpDX.DXGI v.4.2.0: -\par \hich\af4\dbch\af31505\loch\f4 SharpDX.Mathematics v.4.2.0}{\rtlch\fcs1 \ab\af4\afs22 \ltrch\fcs0 \b\fs22\cf25\kerning1\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 : -\par }\pard \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\field{\*\fldinst {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 -HYPERLINK "https://nam11.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fsharpdx%2FSharpDX%2Fblob%2Fmaster%2FLICENSE&data=04%7C01%7CJames.Conner%40autodesk.com%\hich\af4\dbch\af31505\loch\f4 -7Cdaecd65781944b855e7808d946251ff6%7C67bff79e7f914433a8e5c9252d2ddc1d%7C0%7C0%7C637617947520488895%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=VOYhb2IAZGG0jx%2FwQxJ2Q9HXN2t6XKVVP6AiBEdD%2F3E%3D&r -\hich\af4\dbch\af31505\loch\f4 e\hich\af4\dbch\af31505\loch\f4 served=0" }{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\insrsid1784394 {\*\datafield -00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b76030000680074007400700073003a002f002f006e0061006d00310031002e0073006100660065006c0069006e006b0073002e00700072006f00740065006300740069006f006e002e006f00750074006c006f006f00 -6b002e0063006f006d002f003f00750072006c003d00680074007400700073002500330041002500320046002500320046006700690074006800750062002e0063006f006d002500320046007300680061007200700064007800250032004600530068006100720070004400580025003200460062006c006f006200250032 -0046006d00610073007400650072002500320046004c004900430045004e0053004500260064006100740061003d0030003400250037004300300031002500370043004a0061006d00650073002e0043006f006e006e00650072002500340030006100750074006f006400650073006b002e0063006f006d00250037004300 -64006100650063006400360035003700380031003900340034006200380035003500650037003800300038006400390034003600320035003100660066003600250037004300360037006200660066003700390065003700660039003100340034003300330061003800650035006300390032003500320064003200640064 -006300310064002500370043003000250037004300300025003700430036003300370036003100370039003400370035003200300034003800380038003900350025003700430055006e006b006e006f0077006e002500370043005400570046007000620047005a0073006200330064003800650079004a00570049006a00 -6f0069004d004300340077004c006a00410077004d004400410069004c0043004a00510049006a006f006900560032006c0075004d007a00490069004c0043004a004200540069004900360049006b003100680061005700770069004c0043004a00580056004300490036004d006e00300025003300440025003700430031 -003000300030002600730064006100740061003d0056004f005900680062003200490041005a004700470030006a0078002500320046007700510078004a00320051003900480058004e0032007400360058004b00560056005000360041006900420045006400440025003200460033004500250033004400260072006500 -7300650072007600650064003d0030000000795881f43b1d7f48af2c825dc485276300000000a5ab0003002d00000000240000ff003200760000}}}{\fldrslt {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 -https://github.com/sharpdx/SharpDX/blob/master/LICENSE}}}\sectd \ltrsect\linex0\sectdefaultcl\sftnbj {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\insrsid9658238 -\par }{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 Copyright (c) 2010-2014 SharpDX - Alexandre Mutel -\par -\par \hich\af4\dbch\af31505\loch\f4 Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Softw\hich\af4\dbch\af31505\loch\f4 -are"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, -\hich\af4\dbch\af31505\loch\f4 \hich\af4\dbch\af31505\loch\f4 subject to the following conditions: -\par -\par \hich\af4\dbch\af31505\loch\f4 The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. -\par -\par \hich\af4\dbch\af31505\loch\f4 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES \hich\af4\dbch\af31505\loch\f4 -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR -\hich\af4\dbch\af31505\loch\f4 I\hich\af4\dbch\af31505\loch\f4 N CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -\par }{\rtlch\fcs1 \af40\afs18 \ltrch\fcs0 \f40\fs18\insrsid9658238 -\par }{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\insrsid9658238 -\par }\pard \ltrpar\ql \li0\ri0\sl288\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid14628192 {\rtlch\fcs1 \ab\af4\afs22 \ltrch\fcs0 \b\fs22\cf25\kerning1\insrsid14628192\charrsid14628192 \hich\af4\dbch\af31505\loch\f4 -ICSharpCode.AvalonEdit v.6.3.0.90: -\par }\pard \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid14628192 {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\insrsid14628192\charrsid14628192 \hich\af4\dbch\af31505\loch\f4 http://www.avalonedit.net/ -\par \hich\af4\dbch\af31505\loch\f4 https://licenses.nuget.org/MIT -\par }{\rtlch\fcs1 \af40\afs18 \ltrch\fcs0 \f40\fs18\insrsid14628192\charrsid14628192 -\par }{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\insrsid14628192\charrsid14628192 \hich\af4\dbch\af31505\loch\f4 MIT License -\par -\par \hich\af4\dbch\af31505\loch\f4 -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, m -\hich\af4\dbch\af31505\loch\f4 e\hich\af4\dbch\af31505\loch\f4 rge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: -\par -\par \hich\af4\dbch\af31505\loch\f4 The above copyright notice and this permission notice (including the next para\hich\af4\dbch\af31505\loch\f4 graph) shall be included in all copies or substantial portions of the Software. -\par -\par \hich\af4\dbch\af31505\loch\f4 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PU\hich\af4\dbch\af31505\loch\f4 -RPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR O -\hich\af4\dbch\af31505\loch\f4 T\hich\af4\dbch\af31505\loch\f4 HER DEALINGS IN THE SOFTWARE}{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\insrsid9658238\charrsid14628192 -\par }{\rtlch\fcs1 \af40\afs18 \ltrch\fcs0 \f40\fs18\insrsid14628192 -\par }\pard \ltrpar\ql \li0\ri0\sl288\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \ab\af4\afs22 \ltrch\fcs0 \b\fs22\cf25\kerning1\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 Google OpenSans: -\par }\pard \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 OpenSans font from Google -\par }{\field{\*\fldinst {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 -HYPERLINK "https://nam11.safelinks.protection.outlook.com/?url=http%3A%2F%2Fwww.google.com%2Ffonts%2Fspecimen%2FOpen%2BSans&data=04%7C01%7CJames.Conner%40autodesk.com%7Cdaecd65781944b\hich\af4\dbch\af31505\loch\f4 -855e7808d946251ff6%7C67bff79e7f914433a8e5c9252d2ddc1d%7C0%7C0%7C637617947520439110%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=uwmtTlbBUjq%2B1z%2FvJsb9jSJ7i6M8hIMll1qnznB0mDw%3D&reserved=0" }{ -\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\insrsid1784394 {\*\datafield -00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b62030000680074007400700073003a002f002f006e0061006d00310031002e0073006100660065006c0069006e006b0073002e00700072006f00740065006300740069006f006e002e006f00750074006c006f006f00 -6b002e0063006f006d002f003f00750072006c003d0068007400740070002500330041002500320046002500320046007700770077002e0067006f006f0067006c0065002e0063006f006d0025003200460066006f006e0074007300250032004600730070006500630069006d0065006e002500320046004f00700065006e -00250032004200530061006e007300260064006100740061003d0030003400250037004300300031002500370043004a0061006d00650073002e0043006f006e006e00650072002500340030006100750074006f006400650073006b002e0063006f006d002500370043006400610065006300640036003500370038003100 -39003400340062003800350035006500370038003000380064003900340036003200350031006600660036002500370043003600370062006600660037003900650037006600390031003400340033003300610038006500350063003900320035003200640032006400640063003100640025003700430030002500370043 -00300025003700430036003300370036003100370039003400370035003200300034003300390031003100300025003700430055006e006b006e006f0077006e002500370043005400570046007000620047005a0073006200330064003800650079004a00570049006a006f0069004d004300340077004c006a0041007700 -4d004400410069004c0043004a00510049006a006f006900560032006c0075004d007a00490069004c0043004a004200540069004900360049006b003100680061005700770069004c0043004a00580056004300490036004d006e00300025003300440025003700430031003000300030002600730064006100740061003d -00750077006d00740054006c006200420055006a00710025003200420031007a0025003200460076004a007300620039006a0053004a003700690036004d003800680049004d006c006c00310071006e007a006e00420030006d00440077002500330044002600720065007300650072007600650064003d00300000007958 -81f43b1d7f48af2c825dc485276300000000a5ab000300730061006e002b6500007300010076}}}{\fldrslt {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 http://www.google.c\hich\af4\dbch\af31505\loch\f4 -om/fonts/specimen/Open+Sans}}}\sectd \ltrsect\linex0\sectdefaultcl\sftnbj {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\insrsid9658238 -\par }{\field{\*\fldinst {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 -HYPERLINK "https://nam11.safelinks.protection.outlook.com/?url=http%3A%2F%2Fwww.apache.org%2Flicenses%2FLICENSE-2.0.html&data=04%7C01%7CJames.Conner%40autodesk.com%7Cdaecd65781944b855e7808d946251ff6%7C67bff79e7f914433a8e5c925 -\hich\af4\dbch\af31505\loch\f4 2d2ddc1d%7C0%7C0%7C637617947520449066%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=u4S07VDF20%2BhKswWuPxfNxdMvEV6u6kUxVXid57TMkQ%3D&reserved=0" }{\rtlch\fcs1 -\af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\insrsid1784394 {\*\datafield -00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b58030000680074007400700073003a002f002f006e0061006d00310031002e0073006100660065006c0069006e006b0073002e00700072006f00740065006300740069006f006e002e006f00750074006c006f006f00 -6b002e0063006f006d002f003f00750072006c003d0068007400740070002500330041002500320046002500320046007700770077002e006100700061006300680065002e006f00720067002500320046006c006900630065006e007300650073002500320046004c004900430045004e00530045002d0032002e0030002e -00680074006d006c00260064006100740061003d0030003400250037004300300031002500370043004a0061006d00650073002e0043006f006e006e00650072002500340030006100750074006f006400650073006b002e0063006f006d002500370043006400610065006300640036003500370038003100390034003400 -62003800350035006500370038003000380064003900340036003200350031006600660036002500370043003600370062006600660037003900650037006600390031003400340033003300610038006500350063003900320035003200640032006400640063003100640025003700430030002500370043003000250037 -00430036003300370036003100370039003400370035003200300034003400390030003600360025003700430055006e006b006e006f0077006e002500370043005400570046007000620047005a0073006200330064003800650079004a00570049006a006f0069004d004300340077004c006a00410077004d0044004100 -69004c0043004a00510049006a006f006900560032006c0075004d007a00490069004c0043004a004200540069004900360049006b003100680061005700770069004c0043004a00580056004300490036004d006e00300025003300440025003700430031003000300030002600730064006100740061003d007500340053 -00300037005600440046003200300025003200420068004b0073007700570075005000780066004e00780064004d007600450056003600750036006b005500780056005800690064003500370054004d006b0051002500330044002600720065007300650072007600650064003d0030000000795881f43b1d7f48af2c825d -c485276300000000a5ab000300468069007f006c00000000004d007d}}}{\fldrslt {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 http://www.apache.org/licenses/LICENSE-2.0.html}}}\sectd \ltrsect -\linex0\sectdefaultcl\sftnbj {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\insrsid9658238 -\par }{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 \hich\f4 Copyright \'a9\loch\f4 [yyyy] \hich\af4\dbch\af31505\loch\f4 Steve Matteson -\par -\par \hich\af4\dbch\af31505\loch\f4 Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at }{\field{\*\fldinst {\rtlch\fcs1 \af4\afs22 -\ltrch\fcs0 \fs22\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 HYPERLINK http://www.apache.org/licenses/LICENSE-2.0 }{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\insrsid1784394 {\*\datafield -00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b6e00000068007400740070003a002f002f007700770077002e006100700061006300680065002e006f00720067002f006c006900630065006e007300650073002f004c004900430045004e00530045002d0032002e00 -30000000795881f43b1d7f48af2c825dc485276300000000a5ab000300740069007f01c10000003a00000065}}}{\fldrslt {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 http://www.apache.org/licenses/LICENSE-2.0}}}\sectd \ltrsect -\linex0\sectdefaultcl\sftnbj {\rtlch\fcs1 \af0\afs22 \ltrch\fcs0 \f0\fs22\ul\cf26\insrsid9658238 \hich\af0\dbch\af31505\loch\f0 }{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 -Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language govern -\hich\af4\dbch\af31505\loch\f4 i\hich\af4\dbch\af31505\loch\f4 ng permissions and limitations under the License.}{\rtlch\fcs1 \af0\afs22 \ltrch\fcs0 \f0\fs22\ul\cf26\insrsid9658238 -\par }{\rtlch\fcs1 \af40\afs18 \ltrch\fcs0 \f40\fs18\insrsid9658238 -\par }\pard \ltrpar\ql \li0\ri0\sl288\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \ab\af4\afs22 \ltrch\fcs0 \b\fs22\cf25\kerning1\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 DocumentFormat.OpenXml v.2.12.3: -\par }\pard \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 The MIT License (MIT) -\par \hich\af4\dbch\af31505\loch\f4 Copyright (c) Microsoft Corporation -\par -\par \hich\af4\dbch\af31505\loch\f4 -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, m -\hich\af4\dbch\af31505\loch\f4 e\hich\af4\dbch\af31505\loch\f4 rge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: -\par -\par \hich\af4\dbch\af31505\loch\f4 The above copyright notice and this permission notice shall be included in all\hich\af4\dbch\af31505\loch\f4 copies or substantial portions of the Software. -\par -\par \hich\af4\dbch\af31505\loch\f4 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN N -\hich\af4\dbch\af31505\loch\f4 -O EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -\par }{\rtlch\fcs1 \af40\afs18 \ltrch\fcs0 \f40\fs18\insrsid9658238 -\par }\pard \ltrpar\ql \li0\ri0\sl288\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \ab\af4\afs22 \ltrch\fcs0 \b\fs22\cf25\kerning1\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 IronPython.StdLib v.2.7.9: -\par }\pard \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 \hich\f4 Copyright \'a9\loch\f4 2018 Slide & Slozier -\par -\par \hich\af4\dbch\af31505\loch\f4 1. This LICENSE AGREEMENT is between the Python Software Foundation ("PSF"), and the Individual or Organization ("Licensee") accessing and otherwise using Python 2.7.18 software in source or bina -\hich\af4\dbch\af31505\loch\f4 ry form and its associated documentation. -\par -\par \hich\af4\dbch\af31505\loch\f4 2. Subject to the terms and conditions of this License Agreement, PSF hereby grants Licensee a nonexclusive, royalty-free, world-wide license to reproduce, analyze, test, perform and/or display publicly, prepare d -\hich\af4\dbch\af31505\loch\f4 \hich\f4 erivative works, distribute, and otherwise use Python 2.7.18 alone or in any derivative version, provided, however, that PSF's License Agreement and PSF's notice of copyright, i.e., "Copyright \'a9\loch\f4 - 2001-2020 Python Software Foundation; All Rights Reserved" a\hich\af4\dbch\af31505\loch\f4 r\hich\af4\dbch\af31505\loch\f4 e retained in Python 2.7.18 alone or in any derivative version prepared by Licensee. -\par -\par \hich\af4\dbch\af31505\loch\f4 3. In the event Licensee prepares a derivative work that is based on or incorporates Python 2.7.18 or any part thereof, and wants to make the derivative work available to\hich\af4\dbch\af31505\loch\f4 - others as provided herein, then Licensee hereby agrees to include in any such work a brief summary of the changes made to Python 2.7.18. -\par -\par \hich\af4\dbch\af31505\loch\f4 4. PSF is making Python 2.7.18 available to Licensee on an "AS IS" basis. PSF MAKES NO REPRESENTATIONS OR WARRANTIES,\hich\af4\dbch\af31505\loch\f4 - EXPRESS OR IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, PSF MAKES NO AND DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON 2.7.18 WILL NOT INFRINGE ANY THIRD PARTY RIGHTS. - -\par -\par \hich\af4\dbch\af31505\loch\f4 5. P\hich\af4\dbch\af31505\loch\f4 -SF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON 2.7.18 FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON 2.7.18, OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF TH -\hich\af4\dbch\af31505\loch\f4 E\hich\af4\dbch\af31505\loch\f4 POSSIBILITY THEREOF. -\par -\par \hich\af4\dbch\af31505\loch\f4 6. This License Agreement will automatically terminate upon a material breach of its terms and conditions. -\par -\par \hich\af4\dbch\af31505\loch\f4 7. Nothing in this License Agreement shall be deemed to create any relationship of agency, partnership, or joint venture betw\hich\af4\dbch\af31505\loch\f4 -een PSF and Licensee. This License Agreement does not grant permission to use PSF trademarks or trade name in a trademark sense to endorse or promote products or services of Licensee, or any third party. -\par -\par \hich\af4\dbch\af31505\loch\f4 8. By copying, installing or otherwise using Pytho\hich\af4\dbch\af31505\loch\f4 n 2.7.18, Licensee agrees to be bound by the terms and conditions of this License Agreement. -\par -\par }\pard \ltrpar\ql \li0\ri0\sl288\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \ab\af4\afs22 \ltrch\fcs0 \b\fs22\cf25\kerning1\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 IronPython v.2.7.9 -\par \hich\af4\dbch\af31505\loch\f4 DynamicLanguageRuntime v.1.2.2 -\par }\pard \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 Iron Python, Dynamic Language Runtime -\par }{\field{\*\fldinst {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 -HYPERLINK "https://nam11.safelinks.protection.outlook.com/?url=http%3A%2F%2Fironpython.net%2F&data=04%7C01%7CJames.Conner%40autodesk.com%7Cdaecd65781944b855e7808d946251ff6%7C67bff79e7f914433a8e5c9252d2ddc1d%7C0%7C0%7C637617947520230026%7CUnknown%7CTWFpbGZ -\hich\af4\dbch\af31505\loch\f4 s\hich\af4\dbch\af31505\loch\f4 b3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=imRCR5wnzORiO%2BHcoAs4qY%2FUsg2F3%2BvpQsquG4pLPbc%3D&reserved=0" }{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 -\fs22\ul\cf26\insrsid1784394 {\*\datafield -00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b2a030000680074007400700073003a002f002f006e0061006d00310031002e0073006100660065006c0069006e006b0073002e00700072006f00740065006300740069006f006e002e006f00750074006c006f006f00 -6b002e0063006f006d002f003f00750072006c003d006800740074007000250033004100250032004600250032004600690072006f006e0070007900740068006f006e002e006e0065007400250032004600260064006100740061003d0030003400250037004300300031002500370043004a0061006d00650073002e0043 -006f006e006e00650072002500340030006100750074006f006400650073006b002e0063006f006d002500370043006400610065006300640036003500370038003100390034003400620038003500350065003700380030003800640039003400360032003500310066006600360025003700430036003700620066006600 -3700390065003700660039003100340034003300330061003800650035006300390032003500320064003200640064006300310064002500370043003000250037004300300025003700430036003300370036003100370039003400370035003200300032003300300030003200360025003700430055006e006b006e006f -0077006e002500370043005400570046007000620047005a0073006200330064003800650079004a00570049006a006f0069004d004300340077004c006a00410077004d004400410069004c0043004a00510049006a006f006900560032006c0075004d007a00490069004c0043004a004200540069004900360049006b00 -3100680061005700770069004c0043004a00580056004300490036004d006e00300025003300440025003700430031003000300030002600730064006100740061003d0069006d00520043005200350077006e007a004f00520069004f00250032004200480063006f00410073003400710059002500320046005500730067 -003200460033002500320042007600700051007300710075004700340070004c005000620063002500330044002600720065007300650072007600650064003d0030000000795881f43b1d7f48af2c825dc485276300000000a5ab00030d50000095e417f40200277200b80000}}}{\fldrslt {\rtlch\fcs1 \af4\afs22 -\ltrch\fcs0 \fs22\ul\cf26\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 http://ironpython.net/}}}\sectd \ltrsect\linex0\sectdefaultcl\sftnbj {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\insrsid9658238 -\par }{\field{\*\fldinst {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 HYPERLINK "https://nam11.safelinks.protection.outlook.com/?url=http%3A%2F%2Fopensource.org%2Flicenses%2Fapache2.0.php&dat -\hich\af4\dbch\af31505\loch\f4 -a=04%7C01%7CJames.Conner%40autodesk.com%7Cdaecd65781944b855e7808d946251ff6%7C67bff79e7f914433a8e5c9252d2ddc1d%7C0%7C0%7C637617947520339551%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=GqzN3ywkegHn -\hich\af4\dbch\af31505\loch\f4 8\hich\af4\dbch\af31505\loch\f4 Xwxmkje5HuJNO7iecwBGZU3LOoNIus%3D&reserved=0" }{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\insrsid1784394 {\*\datafield -00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b4e030000680074007400700073003a002f002f006e0061006d00310031002e0073006100660065006c0069006e006b0073002e00700072006f00740065006300740069006f006e002e006f00750074006c006f006f00 -6b002e0063006f006d002f003f00750072006c003d0068007400740070002500330041002500320046002500320046006f00700065006e0073006f0075007200630065002e006f00720067002500320046006c006900630065006e0073006500730025003200460061007000610063006800650032002e0030002e00700068 -007000260064006100740061003d0030003400250037004300300031002500370043004a0061006d00650073002e0043006f006e006e00650072002500340030006100750074006f006400650073006b002e0063006f006d002500370043006400610065006300640036003500370038003100390034003400620038003500 -35006500370038003000380064003900340036003200350031006600660036002500370043003600370062006600660037003900650037006600390031003400340033003300610038006500350063003900320035003200640032006400640063003100640025003700430030002500370043003000250037004300360033 -00370036003100370039003400370035003200300033003300390035003500310025003700430055006e006b006e006f0077006e002500370043005400570046007000620047005a0073006200330064003800650079004a00570049006a006f0069004d004300340077004c006a00410077004d004400410069004c004300 -4a00510049006a006f006900560032006c0075004d007a00490069004c0043004a004200540069004900360049006b003100680061005700770069004c0043004a00580056004300490036004d006e00300025003300440025003700430031003000300030002600730064006100740061003d00470071007a004e00330079 -0077006b006500670048006e0038005800770078006d006b006a0065003500480075004a004e004f0037006900650063007700420047005a00550033004c004f006f004e004900750073002500330044002600720065007300650072007600650064003d0030000000795881f43b1d7f48af2c825dc485276300000000a5ab -000300380074000000b0003c004d00631400}}}{\fldrslt {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 http://opensource.org/licenses/apache2.0.php}}}\sectd \ltrsect\linex0\sectdefaultcl\sftnbj {\rtlch\fcs1 -\af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\insrsid9658238 -\par }{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 \hich\f4 Copyright \'a9\loch\f4 2018 Iron Python Community -\par -\par \hich\af4\dbch\af31505\loch\f4 Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a\hich\af4\dbch\af31505\loch\f4 copy of the License at }{\field{\*\fldinst { -\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 HYPERLINK http://www.apache.org/licenses/LICENSE-2.0 }{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\insrsid1784394 {\*\datafield -00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b6e00000068007400740070003a002f002f007700770077002e006100700061006300680065002e006f00720067002f006c006900630065006e007300650073002f004c004900430045004e00530045002d0032002e00 -30000000795881f43b1d7f48af2c825dc485276300000000a5ab000344010069007100610064006100300000}}}{\fldrslt {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 http://www.apache.org/licenses/LICENSE-2.0}}}\sectd \ltrsect -\linex0\sectdefaultcl\sftnbj {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 Unless requ\hich\af4\dbch\af31505\loch\f4 -ired by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permiss -\hich\af4\dbch\af31505\loch\f4 i\hich\af4\dbch\af31505\loch\f4 ons and limitations under the License. -\par }{\rtlch\fcs1 \af40\afs18 \ltrch\fcs0 \f40\fs18\insrsid9658238 -\par }\pard \ltrpar\ql \li0\ri0\sl288\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \ab\af4\afs22 \ltrch\fcs0 \b\fs22\cf25\kerning1\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 Python.Runtime.NETStandard v.3.7.0: -\par }\pard \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 Copyright (c) 2006-2021 the contributors of the Python.NET project -\par -\par \hich\af4\dbch\af31505\loch\f4 Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated doc\hich\af4\dbch\af31505\loch\f4 -umentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Sof -\hich\af4\dbch\af31505\loch\f4 t\hich\af4\dbch\af31505\loch\f4 ware is furnished to do so, subject to the following conditions: -\par -\par \hich\af4\dbch\af31505\loch\f4 The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. -\par -\par \hich\af4\dbch\af31505\loch\f4 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND\hich\af4\dbch\af31505\loch\f4 -, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN A -\hich\af4\dbch\af31505\loch\f4 N\hich\af4\dbch\af31505\loch\f4 ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -\par }{\rtlch\fcs1 \af40\afs18 \ltrch\fcs0 \f40\fs18\insrsid9658238 -\par }\pard \ltrpar\ql \li0\ri0\sl288\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \ab\af4\afs22 \ltrch\fcs0 \b\fs22\cf25\kerning1\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 Python.Included v.3.7.3.4 -\par }\pard \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 PSF LICENSE AGREEMENT FOR PYTHON 3.10.4 -\par -\par \hich\af4\dbch\af31505\loch\f4 1. This LICENSE AGREEMENT is between the Pytho\hich\af4\dbch\af31505\loch\f4 -n Software Foundation ("PSF"), and the Individual or Organization ("Licensee") accessing and otherwise using Python 3.7.3.4 software in source or binary form and its associated documentation. -\par -\par \hich\af4\dbch\af31505\loch\f4 2. Subject to the terms and conditions of this License Agreemen\hich\af4\dbch\af31505\loch\f4 -t, PSF hereby grants Licensee a nonexclusive, royalty-free, world-wide license to reproduce, analyze, test, perform and/or display publicly, prepare derivative works, distribute, and otherwise use Python 3.7.3.4 alone or in any derivative version, provide -\hich\af4\dbch\af31505\loch\f4 d\hich\af4\dbch\af31505\loch\f4 \hich\f4 , however, that PSF's License Agreement and PSF's notice of copyright, i.e., "Copyright \'a9\loch\f4 - 2001-2022 Python Software Foundation; All Rights Reserved" are retained in Python 3.7.3.4 alone or in any derivative version prepared by Licensee. -\par -\par \hich\af4\dbch\af31505\loch\f4 3. In the event Li\hich\af4\dbch\af31505\loch\f4 -censee prepares a derivative work that is based on or incorporates Python 3.7.3.4 or any part thereof, and wants to make the derivative work available to others as provided herein, then Licensee hereby agrees to include in any such work a brief summary of -\hich\af4\dbch\af31505\loch\f4 \hich\af4\dbch\af31505\loch\f4 the changes made to Python 3.7.3.4. -\par -\par \hich\af4\dbch\af31505\loch\f4 4. PSF is making Python 3.7.3.4 available to Licensee on an "AS IS" basis. PSF MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED. BY WAY OF}{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\insrsid15220234 -\hich\af4\dbch\af31505\loch\f4 }{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 EXAMPLE, BUT NOT LIM\hich\af4\dbch\af31505\loch\f4 -ITATION, PSF MAKES NO AND DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON 3.7.3.4 WILL NOT INFRINGE ANY THIRD PARTY RIGHTS. -\par -\par \hich\af4\dbch\af31505\loch\f4 -5. PSF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON 3.7.3.4 FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON 3.7.3.4, OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED -\hich\af4\dbch\af31505\loch\f4 \hich\af4\dbch\af31505\loch\f4 OF THE POSSIBILITY THEREOF. -\par -\par \hich\af4\dbch\af31505\loch\f4 6. This License Agreement will automatically terminate upon a material breach of its terms and conditions. -\par -\par \hich\af4\dbch\af31505\loch\f4 7. Nothing in this License Agreement shall be deemed to create any relationship of agency, partnership, or joint ventur\hich\af4\dbch\af31505\loch\f4 -e between PSF and Licensee. This License Agreement does not grant permission to use PSF trademarks or trade name in a trademark sense to endorse or promote products or services of Licensee, or any third party. -\par -\par \hich\af4\dbch\af31505\loch\f4 8. By copying, installing or otherwise using \hich\af4\dbch\af31505\loch\f4 Python 3.7.3.4, Licensee agrees to be bound by the terms and conditions of this License Agreement. -\par -\par }\pard \ltrpar\ql \li0\ri0\sl288\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \ab\af4\afs22 \ltrch\fcs0 \b\fs22\cf25\kerning1\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 IPython (autoreload.py) v.7.24.1: -\par }\pard \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\field{\*\fldinst {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 -HYPERLINK "https://nam11.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fipython%2Fipython%2Fblob%2Fmaste\hich\af4\dbch\af31505\loch\f4 -r%2FIPython%2Fextensions%2Fautoreload.py&data=04%7C01%7CJames.Conner%40autodesk.com%7Cdaecd65781944b855e7808d946251ff6%7C67bff79e7f914433a8e5c9252d2ddc1d%7C0%7C0%7C637617947520359465%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1h -\hich\af4\dbch\af31505\loch\f4 a\hich\af4\dbch\af31505\loch\f4 WwiLCJXVCI6Mn0%3D%7C1000&sdata=7AtWEHhH3h2E0eDlvyhqM0OyREJugNDsYai4S5egwXc%3D&reserved=0" }{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\insrsid1784394 {\*\datafield -00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90ba8030000680074007400700073003a002f002f006e0061006d00310031002e0073006100660065006c0069006e006b0073002e00700072006f00740065006300740069006f006e002e006f00750074006c006f006f00 -6b002e0063006f006d002f003f00750072006c003d00680074007400700073002500330041002500320046002500320046006700690074006800750062002e0063006f006d00250032004600690070007900740068006f006e00250032004600690070007900740068006f006e0025003200460062006c006f006200250032 -0046006d0061007300740065007200250032004600490050007900740068006f006e0025003200460065007800740065006e00730069006f006e0073002500320046006100750074006f00720065006c006f00610064002e0070007900260064006100740061003d0030003400250037004300300031002500370043004a00 -61006d00650073002e0043006f006e006e00650072002500340030006100750074006f006400650073006b002e0063006f006d00250037004300640061006500630064003600350037003800310039003400340062003800350035006500370038003000380064003900340036003200350031006600660036002500370043 -00360037006200660066003700390065003700660039003100340034003300330061003800650035006300390032003500320064003200640064006300310064002500370043003000250037004300300025003700430036003300370036003100370039003400370035003200300033003500390034003600350025003700 -430055006e006b006e006f0077006e002500370043005400570046007000620047005a0073006200330064003800650079004a00570049006a006f0069004d004300340077004c006a00410077004d004400410069004c0043004a00510049006a006f006900560032006c0075004d007a00490069004c0043004a00420054 -0069004900360049006b003100680061005700770069004c0043004a00580056004300490036004d006e00300025003300440025003700430031003000300030002600730064006100740061003d003700410074005700450048006800480033006800320045003000650044006c0076007900680071004d0030004f007900 -520045004a00750067004e0044007300590061006900340053003500650067007700580063002500330044002600720065007300650072007600650064003d0030000000795881f43b1d7f48af2c825dc485276300000000a5ab00035444650000200000009a0044005b0001}}}{\fldrslt {\rtlch\fcs1 \af4\afs22 -\ltrch\fcs0 \fs22\ul\cf26\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 https://github.com/ipython/ipython/blob/master/IPython/extensions/autoreload.py}}}\sectd \ltrsect\linex0\sectdefaultcl\sftnbj {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 -\fs22\ul\cf26\insrsid9658238 -\par }{\field{\*\fldinst {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 HYPERLINK "https://nam11.safelinks.protection.outlook.com/?ur\hich\af4\dbch\af31505\loch\f4 -l=https%3A%2F%2Fgithub.com%2Fipython%2Fipython%2Fblob%2Fmaster%2FLICENSE&data=04%7C01%7CJames.Conner%40autodesk.com%7Cdaecd65781944b855e7808d946251ff6%7C67bff79e7f914433a8e5c9252d2ddc1d%7C0%7C0%7C637617947520359465%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAw -\hich\af4\dbch\af31505\loch\f4 M\hich\af4\dbch\af31505\loch\f4 DAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=Pilk0qSjYqpb4gwsh9CFaG42mk5wngBXOSykgiBj1EQ%3D&reserved=0" }{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\insrsid1784394 -{\*\datafield -00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b6e030000680074007400700073003a002f002f006e0061006d00310031002e0073006100660065006c0069006e006b0073002e00700072006f00740065006300740069006f006e002e006f00750074006c006f006f00 -6b002e0063006f006d002f003f00750072006c003d00680074007400700073002500330041002500320046002500320046006700690074006800750062002e0063006f006d00250032004600690070007900740068006f006e00250032004600690070007900740068006f006e0025003200460062006c006f006200250032 -0046006d00610073007400650072002500320046004c004900430045004e0053004500260064006100740061003d0030003400250037004300300031002500370043004a0061006d00650073002e0043006f006e006e00650072002500340030006100750074006f006400650073006b002e0063006f006d00250037004300 -64006100650063006400360035003700380031003900340034006200380035003500650037003800300038006400390034003600320035003100660066003600250037004300360037006200660066003700390065003700660039003100340034003300330061003800650035006300390032003500320064003200640064 -006300310064002500370043003000250037004300300025003700430036003300370036003100370039003400370035003200300033003500390034003600350025003700430055006e006b006e006f0077006e002500370043005400570046007000620047005a0073006200330064003800650079004a00570049006a00 -6f0069004d004300340077004c006a00410077004d004400410069004c0043004a00510049006a006f006900560032006c0075004d007a00490069004c0043004a004200540069004900360049006b003100680061005700770069004c0043004a00580056004300490036004d006e00300025003300440025003700430031 -003000300030002600730064006100740061003d00500069006c006b003000710053006a0059007100700062003400670077007300680039004300460061004700340032006d006b00350077006e006700420058004f00530079006b006700690042006a003100450051002500330044002600720065007300650072007600 -650064003d0030000000795881f43b1d7f48af2c825dc485276300000000a5ab0003124300380022006300000052006c00ba}}}{\fldrslt {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 -https://github.com/ipython/ipython/blob/master/LICENSE}}}\sectd \ltrsect\linex0\sectdefaultcl\sftnbj {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\insrsid9658238 -\par }{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 BSD 3-Clause License -\par \hich\af4\dbch\af31505\loch\f4 - Copyright (c) 2008-Present, IPython Development Team -\par }{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\lang3082\langfe2052\langnp3082\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 - Copyr\hich\af4\dbch\af31505\loch\f4 ight (c) 2001-2007, Fernando Perez -\par }{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 - Copyright (c) 2001, Janko Hauser -\par \hich\af4\dbch\af31505\loch\f4 - Copyright (c) 2001, Nathaniel Gray -\par \hich\af4\dbch\af31505\loch\f4 All rights reserved. -\par -\par \hich\af4\dbch\af31505\loch\f4 Redistribution and use in source and binary forms, with \hich\af4\dbch\af31505\loch\f4 or without modification, are permitted provided that the following conditions are met: -\par -\par \hich\af4\dbch\af31505\loch\f4 * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. -\par \hich\af4\dbch\af31505\loch\f4 * Redistributions in binary form must rep\hich\af4\dbch\af31505\loch\f4 -roduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. -\par \hich\af4\dbch\af31505\loch\f4 * Neither the name of the copyright holder nor the names of its contributors may be used to \hich\af4\dbch\af31505\loch\f4 endorse or promote products derived from this software without specific prior written permission. - -\par -\par \hich\af4\dbch\af31505\loch\f4 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\hich\af4\dbch\af31505\loch\f4 - WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIM -\hich\af4\dbch\af31505\loch\f4 I\hich\af4\dbch\af31505\loch\f4 -TED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY -\hich\af4\dbch\af31505\loch\f4 W\hich\af4\dbch\af31505\loch\f4 AY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -\par }{\rtlch\fcs1 \af40\afs18 \ltrch\fcs0 \f40\fs18\insrsid9658238 -\par }\pard \ltrpar\ql \li0\ri0\sl288\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \ab\af4\afs22 \ltrch\fcs0 \b\fs22\cf25\kerning1\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 Nunit }{\rtlch\fcs1 \ab\af4\afs22 \ltrch\fcs0 -\b\fs22\cf25\kerning1\insrsid12339523\charrsid12339523 \hich\af4\dbch\af31505\loch\f4 v.3.13.3}{\rtlch\fcs1 \ab\af4\afs22 \ltrch\fcs0 \b\fs22\cf25\kerning1\insrsid9658238 -\par }\pard \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\field{\*\fldinst {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 -HYPERLINK "https://nam11.safelinks.protection.outlook.com/?url=http%3A%2F%2Fwww.nunit.org%2F&data=04%7C01%7CJames.Conner%40autodesk.com%7Cdaecd65781944b855e7808d946251ff6%7C67bff79e7f914433a8e5c9252d2ddc1d%7C0%7C0%7C637617947520429148%7CUnknown%7CTWFpbGZs -\hich\af4\dbch\af31505\loch\f4 b\hich\af4\dbch\af31505\loch\f4 3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=BUfNk%2Flw%2BcIf69w2%2FUf0Rq%2FiDdxtlm4UOrklWu1jBco%3D&reserved=0" }{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 -\fs22\ul\cf26\insrsid1784394 {\*\datafield -00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b2c030000680074007400700073003a002f002f006e0061006d00310031002e0073006100660065006c0069006e006b0073002e00700072006f00740065006300740069006f006e002e006f00750074006c006f006f00 -6b002e0063006f006d002f003f00750072006c003d0068007400740070002500330041002500320046002500320046007700770077002e006e0075006e00690074002e006f0072006700250032004600260064006100740061003d0030003400250037004300300031002500370043004a0061006d00650073002e0043006f -006e006e00650072002500340030006100750074006f006400650073006b002e0063006f006d0025003700430064006100650063006400360035003700380031003900340034006200380035003500650037003800300038006400390034003600320035003100660066003600250037004300360037006200660066003700 -390065003700660039003100340034003300330061003800650035006300390032003500320064003200640064006300310064002500370043003000250037004300300025003700430036003300370036003100370039003400370035003200300034003200390031003400380025003700430055006e006b006e006f0077 -006e002500370043005400570046007000620047005a0073006200330064003800650079004a00570049006a006f0069004d004300340077004c006a00410077004d004400410069004c0043004a00510049006a006f006900560032006c0075004d007a00490069004c0043004a004200540069004900360049006b003100 -680061005700770069004c0043004a00580056004300490036004d006e00300025003300440025003700430031003000300030002600730064006100740061003d004200550066004e006b002500320046006c0077002500320042006300490066003600390077003200250032004600550066003000520071002500320046 -00690044006400780074006c006d00340055004f0072006b006c005700750031006a00420063006f002500330044002600720065007300650072007600650064003d0030000000795881f43b1d7f48af2c825dc485276300000000a5ab00030000004e0020002c009a017200740000}}}{\fldrslt {\rtlch\fcs1 -\af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 http://www.nunit.org/}}}\sectd \ltrsect\linex0\sectdefaultcl\sftnbj {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\insrsid9658238 -\par }{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 \hich\f4 Copyright \'a9\loch\f4 2002-2013 Charlie Poole\line \hich\f4 Copyright \'a9\loch\f4 2002-2004 James W. Newkirk, Michael C. Two, Alexei A. Vorontsov -\line Copyright\hich\af4\dbch\af31505\loch\f4 \hich\f4 \'a9\loch\f4 2000-2002 Philip A. Craig -\par -\par \hich\af4\dbch\af31505\loch\f4 This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. -\par \hich\af4\dbch\af31505\loch\f4 Permission is granted to anyone to use this softwar\hich\af4\dbch\af31505\loch\f4 e for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: - -\par -\par \hich\af4\dbch\af31505\loch\f4 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If\hich\af4\dbch\af31505\loch\f4 \hich\f4 - you use this software in a product, an acknowledgment (see the following) in the product documentation is required. Portions Copyright \'a9\loch\f4 2002-2009 Charlie Poole or Copyright\~\hich\f4 \'a9\loch\f4 - 2002-2004 James W. Newkirk, Michael C. Two, Alexei A. Vorontsov or Copyright\~\hich\f4 \'a9\hich\af4\dbch\af31505\loch\f4 \hich\af4\dbch\af31505\loch\f4 2000-2002 Philip A. Craig\~ -\par \hich\af4\dbch\af31505\loch\f4 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.\~ -\par \hich\af4\dbch\af31505\loch\f4 3. This notice may not be removed or altered from any source distribution. -\par }\pard \ltrpar\ql \li720\ri0\widctlpar\wrapdefault\faauto\rin0\lin720\itap0 {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\insrsid9658238 -\par }\pard\plain \ltrpar\s4\ql \li0\ri0\widctlpar\wrapdefault\faauto\outlinelevel3\rin0\lin0\itap0 \rtlch\fcs1 \af4\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe2052\loch\af4\hich\af4\dbch\af31505\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \af4\afs22 -\ltrch\fcs0 \fs22\cf25\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 License Note -\par }\pard\plain \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\faauto\rin0\lin0\itap0 \rtlch\fcs1 \af4\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe2052\loch\af4\hich\af4\dbch\af31505\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 -\fs22\cf25\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 This license is b\hich\af4\dbch\af31505\loch\f4 ased on\~}{\field{\*\fldinst {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 -HYPERLINK "http://www.opensource.org/licenses/zlib-license.html" }{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\insrsid1784394 {\*\datafield -00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b8200000068007400740070003a002f002f007700770077002e006f00700065006e0073006f0075007200630065002e006f00720067002f006c006900630065006e007300650073002f007a006c00690062002d006c00 -6900630065006e00730065002e00680074006d006c000000795881f43b1d7f48af2c825dc485276300000000a5ab0003006400769871016e00f8007200800032}}}{\fldrslt {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf2\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 -the open source zlib/libpng license}}}\sectd \ltrsect\linex0\sectdefaultcl\sftnbj {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 (}{\field{\*\fldinst {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\insrsid9658238 -\hich\af4\dbch\af31505\loch\f4 HYPERLINK https://opensource.org/licenses/zlib-license.html }{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\insrsid1784394 {\*\datafield -00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b7c000000680074007400700073003a002f002f006f00700065006e0073006f0075007200630065002e006f00720067002f006c006900630065006e007300650073002f007a006c00690062002d006c00690063006500 -6e00730065002e00680074006d006c000000795881f43b1d7f48af2c825dc485276300000000a5ab0003ea6c00450000002c0000006d00000000}}}{\fldrslt {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 -https://opensource.org/licenses/zlib-license.html}}}\sectd \ltrsect\linex0\sectdefaultcl\sftnbj {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 ). The idea was \hich\af4\dbch\af31505\loch\f4 -to keep the license as simple as possible to encourage use of NUnit in free and commercial applications and libraries, but to keep the source code together and to give credit to the NUnit contributors for their efforts. While this license allows shipping -\hich\af4\dbch\af31505\loch\f4 N\hich\af4\dbch\af31505\loch\f4 Unit in source and binary form, if shipping a NUnit variant is the sole purpose of your product, please\~}{\field{\*\fldinst {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\insrsid9658238 -\hich\af4\dbch\af31505\loch\f4 HYPERLINK "mailto:cpoole@pooleconsulting.com" }{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\insrsid1784394 {\*\datafield -00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b5c0000006d00610069006c0074006f003a00630070006f006f006c006500400070006f006f006c00650063006f006e00730075006c00740069006e0067002e0063006f006d000000795881f43b1d7f48af2c825dc485 -276300000000a5ab0003126300650000006c0000006e1259006a}}}{\fldrslt {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf2\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 let us know}}}\sectd \ltrsect\linex0\sectdefaultcl\sftnbj {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 -\fs22\cf25\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 (}{\field{\*\fldinst {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 HYPERLINK "mailto:cpoole@pooleconsulting.com" }{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 -\fs22\cf25\insrsid1784394 {\*\datafield -00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b5c0000006d00610069006c0074006f003a00630070006f006f006c006500400070006f006f006c00650063006f006e00730075006c00740069006e0067002e0063006f006d000000795881f43b1d7f48af2c825dc485 -276300000000a5ab0003006e00040000006e00007068005900fc}}}{\fldrslt {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf2\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 cpoole@pooleconsulting.com}}}\sectd \ltrsect\linex0\sectdefaultcl\sftnbj {\rtlch\fcs1 -\af4\afs22 \ltrch\fcs0 \fs22\cf25\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 ). -\par -\par }\pard \ltrpar\ql \li0\ri0\sl288\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \ab\af4\afs22 \ltrch\fcs0 \b\fs22\cf25\lang3082\langfe2052\kerning1\langnp3082\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 Moq v.4.18.4: -\par }\pard \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\field{\*\fldinst {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\lang3082\langfe2052\langnp3082\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 HYPERLINK "https://nam11.saf -\hich\af4\dbch\af31505\loch\f4 -elinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fmoq%2Fmoq4%2Fblob%2Fmaster%2FLicense.txt&data=04%7C01%7CJames.Conner%40autodesk.com%7Cdaecd65781944b855e7808d946251ff6%7C67bff79e7f914433a8e5c9252d2ddc1d%7C0%7C0%7C637617947520409253%7CUnknown% -\hich\af4\dbch\af31505\loch\f4 7\hich\af4\dbch\af31505\loch\f4 CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=H%2FwNgy%2FpMYIgd%2FFlP1IU1dbvTUCauizIJKCAU6ISQZI%3D&reserved=0" }{\rtlch\fcs1 \af4\afs22 -\ltrch\fcs0 \fs22\ul\cf26\lang3082\langfe2052\langnp3082\insrsid1784394 {\*\datafield -00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b74030000680074007400700073003a002f002f006e0061006d00310031002e0073006100660065006c0069006e006b0073002e00700072006f00740065006300740069006f006e002e006f00750074006c006f006f00 -6b002e0063006f006d002f003f00750072006c003d00680074007400700073002500330041002500320046002500320046006700690074006800750062002e0063006f006d002500320046006d006f0071002500320046006d006f007100340025003200460062006c006f0062002500320046006d00610073007400650072 -002500320046004c006900630065006e00730065002e00740078007400260064006100740061003d0030003400250037004300300031002500370043004a0061006d00650073002e0043006f006e006e00650072002500340030006100750074006f006400650073006b002e0063006f006d00250037004300640061006500 -63006400360035003700380031003900340034006200380035003500650037003800300038006400390034003600320035003100660066003600250037004300360037006200660066003700390065003700660039003100340034003300330061003800650035006300390032003500320064003200640064006300310064 -002500370043003000250037004300300025003700430036003300370036003100370039003400370035003200300034003000390032003500330025003700430055006e006b006e006f0077006e002500370043005400570046007000620047005a0073006200330064003800650079004a00570049006a006f0069004d00 -4300340077004c006a00410077004d004400410069004c0043004a00510049006a006f006900560032006c0075004d007a00490069004c0043004a004200540069004900360049006b003100680061005700770069004c0043004a00580056004300490036004d006e00300025003300440025003700430031003000300030 -002600730064006100740061003d00480025003200460077004e006700790025003200460070004d00590049006700640025003200460046006c00500031004900550031006400620076005400550043006100750069007a0049004a004b0043004100550036004900530051005a0049002500330044002600720065007300 -650072007600650064003d0030000000795881f43b1d7f48af2c825dc485276300000000a5ab000300540000009700008b73485012000000}}}{\fldrslt {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\lang3082\langfe2052\langnp3082\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 -https://github.com/moq/moq4/blob/master/License.txt/}}}\sectd \ltrsect\linex0\sectdefaultcl\sftnbj {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\lang3082\langfe2052\langnp3082\insrsid9658238 -\par }{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 BSD 3-Clause License -\par \hich\af4\dbch\af31505\loch\f4 Copyright \hich\af4\dbch\af31505\loch\f4 (c) 2007, Clarius Consulting, Manas Technology Solutions, InSTEDD, and Contributors. All rights reserved. -\par -\par \hich\af4\dbch\af31505\loch\f4 Redistribution and use in source and binary forms, with or without -\par \hich\af4\dbch\af31505\loch\f4 modification, are permitted provided that the following conditions are met: -\par -\par \hich\af4\dbch\af31505\loch\f4 * Red\hich\af4\dbch\af31505\loch\f4 istributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. -\par \hich\af4\dbch\af31505\loch\f4 * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in th\hich\af4\dbch\af31505\loch\f4 -e documentation and/or other materials provided with the distribution. -\par \hich\af4\dbch\af31505\loch\f4 * Neither the names of the copyright holders nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permi\hich\af4\dbch\af31505\loch\f4 ssion. - -\par -\par \hich\af4\dbch\af31505\loch\f4 -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO E -\hich\af4\dbch\af31505\loch\f4 -VENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSI -\hich\af4\dbch\af31505\loch\f4 N\hich\af4\dbch\af31505\loch\f4 -ESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -\par }{\rtlch\fcs1 \af40\afs18 \ltrch\fcs0 \f40\fs18\insrsid9658238 -\par }\pard \ltrpar\ql \li0\ri0\sl288\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \ab\af4\afs22 \ltrch\fcs0 \b\fs22\cf25\lang3082\langfe2052\kerning1\langnp3082\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 Libiconv v.1.14.0.1: -\par }\pard \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\field{\*\fldinst {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\lang3082\langfe2052\langnp3082\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 -HYPERLINK "https://nam11.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.gnu.org%2Fsoftware%2Flibiconv%2F&data=04%7C01%7CJames.Conner%40autodesk.com%7Cdaecd65781944b855e7808d946251ff6%7C67bff79e7f914433a8e5c9252d2ddc1d%7C0%7C0% -\hich\af4\dbch\af31505\loch\f4 7C637617947520369420%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=fyvQ8axd0727ARcscr232iqeW1sGK6FTq%2FP7s1ZtC6s%3D&reserved=0" }{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 -\fs22\ul\cf26\lang3082\langfe2052\langnp3082\insrsid1784394 {\*\datafield -00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b4a030000680074007400700073003a002f002f006e0061006d00310031002e0073006100660065006c0069006e006b0073002e00700072006f00740065006300740069006f006e002e006f00750074006c006f006f00 -6b002e0063006f006d002f003f00750072006c003d00680074007400700073002500330041002500320046002500320046007700770077002e0067006e0075002e006f007200670025003200460073006f006600740077006100720065002500320046006c0069006200690063006f006e0076002500320046002600640061 -00740061003d0030003400250037004300300031002500370043004a0061006d00650073002e0043006f006e006e00650072002500340030006100750074006f006400650073006b002e0063006f006d0025003700430064006100650063006400360035003700380031003900340034006200380035003500650037003800 -30003800640039003400360032003500310066006600360025003700430036003700620066006600370039006500370066003900310034003400330033006100380065003500630039003200350032006400320064006400630031006400250037004300300025003700430030002500370043003600330037003600310037 -0039003400370035003200300033003600390034003200300025003700430055006e006b006e006f0077006e002500370043005400570046007000620047005a0073006200330064003800650079004a00570049006a006f0069004d004300340077004c006a00410077004d004400410069004c0043004a00510049006a00 -6f006900560032006c0075004d007a00490069004c0043004a004200540069004900360049006b003100680061005700770069004c0043004a00580056004300490036004d006e00300025003300440025003700430031003000300030002600730064006100740061003d0066007900760051003800610078006400300037 -003200370041005200630073006300720032003300320069007100650057003100730047004b00360046005400710025003200460050003700730031005a0074004300360073002500330044002600720065007300650072007600650064003d0030000000795881f43b1d7f48af2c825dc485276300000000a5ab0003cd73 -470000711700000059610000005c}}}{\fldrslt {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\lang3082\langfe2052\langnp3082\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 https://www.gnu.org/software/libiconv/}}}\sectd \ltrsect\linex0\sectdefaultcl\sftnbj { -\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\lang3082\langfe2052\langnp3082\insrsid9658238 -\par }{\field{\*\fldinst {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\lang3082\langfe2052\langnp3082\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 HYPERLINK "https://nam11.safelinks.protection.outlook\hich\af4\dbch\af31505\loch\f4 -.com/?url=https%3A%2F%2Fwww.gnu.org%2Fsoftware%2Fgettext%2Fmanual%2Fhtml_node%2FGNU-LGPL.html%23GNU-LGPL&data=04%7C01%7CJames.Conner%40autodesk.com%7Cdaecd65781944b855e7808d946251ff6%7C67bff79e7f914433a8e5c9252d2ddc1d%7C0%7C0%7C637617947520369420%7CUnknow -\hich\af4\dbch\af31505\loch\f4 n\hich\af4\dbch\af31505\loch\f4 %7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=NZT9tNyZbyPw1WOLz%2BE6ShwxQDWHBJ9uLSyHhKPHWHk%3D&reserved=0" }{\rtlch\fcs1 \af4\afs22 -\ltrch\fcs0 \fs22\ul\cf26\lang3082\langfe2052\langnp3082\insrsid1784394 {\*\datafield -00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90ba2030000680074007400700073003a002f002f006e0061006d00310031002e0073006100660065006c0069006e006b0073002e00700072006f00740065006300740069006f006e002e006f00750074006c006f006f00 -6b002e0063006f006d002f003f00750072006c003d00680074007400700073002500330041002500320046002500320046007700770077002e0067006e0075002e006f007200670025003200460073006f0066007400770061007200650025003200460067006500740074006500780074002500320046006d0061006e0075 -0061006c00250032004600680074006d006c005f006e006f006400650025003200460047004e0055002d004c00470050004c002e00680074006d006c0025003200330047004e0055002d004c00470050004c00260064006100740061003d0030003400250037004300300031002500370043004a0061006d00650073002e00 -43006f006e006e00650072002500340030006100750074006f006400650073006b002e0063006f006d0025003700430064006100650063006400360035003700380031003900340034006200380035003500650037003800300038006400390034003600320035003100660066003600250037004300360037006200660066 -003700390065003700660039003100340034003300330061003800650035006300390032003500320064003200640064006300310064002500370043003000250037004300300025003700430036003300370036003100370039003400370035003200300033003600390034003200300025003700430055006e006b006e00 -6f0077006e002500370043005400570046007000620047005a0073006200330064003800650079004a00570049006a006f0069004d004300340077004c006a00410077004d004400410069004c0043004a00510049006a006f006900560032006c0075004d007a00490069004c0043004a004200540069004900360049006b -003100680061005700770069004c0043004a00580056004300490036004d006e00300025003300440025003700430031003000300030002600730064006100740061003d004e005a005400390074004e0079005a006200790050007700310057004f004c007a00250032004200450036005300680077007800510044005700 -480042004a00390075004c0053007900480068004b0050004800570048006b002500330044002600720065007300650072007600650064003d0030000000795881f43b1d7f48af2c825dc485276300000000a5ab00031265000000fa00000000006fff000001}}}{\fldrslt {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 -\fs22\ul\cf26\lang3082\langfe2052\langnp3082\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 https://www.gnu.org/software/gettext/manual/html_node/GNU-LGPL.html#GNU-LGPL}}}\sectd \ltrsect\linex0\sectdefaultcl\sftnbj {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 -\fs22\ul\cf26\lang3082\langfe2052\langnp3082\insrsid9658238 -\par }{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\insrsid9658238 \loch\af4\dbch\af31505\hich\f4 \'a9\hich\af4\dbch\af31505\loch\f4 1998, 2013 Free Software Foundation, Inc. -\par -\par \hich\af4\dbch\af31505\loch\f4 This Autodesk software contains libiconv v. 1.14.0.1. libiconv is licensed under the GNU Lesser General Public License v.2.1, which can be found at }{\field{\*\fldinst {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 -\fs22\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 HYPERLINK http://www.gnu.org/licenses/oldlicenses/lgpl-2.1.tx\hich\af4\dbch\af31505\loch\f4 t }{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\insrsid1784394 {\*\datafield -00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b8200000068007400740070003a002f002f007700770077002e0067006e0075002e006f00720067002f006c006900630065006e007300650073002f006f006c0064006c006900630065006e007300650073002f006c00 -670070006c002d0032002e0031002e007400780074000000795881f43b1d7f48af2c825dc485276300000000a5ab0003005c00000000003300615c6500c84300}}}{\fldrslt {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 -http://www.gnu.org/licenses/oldlicenses/lgpl-2.1.txt}}}\sectd \ltrsect\linex0\sectdefaultcl\sftnbj {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 -. A text copy of this license is included on the media or with the d\hich\af4\dbch\af31505\loch\f4 ownload of this Autodesk software. You may obtain a copy of the source code for libiconv from }{\field{\*\fldinst {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 -\fs22\ul\cf26\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 HYPERLINK "http://www.autodesk.com/lgplsource" }{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\insrsid1784394 {\*\datafield -00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b5e00000068007400740070003a002f002f007700770077002e006100750074006f006400650073006b002e0063006f006d002f006c00670070006c0073006f0075007200630065000000795881f43b1d7f48af2c825d -c485276300000000a5ab000300492f0000020035006e0074006000fc}}}{\fldrslt {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 www.autodesk.com/lgplsource}}}\sectd \ltrsect\linex0\sectdefaultcl\sftnbj {\rtlch\fcs1 -\af4\afs22 \ltrch\fcs0 \fs22\cf25\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 or by sending a written request to: -\par -\par \hich\af4\dbch\af31505\loch\f4 Autodesk, Inc. -\par \hich\af4\dbch\af31505\loch\f4 Attention: General Counsel -\par \hich\af4\dbch\af31505\loch\f4 Legal Department -\par \hich\af4\dbch\af31505\loch\f4 111 McInnis Parkway -\par \hich\af4\dbch\af31505\loch\f4 San Rafael, CA 94903 -\par \hich\af4\dbch\af31505\loch\f4 Your written request must: -\par -\par \hich\af4\dbch\af31505\loch\f4 Contain a self-addressed CD/DVD mailer (or envelope suffic\hich\af4\dbch\af31505\loch\f4 -iently large to hold a DVD) with postage sufficient to cover the amount of the current U.S. Post Office First Class postage rate for CD/DVD mailers (or the envelope you have chosen) weighing 5 ounces from San Rafael, California USA to your indicated a -\hich\af4\dbch\af31505\loch\f4 d\hich\af4\dbch\af31505\loch\f4 dress; and Identify: -\par -\par \hich\af4\dbch\af31505\loch\f4 This Autodesk software name and release number; That you are requesting the source code for libiconvv .1.14.0.1; and The above URL (}{\field{\*\fldinst {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\insrsid9658238 -\hich\af4\dbch\af31505\loch\f4 HYPERLINK "http://www.autodesk.com/lgplsource" }{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\insrsid1784394 {\*\datafield -00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b5e00000068007400740070003a002f002f007700770077002e006100750074006f006400650073006b002e0063006f006d002f006c00670070006c0073006f0075007200630065000000795881f43b1d7f48af2c825d -c485276300000000a5ab00030069000000f00036ff63003a00000000}}}{\fldrslt {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 www.autodesk.com/lgplsource}}}\sectd \ltrsect\linex0\sectdefaultcl\sftnbj {\rtlch\fcs1 -\af4\afs22 \ltrch\fcs0 \fs22\cf25\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 ) so that Autodesk may properly respond to your request. The offer to receive this libiconv source code via the above URL (}{\field{\*\fldinst {\rtlch\fcs1 \af4\afs22 -\ltrch\fcs0 \fs22\ul\cf26\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 HYPERLINK "http://www.autodesk.com/lgplsour\hich\af4\dbch\af31505\loch\f4 ce" }{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\insrsid1784394 {\*\datafield -00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b5e00000068007400740070003a002f002f007700770077002e006100750074006f006400650073006b002e0063006f006d002f006c00670070006c0073006f0075007200630065000000795881f43b1d7f48af2c825d -c485276300000000a5ab0003006f0000000000640065000015460000}}}{\fldrslt {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 www.autodesk.com/lgplsource}}}\sectd \ltrsect\linex0\sectdefaultcl\sftnbj {\rtlch\fcs1 -\af4\afs22 \ltrch\fcs0 \fs22\cf25\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 ) or by written request to Autodesk is valid for a period of three (3) years from the date you purchased you\hich\af4\dbch\af31505\loch\f4 -r license to this Autodesk software. You may modify, debug and relink libiconv to this Autodesk software as provided under the terms of the GNU Lesser General Public License v.2.1. -\par }{\rtlch\fcs1 \af40\afs18 \ltrch\fcs0 \f40\fs18\insrsid9658238 -\par }\pard \ltrpar\ql \li0\ri0\sl288\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \ab\af4\afs22 \ltrch\fcs0 \b\fs22\cf25\kerning1\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 GNU gettext (libintl) v.0.19.8.3: -\par }\pard \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\field{\*\fldinst {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 HYPERLINK "https://nam11.safelinks.prot -\hich\af4\dbch\af31505\loch\f4 -ection.outlook.com/?url=https%3A%2F%2Fwww.gnu.org%2Fsoftware%2Fgettext%2F&data=04%7C01%7CJames.Conner%40autodesk.com%7Cdaecd65781944b855e7808d946251ff6%7C67bff79e7f914433a8e5c9252d2ddc1d%7C0%7C0%7C637617947520200164%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjA -\hich\af4\dbch\af31505\loch\f4 w\hich\af4\dbch\af31505\loch\f4 MDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=Nf21XpKiL0wk%2Fv5o95n6NHU9yBTsVWmKLfq1AJGQ1bM%3D&reserved=0" }{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\insrsid1784394 -{\*\datafield -00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b48030000680074007400700073003a002f002f006e0061006d00310031002e0073006100660065006c0069006e006b0073002e00700072006f00740065006300740069006f006e002e006f00750074006c006f006f00 -6b002e0063006f006d002f003f00750072006c003d00680074007400700073002500330041002500320046002500320046007700770077002e0067006e0075002e006f007200670025003200460073006f00660074007700610072006500250032004600670065007400740065007800740025003200460026006400610074 -0061003d0030003400250037004300300031002500370043004a0061006d00650073002e0043006f006e006e00650072002500340030006100750074006f006400650073006b002e0063006f006d00250037004300640061006500630064003600350037003800310039003400340062003800350035006500370038003000 -38006400390034003600320035003100660066003600250037004300360037006200660066003700390065003700660039003100340034003300330061003800650035006300390032003500320064003200640064006300310064002500370043003000250037004300300025003700430036003300370036003100370039 -003400370035003200300032003000300031003600340025003700430055006e006b006e006f0077006e002500370043005400570046007000620047005a0073006200330064003800650079004a00570049006a006f0069004d004300340077004c006a00410077004d004400410069004c0043004a00510049006a006f00 -6900560032006c0075004d007a00490069004c0043004a004200540069004900360049006b003100680061005700770069004c0043004a00580056004300490036004d006e00300025003300440025003700430031003000300030002600730064006100740061003d004e00660032003100580070004b0069004c00300077 -006b00250032004600760035006f00390035006e0036004e004800550039007900420054007300560057006d004b004c0066007100310041004a0047005100310062004d002500330044002600720065007300650072007600650064003d0030000000795881f43b1d7f48af2c825dc485276300000000a5ab000301330b90 -00d02c582c4e00424c310050}}}{\fldrslt {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 https://www.gnu.org/software/gettext/}}}\sectd \ltrsect\linex0\sectdefaultcl\sftnbj {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 -\fs22\ul\cf26\insrsid9658238 -\par }{\field{\*\fldinst {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 HYPERLINK "https://nam11.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.gnu.org%2Fsoftware%2Fgettext%2Fman -\hich\af4\dbch\af31505\loch\f4 -ual%2Fhtml_node%2FGNU-LGPL.html%23GNU-LGPL&data=04%7C01%7CJames.Conner%40autodesk.com%7Cdaecd65781944b855e7808d946251ff6%7C67bff79e7f914433a8e5c9252d2ddc1d%7C0%7C0%7C637617947520210113%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik -\hich\af4\dbch\af31505\loch\f4 1\hich\af4\dbch\af31505\loch\f4 haWwiLCJXVCI6Mn0%3D%7C1000&sdata=fm4crd4P%2By6SL%2F0glLKwxCwV9NjLZs7f2LAoNHfi2QE%3D&reserved=0" }{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\insrsid1784394 {\*\datafield -00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90ba6030000680074007400700073003a002f002f006e0061006d00310031002e0073006100660065006c0069006e006b0073002e00700072006f00740065006300740069006f006e002e006f00750074006c006f006f00 -6b002e0063006f006d002f003f00750072006c003d00680074007400700073002500330041002500320046002500320046007700770077002e0067006e0075002e006f007200670025003200460073006f0066007400770061007200650025003200460067006500740074006500780074002500320046006d0061006e0075 -0061006c00250032004600680074006d006c005f006e006f006400650025003200460047004e0055002d004c00470050004c002e00680074006d006c0025003200330047004e0055002d004c00470050004c00260064006100740061003d0030003400250037004300300031002500370043004a0061006d00650073002e00 -43006f006e006e00650072002500340030006100750074006f006400650073006b002e0063006f006d0025003700430064006100650063006400360035003700380031003900340034006200380035003500650037003800300038006400390034003600320035003100660066003600250037004300360037006200660066 -003700390065003700660039003100340034003300330061003800650035006300390032003500320064003200640064006300310064002500370043003000250037004300300025003700430036003300370036003100370039003400370035003200300032003100300031003100330025003700430055006e006b006e00 -6f0077006e002500370043005400570046007000620047005a0073006200330064003800650079004a00570049006a006f0069004d004300340077004c006a00410077004d004400410069004c0043004a00510049006a006f006900560032006c0075004d007a00490069004c0043004a004200540069004900360049006b -003100680061005700770069004c0043004a00580056004300490036004d006e00300025003300440025003700430031003000300030002600730064006100740061003d0066006d003400630072006400340050002500320042007900360053004c00250032004600300067006c004c004b00770078004300770056003900 -4e006a004c005a0073003700660032004c0041006f004e004800660069003200510045002500330044002600720065007300650072007600650064003d0030000000795881f43b1d7f48af2c825dc485276300000000a5ab00030242000000fa000000fb0043005c43eb}}}{\fldrslt {\rtlch\fcs1 \af4\afs22 -\ltrch\fcs0 \fs22\ul\cf26\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 https://www.gnu.org/software/gettext/manual/html_node/GNU-LGPL.html#GNU-LGPL}}}\sectd \ltrsect\linex0\sectdefaultcl\sftnbj {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 -\fs22\ul\cf26\insrsid9658238 -\par }{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\insrsid9658238 \loch\af4\dbch\af31505\hich\f4 \'a9\loch\f4 \hich\f4 Copyright \'a9\loch\f4 1991, 1999 Free Software Foundation, Inc. -\par -\par \hich\af4\dbch\af31505\loch\f4 Th\hich\af4\dbch\af31505\loch\f4 is Autodesk software contains libintl v.0.19.8.3. libintl is licensed under the GNU Lesser General Public License v.2.1 , which can be found at }{\field{\*\fldinst {\rtlch\fcs1 \af4\afs22 -\ltrch\fcs0 \fs22\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 HYPERLINK http://www.gnu.org/licenses/oldlicenses/lgpl-2.1.txt }{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\insrsid1784394 {\*\datafield -00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b8200000068007400740070003a002f002f007700770077002e0067006e0075002e006f00720067002f006c006900630065006e007300650073002f006f006c0064006c006900630065006e007300650073002f006c00 -670070006c002d0032002e0031002e007400780074000000795881f43b1d7f48af2c825dc485276300000000a5ab000300640000000072ff00ff004300000000}}}{\fldrslt {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 -http://www.gnu.org/licenses/oldlicenses/lgpl-2.1.txt}}}\sectd \ltrsect\linex0\sectdefaultcl\sftnbj {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 . }{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 -\fs22\cf25\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 A \hich\af4\dbch\af31505\loch\f4 -text copy of this license is included on the media or with the download of this Autodesk software. You may obtain a copy of the source code for libintl v.0.19.8.3 from }{\field{\*\fldinst {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\insrsid9658238 -\hich\af4\dbch\af31505\loch\f4 HYPERLINK "http://www.autodesk.com/lgplsource" }{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\insrsid1784394 {\*\datafield -00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b5e00000068007400740070003a002f002f007700770077002e006100750074006f006400650073006b002e0063006f006d002f006c00670070006c0073006f0075007200630065000000795881f43b1d7f48af2c825d -c485276300000000a5ab0003006d0000002000070000017700200065}}}{\fldrslt {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 www.autodesk.com/lgplsource}}}\sectd \ltrsect\linex0\sectdefaultcl\sftnbj {\rtlch\fcs1 -\af4\afs22 \ltrch\fcs0 \fs22\cf25\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 or by sending a written request to: -\par -\par \hich\af4\dbch\af31505\loch\f4 Autodesk, Inc. -\par \hich\af4\dbch\af31505\loch\f4 Attention: General Counsel -\par \hich\af4\dbch\af31505\loch\f4 Legal Department -\par \hich\af4\dbch\af31505\loch\f4 111 McInnis Parkway -\par \hich\af4\dbch\af31505\loch\f4 San Rafael, CA 94903 -\par -\par \hich\af4\dbch\af31505\loch\f4 Your written request must: -\par \hich\af4\dbch\af31505\loch\f4 1. Contain a self-addressed CD/DVD mailer (or envelope sufficiently large to hold a DVD) with postage sufficient to cover the amount of the current U.S. Post Office First Class postage rate for CD/DVD mailer -\hich\af4\dbch\af31505\loch\f4 s (or the envelope you have chosen) weighing 5 ounces from San Rafael, California USA to your indicated address; and -\par \hich\af4\dbch\af31505\loch\f4 2. Identify: -\par \hich\af4\dbch\af31505\loch\f4 a. This Autodesk software name and release number; -\par \hich\af4\dbch\af31505\loch\f4 b. That you are requesting the source code for libintl v.0.19.8.3; and -\par \hich\af4\dbch\af31505\loch\f4 c.\hich\af4\dbch\af31505\loch\f4 The above URL (}{\field{\*\fldinst {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 HYPERLINK www.autodesk.com/lgplsource }{\rtlch\fcs1 \af4\afs22 -\ltrch\fcs0 \fs22\insrsid1784394 {\*\datafield -00d0c9ea79f9bace118c8200aa004ba90b0200000001000000e0c9ea79f9bace118c8200aa004ba90b500000007700770077002e006100750074006f006400650073006b002e0063006f006d002f006c00670070006c0073006f0075007200630065000000795881f43b1d7f48af2c825dc485276300000000a5ab0003006c -00d4000000ff0000004100490063}}}{\fldrslt {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 www.autodesk.com/lgplsource}}}\sectd \ltrsect\linex0\sectdefaultcl\sftnbj {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 -\fs22\cf25\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 ) -\par \hich\af4\dbch\af31505\loch\f4 so that Autodesk may properly respond to your request. The offe\hich\af4\dbch\af31505\loch\f4 r to receive this libintl source code via the above URL (}{\field{\*\fldinst {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 -\fs22\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 HYPERLINK www.autodesk.com/lgplsource }{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\insrsid1784394 {\*\datafield -00d0c9ea79f9bace118c8200aa004ba90b0200000001000000e0c9ea79f9bace118c8200aa004ba90b500000007700770077002e006100750074006f006400650073006b002e0063006f006d002f006c00670070006c0073006f0075007200630065000000795881f43b1d7f48af2c825dc485276300000000a5ab00030073 -000000000000000000200065bac0}}}{\fldrslt {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 www.autodesk.com/lgplsource}}}\sectd \ltrsect\linex0\sectdefaultcl\sftnbj {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 -\fs22\cf25\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 ) or by written request \hich\af4\dbch\af31505\loch\f4 to Autodesk is valid for a period of three (3) years from the date you purchased your license to this Autodesk software. -\par \hich\af4\dbch\af31505\loch\f4 You may modify, debug and relink libintl to this Autodesk software as provided under the terms of the GNU Lesser General Public Licens\hich\af4\dbch\af31505\loch\f4 e v.2.1. -\par }{\rtlch\fcs1 \af40\afs18 \ltrch\fcs0 \f40\fs18\insrsid9658238 -\par -\par }\pard \ltrpar\ql \li0\ri0\sl288\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \ab\af4\afs22 \ltrch\fcs0 \b\fs22\cf25\lang3082\langfe2052\kerning1\langnp3082\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 Ncalc v.1.3.8.0:}{ -\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\lang3082\langfe2052\langnp3082\insrsid9658238 -\par }\pard \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\field{\*\fldinst {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\lang3082\langfe2052\langnp3082\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 -HYPERLINK "https://nam11.safelinks.protection.outlook.com/?url=http%3A%2F%2Fncalc.codeplex.com%2F&data=04%7C01%7CJames.Conner%40autodesk.com%7Cdaecd65781944b855e7808d946251ff6%7C67bff79e7f914433a8e5c9252d2ddc1d%7C0%7C0%7C637617947520409253 -\hich\af4\dbch\af31505\loch\f4 %7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=MXJNaR69ECgPJDJYPSnyLqGx9AGSwz%2FQZR55FnDPv5U%3D&reserved=0" }{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 -\fs22\ul\cf26\lang3082\langfe2052\langnp3082\insrsid1784394 {\*\datafield -00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b2a030000680074007400700073003a002f002f006e0061006d00310031002e0073006100660065006c0069006e006b0073002e00700072006f00740065006300740069006f006e002e006f00750074006c006f006f00 -6b002e0063006f006d002f003f00750072006c003d0068007400740070002500330041002500320046002500320046006e00630061006c0063002e0063006f006400650070006c00650078002e0063006f006d00250032004600260064006100740061003d0030003400250037004300300031002500370043004a0061006d -00650073002e0043006f006e006e00650072002500340030006100750074006f006400650073006b002e0063006f006d00250037004300640061006500630064003600350037003800310039003400340062003800350035006500370038003000380064003900340036003200350031006600660036002500370043003600 -37006200660066003700390065003700660039003100340034003300330061003800650035006300390032003500320064003200640064006300310064002500370043003000250037004300300025003700430036003300370036003100370039003400370035003200300034003000390032003500330025003700430055 -006e006b006e006f0077006e002500370043005400570046007000620047005a0073006200330064003800650079004a00570049006a006f0069004d004300340077004c006a00410077004d004400410069004c0043004a00510049006a006f006900560032006c0075004d007a00490069004c0043004a00420054006900 -4900360049006b003100680061005700770069004c0043004a00580056004300490036004d006e00300025003300440025003700430031003000300030002600730064006100740061003d004d0058004a004e00610052003600390045004300670050004a0044004a005900500053006e0079004c00710047007800390041 -004700530077007a0025003200460051005a0052003500350046006e00440050007600350055002500330044002600720065007300650072007600650064003d0030000000795881f43b1d7f48af2c825dc485276300000000a5ab0003005c141a000017f4021a0c009f18cf93}}}{\fldrslt {\rtlch\fcs1 \af4\afs22 -\ltrch\fcs0 \fs22\ul\cf26\lang3082\langfe2052\langnp3082\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 http://ncalc.codeplex.com/}}}\sectd \ltrsect\linex0\sectdefaultcl\sftnbj {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 -\fs22\ul\cf26\lang3082\langfe2052\langnp3082\insrsid9658238 -\par }{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\insrsid9658238 \loch\af4\dbch\af31505\hich\f4 \'a9\loch\f4 2011 Sebastien Ros -\par -\par \hich\af4\dbch\af31505\loch\f4 Permission is hereby granted, free of charge, to any person obtaining a copy of\hich\af4\dbch\af31505\loch\f4 - this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and -\hich\af4\dbch\af31505\loch\f4 t\hich\af4\dbch\af31505\loch\f4 o permit persons to whom the Software is furnished to do so, subject to the following conditions: -\par -\par \hich\af4\dbch\af31505\loch\f4 The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. -\par -\par \hich\af4\dbch\af31505\loch\f4 THE SOFTWARE IS PROVIDED "AS \hich\af4\dbch\af31505\loch\f4 -IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGE -\hich\af4\dbch\af31505\loch\f4 S\hich\af4\dbch\af31505\loch\f4 OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -\par }{\rtlch\fcs1 \af40\afs18 \ltrch\fcs0 \f40\fs18\insrsid9658238 -\par }\pard \ltrpar\ql \li0\ri0\sl288\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \ab\af4\afs22 \ltrch\fcs0 \b\fs22\cf25\kerning1\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 MIConvexHull.NET v.1.0.17.411 -\par }\pard \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\field{\*\fldinst {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 -HYPERLINK "https://nam11.safelinks.protection.outlook.com/?url=https%3A%2F%2Fdesignengrlab.github.io%2FMIConvexHull%2F&data=04%7C01%7CJames.Conner%40autodesk.com%7Cdaecd65781944b855e7808d946251ff6%7C67bff79e7f914433a8e5c9252d2ddc1d%7C0%7C0%7C6376179475203 -\hich\af4\dbch\af31505\loch\f4 8\hich\af4\dbch\af31505\loch\f4 9325%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=NY1pGp4Rus1IhXoLEAgeQgcF3gsQK5hhpdBY1KGxtSY%3D&reserved=0" }{\rtlch\fcs1 -\af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\insrsid1784394 {\*\datafield -00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b50030000680074007400700073003a002f002f006e0061006d00310031002e0073006100660065006c0069006e006b0073002e00700072006f00740065006300740069006f006e002e006f00750074006c006f006f00 -6b002e0063006f006d002f003f00750072006c003d0068007400740070007300250033004100250032004600250032004600640065007300690067006e0065006e00670072006c00610062002e006700690074006800750062002e0069006f002500320046004d00490043006f006e00760065007800480075006c006c0025 -0032004600260064006100740061003d0030003400250037004300300031002500370043004a0061006d00650073002e0043006f006e006e00650072002500340030006100750074006f006400650073006b002e0063006f006d00250037004300640061006500630064003600350037003800310039003400340062003800 -35003500650037003800300038006400390034003600320035003100660066003600250037004300360037006200660066003700390065003700660039003100340034003300330061003800650035006300390032003500320064003200640064006300310064002500370043003000250037004300300025003700430036 -003300370036003100370039003400370035003200300033003800390033003200350025003700430055006e006b006e006f0077006e002500370043005400570046007000620047005a0073006200330064003800650079004a00570049006a006f0069004d004300340077004c006a00410077004d004400410069004c00 -43004a00510049006a006f006900560032006c0075004d007a00490069004c0043004a004200540069004900360049006b003100680061005700770069004c0043004a00580056004300490036004d006e00300025003300440025003700430031003000300030002600730064006100740061003d004e0059003100700047 -007000340052007500730031004900680058006f004c004500410067006500510067006300460033006700730051004b00350068006800700064004200590031004b00470078007400530059002500330044002600720065007300650072007600650064003d0030000000795881f43b1d7f48af2c825dc485276300000000 -a5ab0003007314650000003a00000090006c006f}}}{\fldrslt {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 http://miconvexhull.codeplex.com/}}}\sectd \ltrsect\linex0\sectdefaultcl\sftnbj {\rtlch\fcs1 \af4\afs22 -\ltrch\fcs0 \fs22\ul\cf26\insrsid9658238 -\par }{\field{\*\fldinst {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 HYPERLINK "https://nam11.safelinks.protection.outlook.com/?url=http%3A%2F\hich\af4\dbch\af31505\loch\f4 -%2Fmiconvexhull.codeplex.com%2Flicense&data=04%7C01%7CJames.Conner%40autodesk.com%7Cdaecd65781944b855e7808d946251ff6%7C67bff79e7f914433a8e5c9252d2ddc1d%7C0%7C0%7C637617947520389325%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haW -\hich\af4\dbch\af31505\loch\f4 w\hich\af4\dbch\af31505\loch\f4 iLCJXVCI6Mn0%3D%7C1000&sdata=hNSoZ7QXpdD4Fhf0DlaIzm2xF9XGsksCYNlWnpXQ%2BiM%3D&reserved=0" }{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\insrsid1784394 {\*\datafield -00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b46030000680074007400700073003a002f002f006e0061006d00310031002e0073006100660065006c0069006e006b0073002e00700072006f00740065006300740069006f006e002e006f00750074006c006f006f00 -6b002e0063006f006d002f003f00750072006c003d0068007400740070002500330041002500320046002500320046006d00690063006f006e00760065007800680075006c006c002e0063006f006400650070006c00650078002e0063006f006d002500320046006c006900630065006e0073006500260064006100740061 -003d0030003400250037004300300031002500370043004a0061006d00650073002e0043006f006e006e00650072002500340030006100750074006f006400650073006b002e0063006f006d002500370043006400610065006300640036003500370038003100390034003400620038003500350065003700380030003800 -64003900340036003200350031006600660036002500370043003600370062006600660037003900650037006600390031003400340033003300610038006500350063003900320035003200640032006400640063003100640025003700430030002500370043003000250037004300360033003700360031003700390034 -00370035003200300033003800390033003200350025003700430055006e006b006e006f0077006e002500370043005400570046007000620047005a0073006200330064003800650079004a00570049006a006f0069004d004300340077004c006a00410077004d004400410069004c0043004a00510049006a006f006900 -560032006c0075004d007a00490069004c0043004a004200540069004900360049006b003100680061005700770069004c0043004a00580056004300490036004d006e00300025003300440025003700430031003000300030002600730064006100740061003d0068004e0053006f005a0037005100580070006400440034 -00460068006600300044006c00610049007a006d0032007800460039005800470073006b007300430059004e006c0057006e0070005800510025003200420069004d002500330044002600720065007300650072007600650064003d0030000000795881f43b1d7f48af2c825dc485276300000000a5ab0003007200000003 -00ea0000005200200000}}}{\fldrslt {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 http://miconvexhull.codeplex.com/license}}}\sectd \ltrsect\linex0\sectdefaultcl\sftnbj {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 -\fs22\ul\cf26\insrsid9658238 -\par }{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 Copyright (c) 2010 David Sehnal, Matthew Campbell -\par -\par \hich\af4\dbch\af31505\loch\f4 Permission is hereby granted, free of charge, t\hich\af4\dbch\af31505\loch\f4 -o any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or s -\hich\af4\dbch\af31505\loch\f4 e\hich\af4\dbch\af31505\loch\f4 ll copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: -\par -\par \hich\af4\dbch\af31505\loch\f4 The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. -\par -\par \hich\af4\dbch\af31505\loch\f4 -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS -\hich\af4\dbch\af31505\loch\f4 BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -\par }{\rtlch\fcs1 \af40\afs18 \ltrch\fcs0 \f40\fs18\insrsid9658238 -\par }\pard \ltrpar\ql \li0\ri0\sl288\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \ab\af4\afs22 \ltrch\fcs0 \b\fs22\cf25\kerning1\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 StarMath v.2.0.1}{\rtlch\fcs1 \ab\af4\afs22 \ltrch\fcs0 -\b\fs22\cf25\kerning1\insrsid16659309 \hich\af4\dbch\af31505\loch\f4 7}{\rtlch\fcs1 \ab\af4\afs22 \ltrch\fcs0 \b\fs22\cf25\kerning1\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 : -\par }\pard \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\field{\*\fldinst {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 HYPERLINK "https://nam11.sa\hich\af4\dbch\af31505\loch\f4 -felinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2FDesignEngrLab%2FStarMath%2Fblob%2Fmaster%2FLICENSE&data=04%7C01%7CJames.Conner%40autodesk.com%7Cdaecd65781944b855e7808d946251ff6%7C67bff79e7f914433a8e5c9252d2ddc1d%7C0%7C0%7C637617947520488895 -\hich\af4\dbch\af31505\loch\f4 %\hich\af4\dbch\af31505\loch\f4 7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=QlLJQ5zjjCkV03%2BrjgrcdUTiz9O6pTyzKdtSv5xpHsg%3D&reserved=0" }{\rtlch\fcs1 \af4\afs22 -\ltrch\fcs0 \fs22\ul\cf26\insrsid1784394 {\*\datafield -00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b80030000680074007400700073003a002f002f006e0061006d00310031002e0073006100660065006c0069006e006b0073002e00700072006f00740065006300740069006f006e002e006f00750074006c006f006f00 -6b002e0063006f006d002f003f00750072006c003d00680074007400700073002500330041002500320046002500320046006700690074006800750062002e0063006f006d00250032004600440065007300690067006e0045006e00670072004c006100620025003200460053007400610072004d00610074006800250032 -00460062006c006f0062002500320046006d00610073007400650072002500320046004c004900430045004e0053004500260064006100740061003d0030003400250037004300300031002500370043004a0061006d00650073002e0043006f006e006e00650072002500340030006100750074006f006400650073006b00 -2e0063006f006d002500370043006400610065006300640036003500370038003100390034003400620038003500350065003700380030003800640039003400360032003500310066006600360025003700430036003700620066006600370039006500370066003900310034003400330033006100380065003500630039 -0032003500320064003200640064006300310064002500370043003000250037004300300025003700430036003300370036003100370039003400370035003200300034003800380038003900350025003700430055006e006b006e006f0077006e002500370043005400570046007000620047005a007300620033006400 -3800650079004a00570049006a006f0069004d004300340077004c006a00410077004d004400410069004c0043004a00510049006a006f006900560032006c0075004d007a00490069004c0043004a004200540069004900360049006b003100680061005700770069004c0043004a00580056004300490036004d006e0030 -0025003300440025003700430031003000300030002600730064006100740061003d0051006c004c004a00510035007a006a006a0043006b0056003000330025003200420072006a0067007200630064005500540069007a0039004f0036007000540079007a004b0064007400530076003500780070004800730067002500 -330044002600720065007300650072007600650064003d0030000000795881f43b1d7f48af2c825dc485276300000000a5ab0003005000a68e0000313d00006f00650000}}}{\fldrslt {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 -https://github.com/DesignEngrLab/StarMath/blob/master/LICENSE}}}\sectd \ltrsect\linex0\sectdefaultcl\sftnbj {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\insrsid9658238 -\par }{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 The MIT License (MIT) -\par \hich\af4\dbch\af31505\loch\f4 C\hich\af4\dbch\af31505\loch\f4 opyright (c) 2015 DesignEngrLab -\par -\par \hich\af4\dbch\af31505\loch\f4 Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation th -\hich\af4\dbch\af31505\loch\f4 e rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: -\par -\par \hich\af4\dbch\af31505\loch\f4 The above copyright notice and this permissio\hich\af4\dbch\af31505\loch\f4 n notice shall be included in all copies or substantial portions of the Software. -\par -\par \hich\af4\dbch\af31505\loch\f4 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR \hich\af4\dbch\af31505\loch\f4 -PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -\hich\af4\dbch\af31505\loch\f4 \hich\af4\dbch\af31505\loch\f4 OTHER DEALINGS IN THE SOFTWARE. -\par -\par }\pard \ltrpar\ql \li0\ri0\sl288\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \ab\af4\afs22 \ltrch\fcs0 \b\fs22\cf25\kerning1\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 DiffPlex v.1.6.3: -\par }\pard \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\insrsid9658238 \loch\af4\dbch\af31505\hich\f4 \'a9\loch\f4 2020 mmanela -\par -\par \hich\af4\dbch\af31505\loch\f4 Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at -\par }{\field{\*\fldinst {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 HYPERLINK http://www\hich\af4\dbch\af31505\loch\f4 .apache.org/licenses/LICENSE-2.0 }{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\insrsid1784394 -{\*\datafield -00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b6e00000068007400740070003a002f002f007700770077002e006100700061006300680065002e006f00720067002f006c006900630065006e007300650073002f004c004900430045004e00530045002d0032002e00 -30000000795881f43b1d7f48af2c825dc485276300000000a5ab0003006e0a619800f7aa0064004d00751300}}}{\fldrslt {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 http://www.apache.org/licenses/LICENSE-2.0}}}\sectd \ltrsect -\linex0\sectdefaultcl\sftnbj {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 }{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 -Unless required by applicable law or agreed to in writi\hich\af4\dbch\af31505\loch\f4 -ng, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.}{ -\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\insrsid9658238 -\par }{\rtlch\fcs1 \af40\afs18 \ltrch\fcs0 \f40\fs18\insrsid9658238 -\par -\par }\pard \ltrpar\ql \li0\ri0\sl288\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid262518 {\rtlch\fcs1 \ab\af4\afs22 \ltrch\fcs0 \b\fs22\cf25\kerning2\insrsid262518 \hich\af4\dbch\af31505\loch\f4 FontAwesome v.5.15.4: -\par }\pard \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid262518 {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\insrsid262518 \hich\af4\dbch\af31505\loch\f4 https://github.com/FortAwesome/Font-Awesome/blob/5.x/LICENSE.txt}{ -\rtlch\fcs1 \ab\af4\afs22 \ltrch\fcs0 \b\fs22\cf25\lang1031\langfe2052\kerning2\langnp1031\insrsid262518 -\par }{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\insrsid262518 \hich\af4\dbch\af31505\loch\f4 CC BY 4.0 License}{\rtlch\fcs1 \ab\af4\afs22 \ltrch\fcs0 \b\fs22\cf25\lang1031\langfe2052\kerning2\langnp1031\insrsid262518 \hich\af4\dbch\af31505\loch\f4 (}{ -\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\insrsid262518 \hich\af4\dbch\af31505\loch\f4 https://creativecommons.org/licenses/by/4.0/}{\rtlch\fcs1 \ab\af4\afs22 \ltrch\fcs0 \b\fs22\cf25\lang1031\langfe2052\kerning2\langnp1031\insrsid262518 -\hich\af4\dbch\af31505\loch\f4 ) -\par }{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\insrsid262518 \hich\af4\dbch\af31505\loch\f4 Copyright (c) 2022 Fonticons, Inc.}{\rtlch\fcs1 \ab\af4\afs22 \ltrch\fcs0 \b\fs22\cf25\lang1031\langfe2052\kerning2\langnp1031\insrsid262518 -\hich\af4\dbch\af31505\loch\f4 (}{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\insrsid262518 \hich\af4\dbch\af31505\loch\f4 https://fontawes\hich\af4\dbch\af31505\loch\f4 ome.com}{\rtlch\fcs1 \ab\af4\afs22 \ltrch\fcs0 -\b\fs22\cf25\lang1031\langfe2052\kerning2\langnp1031\insrsid262518 \hich\af4\dbch\af31505\loch\f4 ) -\par -\par }{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\insrsid262518 \hich\af4\dbch\af31505\loch\f4 In the Font Awesome Free download, the CC BY 4.0 license applies to all icons packaged as SVG and JS file types. -\par }\pard \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \af40\afs18 \ltrch\fcs0 \f40\fs18\insrsid2959855 \line \line }{\rtlch\fcs1 \af40\afs18 \ltrch\fcs0 \f40\fs18\insrsid9658238 -\par }\pard \ltrpar\ql \li0\ri0\sl288\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \ab\af4\afs22 \ltrch\fcs0 \b\fs22\cf25\kerning1\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 AngleSharp v.0.14.0: Copyright (c) 2013 - 2019 AngleSharp - -\par \hich\af4\dbch\af31505\loch\f4 \hich\f4 AngleSharp.CSS v.0.14.2: Copyright \'a9\loch\f4 2013-2020 AngleSharp -\par }\pard \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 The MIT Licens\hich\af4\dbch\af31505\loch\f4 e (MIT) -\par -\par \hich\af4\dbch\af31505\loch\f4 -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, m -\hich\af4\dbch\af31505\loch\f4 odify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: -\par -\par \hich\af4\dbch\af31505\loch\f4 The above copyright notice and this permission notice shall be includ\hich\af4\dbch\af31505\loch\f4 ed in all copies or substantial portions of the Software. -\par -\par \hich\af4\dbch\af31505\loch\f4 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEM -\hich\af4\dbch\af31505\loch\f4 -ENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE S -\hich\af4\dbch\af31505\loch\f4 O\hich\af4\dbch\af31505\loch\f4 FTWARE. -\par }{\rtlch\fcs1 \af40\afs18 \ltrch\fcs0 \f40\fs18\insrsid9658238 -\par }\pard \ltrpar\ql \li0\ri0\sl288\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \ab\af4\afs22 \ltrch\fcs0 \b\fs22\cf25\kerning1\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 HTMLSanitizer }{\rtlch\fcs1 \ab\af4\afs22 \ltrch\fcs0 -\b\fs22\cf25\kerning1\insrsid4197417\charrsid4197417 \hich\af4\dbch\af31505\loch\f4 v.\hich\af4\dbch\af31505\loch\f4 5.0.372}{\rtlch\fcs1 \ab\af4\afs22 \ltrch\fcs0 \b\fs22\cf25\kerning1\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 : -\par }\pard \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\field{\*\fldinst {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 -HYPERLINK "https://nam11.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fmganss%2FHtmlSanitizer&data=04%7C01%7CJames.Conner%40autodesk.com%7Cdaecd65781944b855e7808d946251ff6%7C67bff79e7f914433a8e5c9252d2dd\hich\af4\dbch\af31505\loch\f4 -c1d%7C0%7C0%7C637617947520220149%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=t7WD0mko%2B%2FF%2FdpKKLHyM93UCXrX%2BXwo3yUYVGPZQcGs%3D&reserved=0" }{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 -\fs22\ul\cf26\insrsid1784394 {\*\datafield -00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b54030000680074007400700073003a002f002f006e0061006d00310031002e0073006100660065006c0069006e006b0073002e00700072006f00740065006300740069006f006e002e006f00750074006c006f006f00 -6b002e0063006f006d002f003f00750072006c003d00680074007400700073002500330041002500320046002500320046006700690074006800750062002e0063006f006d002500320046006d00670061006e0073007300250032004600480074006d006c00530061006e006900740069007a006500720026006400610074 -0061003d0030003400250037004300300031002500370043004a0061006d00650073002e0043006f006e006e00650072002500340030006100750074006f006400650073006b002e0063006f006d00250037004300640061006500630064003600350037003800310039003400340062003800350035006500370038003000 -38006400390034003600320035003100660066003600250037004300360037006200660066003700390065003700660039003100340034003300330061003800650035006300390032003500320064003200640064006300310064002500370043003000250037004300300025003700430036003300370036003100370039 -003400370035003200300032003200300031003400390025003700430055006e006b006e006f0077006e002500370043005400570046007000620047005a0073006200330064003800650079004a00570049006a006f0069004d004300340077004c006a00410077004d004400410069004c0043004a00510049006a006f00 -6900560032006c0075004d007a00490069004c0043004a004200540069004900360049006b003100680061005700770069004c0043004a00580056004300490036004d006e00300025003300440025003700430031003000300030002600730064006100740061003d00740037005700440030006d006b006f002500320042 -002500320046004600250032004600640070004b004b004c00480079004d003900330055004300580072005800250032004200580077006f0033007900550059005600470050005a0051006300470073002500330044002600720065007300650072007600650064003d0030000000795881f43b1d7f48af2c825dc4852763 -00000000a5ab0003003b1707467feb610001577200630072}}}{\fldrslt {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 https://github.com/mganss/HtmlSanitizer}}}\sectd \ltrsect\linex0\sectdefaultcl\sftnbj { -\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\insrsid9658238 -\par }{\field{\*\fldinst {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 -HYPERLINK "https://nam11.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fmganss%2FHtmlSanitizer%2Fblob%2Fmaster%2FLICENSE.md&data=04%7C01%7CJames.Conner%40autodesk.com%7Cdaecd65781944b855e7808d946251ff6%7C67bff79e7f914433a8e5c9252d2ddc1d% -\hich\af4\dbch\af31505\loch\f4 7\hich\af4\dbch\af31505\loch\f4 -C0%7C0%7C637617947520220149%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=phLGnloT%2FCglabebh%2FsUSc6iiDyt6D3vSMPPKA%2FgOJQ%3D&reserved=0" }{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 -\fs22\ul\cf26\insrsid1784394 {\*\datafield -00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b8a030000680074007400700073003a002f002f006e0061006d00310031002e0073006100660065006c0069006e006b0073002e00700072006f00740065006300740069006f006e002e006f00750074006c006f006f00 -6b002e0063006f006d002f003f00750072006c003d00680074007400700073002500330041002500320046002500320046006700690074006800750062002e0063006f006d002500320046006d00670061006e0073007300250032004600480074006d006c00530061006e006900740069007a006500720025003200460062 -006c006f0062002500320046006d00610073007400650072002500320046004c004900430045004e00530045002e006d006400260064006100740061003d0030003400250037004300300031002500370043004a0061006d00650073002e0043006f006e006e00650072002500340030006100750074006f00640065007300 -6b002e0063006f006d00250037004300640061006500630064003600350037003800310039003400340062003800350035006500370038003000380064003900340036003200350031006600660036002500370043003600370062006600660037003900650037006600390031003400340033003300610038006500350063 -00390032003500320064003200640064006300310064002500370043003000250037004300300025003700430036003300370036003100370039003400370035003200300032003200300031003400390025003700430055006e006b006e006f0077006e002500370043005400570046007000620047005a00730062003300 -64003800650079004a00570049006a006f0069004d004300340077004c006a00410077004d004400410069004c0043004a00510049006a006f006900560032006c0075004d007a00490069004c0043004a004200540069004900360049006b003100680061005700770069004c0043004a00580056004300490036004d006e -00300025003300440025003700430031003000300030002600730064006100740061003d00700068004c0047006e006c006f005400250032004600430067006c00610062006500620068002500320046007300550053006300360069006900440079007400360044003300760053004d00500050004b004100250032004600 -67004f004a0051002500330044002600720065007300650072007600650064003d0030000000795881f43b1d7f48af2c825dc485276300000000a5ab00030039006552fb2d00ff01805c00b10022}}}{\fldrslt {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\insrsid9658238 -\hich\af4\dbch\af31505\loch\f4 https://github.com/mganss/HtmlSanitizer/blob/master\hich\af4\dbch\af31505\loch\f4 /LICENSE.md}}}\sectd \ltrsect\linex0\sectdefaultcl\sftnbj {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\insrsid9658238 -\par }{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 The MIT License (MIT) -\par \hich\af4\dbch\af31505\loch\f4 Copyright (c) 2013-2016 Michael Ganss and HtmlSanitizer contributors -\par -\par \hich\af4\dbch\af31505\loch\f4 -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, m -\hich\af4\dbch\af31505\loch\f4 e\hich\af4\dbch\af31505\loch\f4 rge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: -\par -\par \hich\af4\dbch\af31505\loch\f4 The above copyright notice and this permission notice shall be included in all\hich\af4\dbch\af31505\loch\f4 copies or substantial portions of the Software. -\par -\par \hich\af4\dbch\af31505\loch\f4 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN N -\hich\af4\dbch\af31505\loch\f4 -O EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -\par -\par }\pard \ltrpar\ql \li0\ri0\sl288\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \ab\af4\afs22 \ltrch\fcs0 \b\fs22\cf25\lang1031\langfe2052\kerning1\langnp1031\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 Markdig v.0.22.0: -\par }\pard \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\field{\*\fldinst {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\lang1031\langfe2052\langnp1031\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 -HYPERLINK "https://nam11.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Flunet-io%2Fmarkdig&data=04%7C01%7CJames.Conner%40autodesk.com%7Cdaecd65781944b855e7808d946251ff6%7C67bff79e7f914433a8e5c9252d2ddc1d%7C0%7C0%7C637617 -\hich\af4\dbch\af31505\loch\f4 947520379375%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=IkaWjqj6UwIqoUB8EQOeZKYMz4qbWg8kbbCcZ0Qa%2Fhg%3D&reserved=0" }{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 -\fs22\ul\cf26\lang1031\langfe2052\langnp1031\insrsid1784394 {\*\datafield -00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b40030000680074007400700073003a002f002f006e0061006d00310031002e0073006100660065006c0069006e006b0073002e00700072006f00740065006300740069006f006e002e006f00750074006c006f006f00 -6b002e0063006f006d002f003f00750072006c003d00680074007400700073002500330041002500320046002500320046006700690074006800750062002e0063006f006d002500320046006c0075006e00650074002d0069006f002500320046006d00610072006b00640069006700260064006100740061003d00300034 -00250037004300300031002500370043004a0061006d00650073002e0043006f006e006e00650072002500340030006100750074006f006400650073006b002e0063006f006d002500370043006400610065006300640036003500370038003100390034003400620038003500350065003700380030003800640039003400 -36003200350031006600660036002500370043003600370062006600660037003900650037006600390031003400340033003300610038006500350063003900320035003200640032006400640063003100640025003700430030002500370043003000250037004300360033003700360031003700390034003700350032 -00300033003700390033003700350025003700430055006e006b006e006f0077006e002500370043005400570046007000620047005a0073006200330064003800650079004a00570049006a006f0069004d004300340077004c006a00410077004d004400410069004c0043004a00510049006a006f006900560032006c00 -75004d007a00490069004c0043004a004200540069004900360049006b003100680061005700770069004c0043004a00580056004300490036004d006e00300025003300440025003700430031003000300030002600730064006100740061003d0049006b00610057006a0071006a00360055007700490071006f00550042 -003800450051004f0065005a004b0059004d007a003400710062005700670038006b0062006200430063005a00300051006100250032004600680067002500330044002600720065007300650072007600650064003d0030000000795881f43b1d7f48af2c825dc485276300000000a5ab000300620052006e727800000046 -00000000}}}{\fldrslt {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\lang1031\langfe2052\langnp1031\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 https://github.com/lunet-io/markdig}}}\sectd \ltrsect\linex0\sectdefaultcl\sftnbj {\rtlch\fcs1 \af4\afs22 -\ltrch\fcs0 \fs22\ul\cf26\lang1031\langfe2052\langnp1031\insrsid9658238 -\par }{\field{\*\fldinst {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\lang1031\langfe2052\langnp1031\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 HYPERLINK "https://nam11.safelinks.protection.outlook.com/?url=https%\hich\af4\dbch\af31505\loch\f4 -3A%2F%2Fgithub.com%2Flunet-io%2Fmarkdig%2Fblob%2Fmaster%2Flicense.txt&data=04%7C01%7CJames.Conner%40autodesk.com%7Cdaecd65781944b855e7808d946251ff6%7C67bff79e7f914433a8e5c9252d2ddc1d%7C0%7C0%7C637617947520379375%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDA -\hich\af4\dbch\af31505\loch\f4 i\hich\af4\dbch\af31505\loch\f4 LCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=eIL37c9G%2B11uq1htX8ARhSCvefpQIOMXjVAqMh1aceU%3D&reserved=0" }{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 -\fs22\ul\cf26\lang1031\langfe2052\langnp1031\insrsid1784394 {\*\datafield -00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b7c030000680074007400700073003a002f002f006e0061006d00310031002e0073006100660065006c0069006e006b0073002e00700072006f00740065006300740069006f006e002e006f00750074006c006f006f00 -6b002e0063006f006d002f003f00750072006c003d00680074007400700073002500330041002500320046002500320046006700690074006800750062002e0063006f006d002500320046006c0075006e00650074002d0069006f002500320046006d00610072006b0064006900670025003200460062006c006f00620025 -00320046006d00610073007400650072002500320046006c006900630065006e00730065002e00740078007400260064006100740061003d0030003400250037004300300031002500370043004a0061006d00650073002e0043006f006e006e00650072002500340030006100750074006f006400650073006b002e006300 -6f006d00250037004300640061006500630064003600350037003800310039003400340062003800350035006500370038003000380064003900340036003200350031006600660036002500370043003600370062006600660037003900650037006600390031003400340033003300610038006500350063003900320035 -00320064003200640064006300310064002500370043003000250037004300300025003700430036003300370036003100370039003400370035003200300033003700390033003700350025003700430055006e006b006e006f0077006e002500370043005400570046007000620047005a00730062003300640038006500 -79004a00570049006a006f0069004d004300340077004c006a00410077004d004400410069004c0043004a00510049006a006f006900560032006c0075004d007a00490069004c0043004a004200540069004900360049006b003100680061005700770069004c0043004a00580056004300490036004d006e003000250033 -00440025003700430031003000300030002600730064006100740061003d00650049004c0033003700630039004700250032004200310031007500710031006800740058003800410052006800530043007600650066007000510049004f004d0058006a005600410071004d00680031006100630065005500250033004400 -2600720065007300650072007600650064003d0030000000795881f43b1d7f48af2c825dc485276300000000a5ab000300440000003af76e0064006500300000}}}{\fldrslt {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\lang1031\langfe2052\langnp1031\insrsid9658238 -\hich\af4\dbch\af31505\loch\f4 https://github.com/lunet-io/markdig/blob/master/license.txt}}}\sectd \ltrsect\linex0\sectdefaultcl\sftnbj {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\lang1031\langfe2052\langnp1031\insrsid9658238 -\par }{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 Copyright (c) 2018-2019, Alexandre Mutel -\par \hich\af4\dbch\af31505\loch\f4 All rights reserved. -\par -\par \hich\af4\dbch\af31505\loch\f4 Redistri\hich\af4\dbch\af31505\loch\f4 bution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: -\par -\par \hich\af4\dbch\af31505\loch\f4 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disc\hich\af4\dbch\af31505\loch\f4 laimer. -\par -\par \hich\af4\dbch\af31505\loch\f4 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. -\par -\par \hich\af4\dbch\af31505\loch\f4 THIS SOFTWARE IS PROVIDED BY THE COPYRIG\hich\af4\dbch\af31505\loch\f4 -HT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUT -\hich\af4\dbch\af31505\loch\f4 O\hich\af4\dbch\af31505\loch\f4 -RS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -\hich\af4\dbch\af31505\loch\f4 A\hich\af4\dbch\af31505\loch\f4 -NY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -\par }{\rtlch\fcs1 \af40\afs18 \ltrch\fcs0 \f40\fs18\insrsid9658238 -\par -\par }\pard \ltrpar\ql \li0\ri0\sl288\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \ab\af4\afs22 \ltrch\fcs0 \b\fs22\cf25\kerning1\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 System.Buffers v.4.5.1 -\par }\pard \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 The MIT License (MIT) -\par \hich\af4\dbch\af31505\loch\f4 Copyright (c) .NET Foundation and Contributors -\par \hich\af4\dbch\af31505\loch\f4 All rights reserved. -\par -\par \hich\af4\dbch\af31505\loch\f4 Permission is hereby granted, free of charge, to any person obta\hich\af4\dbch\af31505\loch\f4 -ining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the -\hich\af4\dbch\af31505\loch\f4 \hich\af4\dbch\af31505\loch\f4 Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: -\par -\par \hich\af4\dbch\af31505\loch\f4 The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. -\par -\par \hich\af4\dbch\af31505\loch\f4 THE SOFTWARE I\hich\af4\dbch\af31505\loch\f4 -S PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR AN -\hich\af4\dbch\af31505\loch\f4 Y\hich\af4\dbch\af31505\loch\f4 CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -\par }{\rtlch\fcs1 \af40\afs18 \ltrch\fcs0 \f40\fs18\insrsid9658238 -\par }\pard \ltrpar\ql \li0\ri0\sl288\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \ab\af4\afs22 \ltrch\fcs0 \b\fs22\cf25\kerning1\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 System.Memory v.4.5.4 -\par }\pard \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 The MIT License (MIT) -\par \hich\af4\dbch\af31505\loch\f4 Copyright (c) .NET F\hich\af4\dbch\af31505\loch\f4 oundation and Contributors -\par \hich\af4\dbch\af31505\loch\f4 All rights reserved. -\par -\par \hich\af4\dbch\af31505\loch\f4 Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including witho -\hich\af4\dbch\af31505\loch\f4 -ut limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: -\par -\par \hich\af4\dbch\af31505\loch\f4 The above copyright notice an\hich\af4\dbch\af31505\loch\f4 d this permission notice shall be included in all copies or substantial portions of the Software. -\par -\par \hich\af4\dbch\af31505\loch\f4 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS F\hich\af4\dbch\af31505\loch\f4 -OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWA -\hich\af4\dbch\af31505\loch\f4 R\hich\af4\dbch\af31505\loch\f4 E OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -\par }{\rtlch\fcs1 \af40\afs18 \ltrch\fcs0 \f40\fs18\insrsid9658238 -\par }\pard \ltrpar\ql \li0\ri0\sl288\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \ab\af4\afs22 \ltrch\fcs0 \b\fs22\cf25\kerning1\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 System.Numerics.Vectors v.4.5.0 -\par }\pard \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 The MIT License (MIT) -\par \hich\af4\dbch\af31505\loch\f4 Copyright (c) .NET Foundation and Contributors -\par \hich\af4\dbch\af31505\loch\f4 All rights reserved. -\par -\par \hich\af4\dbch\af31505\loch\f4 -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, m -\hich\af4\dbch\af31505\loch\f4 e\hich\af4\dbch\af31505\loch\f4 rge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: -\par -\par \hich\af4\dbch\af31505\loch\f4 The above copyright notice and this permission notice shall be included in all\hich\af4\dbch\af31505\loch\f4 copies or substantial portions of the Software. -\par -\par \hich\af4\dbch\af31505\loch\f4 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN N -\hich\af4\dbch\af31505\loch\f4 -O EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -\par }{\rtlch\fcs1 \af40\afs18 \ltrch\fcs0 \f40\fs18\insrsid9658238 -\par -\par }\pard \ltrpar\ql \li0\ri0\sl288\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \ab\af4\afs22 \ltrch\fcs0 \b\fs22\cf25\kerning1\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 System.Text.Encoding.CodePages v.4.5.0 -\par }\pard \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 The MIT License (MIT) -\par \hich\af4\dbch\af31505\loch\f4 Copyright (c) .NET Foundation and Contributors -\par \hich\af4\dbch\af31505\loch\f4 All right\hich\af4\dbch\af31505\loch\f4 s reserved. -\par -\par \hich\af4\dbch\af31505\loch\f4 -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, cop -\hich\af4\dbch\af31505\loch\f4 y, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: -\par -\par \hich\af4\dbch\af31505\loch\f4 The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. -\par -\par \hich\af4\dbch\af31505\loch\f4 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES \hich\af4\dbch\af31505\loch\f4 -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR -\hich\af4\dbch\af31505\loch\f4 I\hich\af4\dbch\af31505\loch\f4 N CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -\par }{\rtlch\fcs1 \af40\afs18 \ltrch\fcs0 \f40\fs18\insrsid9658238 -\par }\pard \ltrpar\ql \li0\ri0\sl288\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \ab\af4\afs22 \ltrch\fcs0 \b\fs22\cf25\kerning1\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 Rapidjson v.1.1.0: -\par }\pard \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 \hich\f4 Copyright \'a9\loch\f4 - 2015 THL A29 Limited, a Tencent company, and Milo Yip. All rights reserved. -\par -\par \hich\af4\dbch\af31505\loch\f4 Permission is hereby granted, free of charge, to any person obtaining\hich\af4\dbch\af31505\loch\f4 - a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Soft -\hich\af4\dbch\af31505\loch\f4 w\hich\af4\dbch\af31505\loch\f4 -are, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. -\par -\par \hich\af4\dbch\af31505\loch\f4 THE SOFTWARE IS PROV\hich\af4\dbch\af31505\loch\f4 -IDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAI -\hich\af4\dbch\af31505\loch\f4 M\hich\af4\dbch\af31505\loch\f4 , DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -\par }{\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \f40\fs20\insrsid9658238 -\par }\pard \ltrpar\ql \li0\ri0\sl288\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \ab\af4\afs22 \ltrch\fcs0 \b\fs22\cf25\kerning1\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 Mono.Cecil v.0.11.4: -\par }\pard \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 Copyright (c) 2008 - 2015 Jb Evain -\par \hich\af4\dbch\af31505\loch\f4 Copyright (c)\hich\af4\dbch\af31505\loch\f4 2008 - 2011 Novell, Inc. -\par -\par \hich\af4\dbch\af31505\loch\f4 -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the righ -\hich\af4\dbch\af31505\loch\f4 ts to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: -\par -\par \hich\af4\dbch\af31505\loch\f4 The above copyright notice and this permission noti\hich\af4\dbch\af31505\loch\f4 ce shall be included in all copies or substantial portions of the Software. -\par -\par \hich\af4\dbch\af31505\loch\f4 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -\par \hich\af4\dbch\af31505\loch\f4 EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOS\hich\af4\dbch\af31505\loch\f4 -E AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -\hich\af4\dbch\af31505\loch\f4 \hich\af4\dbch\af31505\loch\f4 DEALINGS IN THE SOFTWARE. -\par }{\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \f40\fs20\insrsid9658238 -\par }\pard \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid868937 {\rtlch\fcs1 \ab\af4\afs22 \ltrch\fcs0 \b\fs22\cf25\kerning1\insrsid868937\charrsid868937 \hich\af4\dbch\af31505\loch\f4 LaunchDarkly.Clientsdk v.2.0.1 -\par \hich\af4\dbch\af31505\loch\f4 LaunchDarkly.CommonSdk v.5.5.0 -\par \hich\af4\dbch\af31505\loch\f4 LaunchDarkly.EventSource v.4.1.3 -\par \hich\af4\dbch\af31505\loch\f4 LaunchDarkly.InternalSdk v.2.3.2 -\par \hich\af4\dbch\af31505\loch\f4 LaunchDarkly.JsonStream v.1.0.3 -\par \hich\af4\dbch\af31505\loch\f4 LaunchDarkly.Logging v.1.0.1}{\rtlch\fcs1 \ab\af4\afs22 \ltrch\fcs0 \b\fs22\cf25\kerning1\insrsid868937 \line }{\rtlch\fcs1 \ab\af4\afs22 \ltrch\fcs0 \b\fs22\cf25\kerning1\insrsid868937\charrsid868937 -\hich\af4\dbch\af31505\loch\f4 Copyright 2018 Catamorphic, Co.}{\rtlch\fcs1 \ab\af4\afs22 \ltrch\fcs0 \b\fs22\cf25\kerning1\insrsid9658238 -\par }{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\insrsid4352418 -\par }\pard \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 -Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at }{\field{\*\fldinst {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\insrsid9658238 -\hich\af4\dbch\af31505\loch\f4 HYPERLINK http://www.apache.org/licenses/LICENSE-2.0 }{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\insrsid1784394 {\*\datafield -00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b6e00000068007400740070003a002f002f007700770077002e006100700061006300680065002e006f00720067002f006c006900630065006e007300650073002f004c004900430045004e00530045002d0032002e00 -30000000795881f43b1d7f48af2c825dc485276300000000a5ab000312452f63002200650006013500360000}}}{\fldrslt {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 http://www.apache.org/licenses/LICENSE-2.0}}}\sectd \ltrsect -\linex0\sectdefaultcl\sftnbj {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS -\hich\af4\dbch\af31505\loch\f4 IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. -\par }{\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \f40\fs20\insrsid9658238 -\par }\pard \ltrpar\ql \li0\ri0\sl288\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \ab\af4\afs22 \ltrch\fcs0 \b\fs22\cf25\kerning1\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 CommandLineParser v.2.8.0: -\par }\pard \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 The MIT License (MIT) -\par \hich\af4\dbch\af31505\loch\f4 Copyright (c) 2005 - 2015 Giacomo Stelluti Scala & Contributors -\par -\par \hich\af4\dbch\af31505\loch\f4 Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction,\hich\af4\dbch\af31505\loch\f4 - including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: -\par -\par \hich\af4\dbch\af31505\loch\f4 The above cop\hich\af4\dbch\af31505\loch\f4 yright notice and this permission notice shall be included in all copies or substantial portions of the Software. -\par -\par \hich\af4\dbch\af31505\loch\f4 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTAB\hich\af4\dbch\af31505\loch\f4 -ILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -\hich\af4\dbch\af31505\loch\f4 \hich\af4\dbch\af31505\loch\f4 WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -\par }{\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \f40\fs20\insrsid9658238 -\par }\pard \ltrpar\ql \li0\ri0\sl288\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \ab\af4\afs22 \ltrch\fcs0 \b\fs22\cf25\kerning1\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 Nlohmann.json v.3.7.3 -\par }\pard \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 \hich\f4 Copyright \'a9\loch\f4 2013-2022 Niels Lohmann -\par -\par \hich\af4\dbch\af31505\loch\f4 Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (th\hich\af4\dbch\af31505\loch\f4 -e "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is -\par \hich\af4\dbch\af31505\loch\f4 furnished to\hich\af4\dbch\af31505\loch\f4 do so, subject to the following conditions: -\par -\par \hich\af4\dbch\af31505\loch\f4 The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. -\par -\par \hich\af4\dbch\af31505\loch\f4 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED\hich\af4\dbch\af31505\loch\f4 -, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRAC -\hich\af4\dbch\af31505\loch\f4 T\hich\af4\dbch\af31505\loch\f4 , TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -\par }{\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \f40\fs20\insrsid9658238 -\par }\pard \ltrpar\ql \li0\ri0\sl288\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \ab\af4\afs22 \ltrch\fcs0 \b\fs22\cf25\kerning1\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 Autodesk Artifakt Fonts -\par }\pard \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 \hich\f4 Licensing information: \'a9\loch\f4 Autodesk, Inc. All Rights Reserved. -\par -\par \hich\af4\dbch\af31505\loch\f4 The Artifakt font software is Autodesk proprie\hich\af4\dbch\af31505\loch\f4 -tary and confidential, and may be used only by authorized users and only for Autodesk business purposes. Any use not authorized by Autodesk is not permitted and is an infringement of Autodesk's intellectual property rights as well as a breach of your agre -\hich\af4\dbch\af31505\loch\f4 e\hich\af4\dbch\af31505\loch\f4 ment with Autodesk. Go to }{\field{\*\fldinst {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 -HYPERLINK https://brand.autodesk.com/brand-system/typography }{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\insrsid1784394 {\*\datafield -00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b7e000000680074007400700073003a002f002f006200720061006e0064002e006100750074006f006400650073006b002e0063006f006d002f006200720061006e0064002d00730079007300740065006d002f007400 -790070006f006700720061007000680079000000795881f43b1d7f48af2c825dc485276300000000a5ab0003006f1454008e005c8f17016600200000}}}{\fldrslt {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 -https://brand.autodesk.com/brand-system\hich\af4\dbch\af31505\loch\f4 /typography}}}\sectd \ltrsect\linex0\sectdefaultcl\sftnbj {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 - for detailed usage guidelines on when and how to use the Artifakt designer collection. -\par }{\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \f40\fs20\insrsid9658238 -\par }\pard \ltrpar\ql \li0\ri0\sl288\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \ab\af4\afs22 \ltrch\fcs0 \b\fs22\cf25\kerning1\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 DirectX -\par }{\field{\*\fldinst {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 HYPERLINK "https://github.com/DynamoDS/Dynamo/tree/master/tools/install/Extra/DirectX/License%20Agreements/DirectX%20SDK%20EULA.txt" }{ -\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\insrsid1784394 {\*\datafield -00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90bfe000000680074007400700073003a002f002f006700690074006800750062002e0063006f006d002f00440079006e0061006d006f00440053002f00440079006e0061006d006f002f0074007200650065002f006d00 -610073007400650072002f0074006f006f006c0073002f0069006e007300740061006c006c002f00450078007400720061002f0044006900720065006300740058002f004c006900630065006e00730065002000410067007200650065006d0065006e00740073002f0044006900720065006300740058002000530044004b -002000450055004c0041002e007400780074000000795881f43b1d7f48af2c825dc485276300000000a5ab000300410065027800390013017300001800}}}{\fldrslt {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 -https://github.com/DynamoDS/Dynamo/tree/master/tools/install/Extra/DirectX/\hich\af4\dbch\af31505\loch\f4 License Agreements/DirectX SDK EULA.txt -\par }}}\pard\plain \ltrpar\ql \li0\ri0\sl288\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 \rtlch\fcs1 \af4\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe2052\loch\af4\hich\af4\dbch\af31505\cgrid\langnp1033\langfenp2052 \sectd \ltrsect -\linex0\sectdefaultcl\sftnbj {\field{\*\fldinst {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 -HYPERLINK "https://github.com/DynamoDS/Dynamo/tree/master/tools/install/Extra/DirectX/License%20Agreements/directx%20redist.txt" }{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\insrsid1784394 {\*\datafield -00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90bfa000000680074007400700073003a002f002f006700690074006800750062002e0063006f006d002f00440079006e0061006d006f00440053002f00440079006e0061006d006f002f0074007200650065002f006d00 -610073007400650072002f0074006f006f006c0073002f0069006e007300740061006c006c002f00450078007400720061002f0044006900720065006300740058002f004c006900630065006e00730065002000410067007200650065006d0065006e00740073002f00640069007200650063007400780020007200650064 -006900730074002e007400780074000000795881f43b1d7f48af2c825dc485276300000000a5ab0003126d002e00002a3a00a22a7300ec0000}}}{\fldrslt {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 -https://github.com/DynamoDS/Dynamo/tree/master/tools/install/Extra/DirectX/License Agreements/directx redist.txt -\par }}}\pard\plain \ltrpar\ql \li0\ri0\sl288\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 \rtlch\fcs1 \af4\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe2052\loch\af4\hich\af4\dbch\af31505\cgrid\langnp1033\langfenp2052 \sectd \ltrsect -\linex0\sectdefaultcl\sftnbj {\rtlch\fcs1 \ab\af4 \ltrch\fcs0 \b\kerning1\insrsid9658238 -\par }{\rtlch\fcs1 \ab\af4\afs22 \ltrch\fcs0 \b\fs22\cf25\kerning1\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 ImageMagick -\par }{\field{\*\fldinst {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 HYPERLINK https://imagemagick.org/script/license.php }{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\insrsid1784394 {\*\datafield -00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b6e000000680074007400700073003a002f002f0069006d006100670065006d0061006700690063006b002e006f00720067002f007300630072006900700074002f006c006900630065006e00730065002e0070006800 -70000000795881f43b1d7f48af2c825dc485276300000000a5ab0003006500650003493500724b53006e1400}}}{\fldrslt {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 https://imagemagick.org/script/license.php}}}\sectd \ltrsect -\linex0\sectdefaultcl\sftnbj {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\insrsid9658238 -\par -\par }\pard \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid16089027 {\rtlch\fcs1 \ab\af4\afs22 \ltrch\fcs0 \b\fs22\cf25\kerning1\insrsid16089027\charrsid16089027 \hich\af4\dbch\af31505\loch\f4 LiveChartsCore v.2.0.0-beta.855: -\par \hich\af4\dbch\af31505\loch\f4 LiveChartsCore.SkiaSharpView v.2.0.0-beta.855: -\par \hich\af4\dbch\af31505\loch\f4 LiveChartsCore.SkiaSharpView.WPF \hich\af4\dbch\af31505\loch\f4 v.2.0.0-beta.855: -\par \hich\af4\dbch\af31505\loch\f4 Copyright (c) 2021 Alberto Rodriguez Orozco -\par -\par \hich\af4\dbch\af31505\loch\f4 MIT License -\par -\par }{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\insrsid16089027\charrsid16089027 \hich\af4\dbch\af31505\loch\f4 Permission is hereby granted, free of charge, to any person obtaining a copy -\par \hich\af4\dbch\af31505\loch\f4 of this software and associated documentation files (the "Software"), to deal -\par \hich\af4\dbch\af31505\loch\f4 in the Software without restriction, including without limitation the rights -\par \hich\af4\dbch\af31505\loch\f4 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -\par \hich\af4\dbch\af31505\loch\f4 copies of the Software, and\hich\af4\dbch\af31505\loch\f4 to permit persons to whom the Software is -\par \hich\af4\dbch\af31505\loch\f4 furnished to do so, subject to the following conditions: -\par -\par \hich\af4\dbch\af31505\loch\f4 The above copyright notice and this permission notice shall be included in all -\par \hich\af4\dbch\af31505\loch\f4 copies or substantial portions of the Software. -\par -\par \hich\af4\dbch\af31505\loch\f4 THE SOFTWARE IS PROVIDED "A\hich\af4\dbch\af31505\loch\f4 S IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -\par \hich\af4\dbch\af31505\loch\f4 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -\par \hich\af4\dbch\af31505\loch\f4 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -\par \hich\af4\dbch\af31505\loch\f4 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAG\hich\af4\dbch\af31505\loch\f4 ES OR OTHER -\par \hich\af4\dbch\af31505\loch\f4 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -\par \hich\af4\dbch\af31505\loch\f4 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE}{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\insrsid16089027 \hich\af4\dbch\af31505\loch\f4 }{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 -\fs22\cf25\insrsid16089027\charrsid16089027 \hich\af4\dbch\af31505\loch\f4 SOFTWARE.}{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\insrsid9658238\charrsid16089027 -\par }{\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \f40\fs20\lang1053\langfe2052\langnp1053\insrsid16089027 -\par }\pard \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid10497410 {\rtlch\fcs1 \ab\af4\afs22 \ltrch\fcs0 \b\fs22\cf25\lang1053\langfe2052\kerning1\langnp1053\insrsid10497410\charrsid10497410 \hich\af4\dbch\af31505\loch\f4 -Magick.NET.Core v7.0.1: -\par }\pard \ltrpar\ql \li0\ri0\sl288\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid10497410 {\rtlch\fcs1 \ab\af4\afs22 \ltrch\fcs0 \b\fs22\cf25\lang1053\langfe2052\kerning1\langnp1053\insrsid10497410\charrsid10497410 -\hich\af4\dbch\af31505\loch\f4 Copyright [2013] [dlemstra]}{\rtlch\fcs1 \ab\af4\afs22 \ltrch\fcs0 \b\fs22\cf25\lang1053\langfe2052\kerning1\langnp1053\insrsid10497410 -\par }{\field{\*\fldinst {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\lang1053\langfe2052\langnp1053\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 HYPERLINK https://github.com/dlemstra/Magick.NET/blob/main/License.txt }{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 -\fs22\lang1053\langfe2052\langnp1053\insrsid1784394 {\*\datafield -00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b92000000680074007400700073003a002f002f006700690074006800750062002e0063006f006d002f0064006c0065006d0073007400720061002f004d0061006700690063006b002e004e00450054002f0062006c00 -6f0062002f006d00610069006e002f004c006900630065006e00730065002e007400780074000000795881f43b1d7f48af2c825dc485276300000000a5ab00034c538c73007100d30018430900614300}}}{\fldrslt {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 -\fs22\lang1053\langfe2052\langnp1053\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 https://github.com/\hich\af4\dbch\af31505\loch\f4 dlemstra/Magick.NET/blob/main/License.txt}}}\sectd \ltrsect\linex0\sectdefaultcl\sftnbj {\rtlch\fcs1 \af4\afs22 -\ltrch\fcs0 \fs22\lang1053\langfe2052\langnp1053\insrsid9658238 -\par }{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\lang1053\langfe2052\langnp1053\insrsid7632792 -\par }\pard \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid7632792 {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\insrsid7632792\charrsid7632792 \hich\af4\dbch\af31505\loch\f4 Licensed under the Apach\hich\af4\dbch\af31505\loch\f4 -e License, Version 2.0 (the "License"); -\par \hich\af4\dbch\af31505\loch\f4 you may not use this file except in compliance with the License. -\par \hich\af4\dbch\af31505\loch\f4 You may obtain a copy of the License at -\par -\par }\pard \ltrpar\ql \li0\ri0\sl288\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid2829184 {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\lang1053\langfe2052\langnp1053\insrsid7632792\charrsid2829184 \hich\af4\dbch\af31505\loch\f4 -http://www.apache.org/licenses/LICENSE-2.0 -\par }\pard \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid7632792 {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\insrsid7632792\charrsid7632792 -\par \hich\af4\dbch\af31505\loch\f4 Unless required by applicable law or agreed to in writing, softwar\hich\af4\dbch\af31505\loch\f4 e -\par \hich\af4\dbch\af31505\loch\f4 distributed under the License is distributed on an "AS IS" BASIS, -\par \hich\af4\dbch\af31505\loch\f4 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -\par \hich\af4\dbch\af31505\loch\f4 See the License for the specific language governing permissions and -\par \hich\af4\dbch\af31505\loch\f4 limitations under the License. -\par }\pard \ltrpar\ql \li0\ri0\sl288\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid7632792 {\rtlch\fcs1 \af4 \ltrch\fcs0 \lang1053\langfe2052\langnp1053\insrsid7632792\charrsid7632792 -\par \hich\af4\dbch\af31505\loch\f4 Magick.NET-Q8-AnyCPU v7.24.1: -\par }{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\lang1053\langfe2052\langnp1053\insrsid7632792\charrsid2829184 \hich\af4\dbch\af31505\loch\f4 https://imagemagick.org/script/license.php -\par }\pard \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid2829184 {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\insrsid7632792\charrsid2829184 \hich\af4\dbch\af31505\loch\f4 -Copyright 1999-2021 ImageMagick Studio LLC, a non-profit organization dedicated to \hich\af4\dbch\af31505\loch\f4 making software imaging solutions freely available.}{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\insrsid9658238\charrsid2829184 -\par }\pard \ltrpar\ql \li0\ri0\sl288\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid7632792 {\rtlch\fcs1 \af4 \ltrch\fcs0 \lang1053\langfe2052\langnp1053\insrsid7632792\charrsid16075008 -\par }\pard \ltrpar\ql \li0\ri0\sl288\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \ab\af4\afs22 \ltrch\fcs0 \b\fs22\cf25\kerning1\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 Open XML SDK -\par }{\field\flddirty{\*\fldinst {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\lang1053\langfe2052\langnp1053\insrsid9658238\charrsid2829184 \hich\af4\dbch\af31505\loch\f4 HYPERLINK https://github.com/OfficeDev/Open-XML-SDK }{\rtlch\fcs1 \af4\afs22 -\ltrch\fcs0 \fs22\ul\cf26\lang1053\langfe2052\langnp1053\insrsid1784394\charrsid2829184 {\*\datafield -00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b6c000000680074007400700073003a002f002f006700690074006800750062002e0063006f006d002f004f00660066006900630065004400650076002f004f00700065006e002d0058004d004c002d00530044004b00 -0000795881f43b1d7f48af2c825dc485276300000000a5ab00032274004c98000000000d000400320000}}}{\fldrslt {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\lang1053\langfe2052\langnp1053\insrsid9658238\charrsid2829184 \hich\af4\dbch\af31505\loch\f4 -https://github.com/OfficeDev/Open-XML-SDK}}}\sectd \ltrsect\linex0\sectdefaultcl\sftnbj {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\lang1053\langfe2052\langnp1053\insrsid9658238\charrsid2829184 -\par }{\field\flddirty{\*\fldinst {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\lang1053\langfe2052\langnp1053\insrsid9658238\charrsid2829184 \hich\af4\dbch\af31505\loch\f4 HYPERLINK https://github.com/OfficeDev/Open-XML-SDK/blob/main/LICENSE }{ -\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\lang1053\langfe2052\langnp1053\insrsid1784394\charrsid2829184 {\*\datafield -00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b90000000680074007400700073003a002f002f006700690074006800750062002e0063006f006d002f004f00660066006900630065004400650076002f004f00700065006e002d0058004d004c002d00530044004b00 -2f0062006c006f0062002f006d00610069006e002f004c004900430045004e00530045000000795881f43b1d7f48af2c825dc485276300000000a5ab0003024f0072001c0068005e000000a50000}}}{\fldrslt {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 -\fs22\ul\cf26\lang1053\langfe2052\langnp1053\insrsid9658238\charrsid2829184 \hich\af4\dbch\af31505\loch\f4 https://github.com/OfficeDev/Open-XML-SDK/blob/main/LICENSE}}}\sectd \ltrsect\linex0\sectdefaultcl\sftnbj {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 -\fs22\ul\cf26\lang1053\langfe2052\langnp1053\insrsid9658238\charrsid2829184 -\par }{\rtlch\fcs1 \ab\af4 \ltrch\fcs0 \b\lang1053\langfe2052\kerning1\langnp1053\insrsid9658238 -\par }{\rtlch\fcs1 \ab\af4\afs22 \ltrch\fcs0 \b\fs22\cf25\lang1053\langfe2052\kerning1\langnp1053\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 Python Standard Library -\par }{\field{\*\fldinst {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\lang1053\langfe2052\langnp1053\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 HYPERLINK "https://docs.python.org/2.7/library/" }{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 -\fs22\ul\cf26\lang1053\langfe2052\langnp1053\insrsid1784394 {\*\datafield -00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b62000000680074007400700073003a002f002f0064006f00630073002e0070007900740068006f006e002e006f00720067002f0032002e0037002f006c006900620072006100720079002f000000795881f43b1d7f48 -af2c825dc485276300000000a5ab00032c6200430000002200b600006f480000}}}{\fldrslt {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\lang1053\langfe2052\langnp1053\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 https://docs.python.org/2.7/library/ -\par }}}\pard\plain \ltrpar\ql \li0\ri0\sl288\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 \rtlch\fcs1 \af4\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe2052\loch\af4\hich\af4\dbch\af31505\cgrid\langnp1033\langfenp2052 \sectd \ltrsect -\linex0\sectdefaultcl\sftnbj {\field{\*\fldinst {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\lang1053\langfe2052\langnp1053\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 HYPERLINK "https://docs.pyt\hich\af4\dbch\af31505\loch\f4 -hon.org/2.7/license.html" }{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\lang1053\langfe2052\langnp1053\insrsid1784394 {\*\datafield -00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b6a000000680074007400700073003a002f002f0064006f00630073002e0070007900740068006f006e002e006f00720067002f0032002e0037002f006c006900630065006e00730065002e00680074006d006c000000 -795881f43b1d7f48af2c825dc485276300000000a5ab00032050006100710121007200004e5c0000}}}{\fldrslt {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\lang1053\langfe2052\langnp1053\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 -https://docs.python.org/2.7/license.html -\par }}}\pard\plain \ltrpar\ql \li0\ri0\sl288\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 \rtlch\fcs1 \af4\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe2052\loch\af4\hich\af4\dbch\af31505\cgrid\langnp1033\langfenp2052 \sectd \ltrsect -\linex0\sectdefaultcl\sftnbj {\rtlch\fcs1 \ab\af4\afs22 \ltrch\fcs0 \b\fs22\cf25\lang1053\langfe2052\kerning1\langnp1053\insrsid9658238 -\par }{\rtlch\fcs1 \ab\af4\afs22 \ltrch\fcs0 \b\fs22\cf25\kerning1\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 Python Modules}{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf27\highlight8\insrsid9658238 -\par }\pard \ltrpar\ql \li0\ri0\sl276\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\field{\*\fldinst {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 HYPERLINK https://numpy.org/ }{\rtlch\fcs1 \af4\afs22 -\ltrch\fcs0 \fs22\insrsid1784394 {\*\datafield -00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b3e000000680074007400700073003a002f002f006e0075006d00700079002e006f00720067002f000000795881f43b1d7f48af2c825dc485276300000000a5ab000312720073000000000055006e394e0000}} -}{\fldrslt {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 https://numpy.org/}}}\sectd \ltrsect\linex0\sectdefaultcl\sftnbj {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 -\fs22\ul\cf26\lang1053\langfe2052\langnp1053\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 }{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 License: Distributed under a liberal}{\rtlch\fcs1 \af4\afs22 -\ltrch\fcs0 \fs22\cf28\highlight8\insrsid9658238 \~}{\field{\*\fldinst {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 HYPERLINK "https://github.com/numpy/numpy/blob/main/LICENSE.txt" }{\rtlch\fcs1 \af4\afs22 -\ltrch\fcs0 \fs22\insrsid1784394 {\*\datafield -00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b82000000680074007400700073003a002f002f006700690074006800750062002e0063006f006d002f006e0075006d00700079002f006e0075006d00700079002f0062006c006f0062002f006d00610069006e002f00 -4c004900430045004e00530045002e007400780074000000795881f43b1d7f48af2c825dc485276300000000a5ab00030f6f006c00fb00000004000050490000}}}{\fldrslt {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf29\highlight8\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 -BSD license}}}\sectd \ltrsect\linex0\sectdefaultcl\sftnbj {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\insrsid9658238 -\par }{\field{\*\fldinst {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 HYPERLINK https://pandas.pydata.org/ }{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\insrsid1784394 {\*\datafield -00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b4e000000680074007400700073003a002f002f00700061006e006400610073002e007000790064006100740061002e006f00720067002f000000795881f43b1d7f48af2c825dc485276300000000a5ab00033a3b2f00 -000100000038000000220000}}}{\fldrslt {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 https://pandas.pydata.org/}}}\sectd \ltrsect\linex0\sectdefaultcl\sftnbj {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 -\fs22\ul\cf26\lang1053\langfe2052\langnp1053\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 }{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 License}{\rtlch\fcs1 \ab\af4\afs22 \ltrch\fcs0 -\b\fs22\cf25\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 :}{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 BSD 3-Clause "New" or "Revised" License}{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 -\fs22\cf30\insrsid9658238 -\par }{\field{\*\fldinst {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 HYPERLINK https://scipy.org/ }{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\insrsid1784394 {\*\datafield -00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b3e000000680074007400700073003a002f002f00730063006900700079002e006f00720067002f000000795881f43b1d7f48af2c825dc485276300000000a5ab00037b6514750000000000eb0100726c0000}} -}{\fldrslt {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 https://scipy.org/}}}\sectd \ltrsect\linex0\sectdefaultcl\sftnbj {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 }{ -\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 License:}{\rtlch\fcs1 \ab\af4\afs22 \ltrch\fcs0 \b\fs22\cf25\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 }{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 -\fs22\cf25\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 Distributed under a liberal}{\rtlch\fcs1 \ab\af4\afs22 \ltrch\fcs0 \b\fs22\cf25\insrsid9658238 \~}{\field{\*\fldinst {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\insrsid9658238 -\hich\af4\dbch\af31505\loch\f4 HYPERLINK "https://github.com/numpy/numpy/blob/main/LICENSE.txt" }{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\insrsid1784394 {\*\datafield -00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b82000000680074007400700073003a002f002f006700690074006800750062002e0063006f006d002f006e0075006d00700079002f006e0075006d00700079002f0062006c006f0062002f006d00610069006e002f00 -4c004900430045004e00530045002e007400780074000000795881f43b1d7f48af2c825dc485276300000000a5ab000322612f69000000000030002200220155}}}{\fldrslt {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf29\highlight8\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 -BSD license}}}\sectd \ltrsect\linex0\sectdefaultcl\sftnbj {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\insrsid9658238 -\par }{\field{\*\fldinst {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 HYPERLINK https://pypi.org/project/openpyxl/ }{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\insrsid1784394 {\*\datafield -00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b5e000000680074007400700073003a002f002f0070007900700069002e006f00720067002f00700072006f006a006500630074002f006f00700065006e007000790078006c002f000000795881f43b1d7f48af2c825d -c485276300000000a5ab000332361466000100000000004120d00022}}}{\fldrslt {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 https://pypi.org/project/openpyxl/}}}\sectd \ltrsect\linex0\sectdefaultcl\sftnbj {\rtlch\fcs1 -\af4\afs22 \ltrch\fcs0 \fs22\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 }{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 License:\~MIT License (MIT)}{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 -\fs22\cf27\highlight8\insrsid9658238 -\par }{\field{\*\fldinst {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 HYPERLINK https://matplotlib.org/ }{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\insrsid1784394 {\*\datafield -00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b48000000680074007400700073003a002f002f006d006100740070006c006f0074006c00690062002e006f00720067002f000000795881f43b1d7f48af2c825dc485276300000000a5ab0003066d004d0b0078790000 -00667539003a}}}{\fldrslt {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 https://matplotlib.org/}}}\sectd \ltrsect\linex0\sectdefaultcl\sftnbj {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\insrsid9658238 -\hich\af4\dbch\af31505\loch\f4 }{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 License}{\rtlch\fcs1 \ab\af4\afs22 \ltrch\fcs0 \b\fs22\cf25\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 : }{\rtlch\fcs1 -\af4\afs22 \ltrch\fcs0 \fs22\cf25\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 Matplotlib only uses BSD compatible code, and its license is based on the\~}{\field{\*\fldinst {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\insrsid9658238 -\hich\af4\dbch\af31505\loch\f4 HYPERLINK "https://docs.python.org/3/license\hich\af4\dbch\af31505\loch\f4 .html" }{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\insrsid1784394 {\*\datafield -00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b66000000680074007400700073003a002f002f0064006f00630073002e0070007900740068006f006e002e006f00720067002f0033002f006c006900630065006e00730065002e00680074006d006c000000795881f4 -3b1d7f48af2c825dc485276300000000a5ab0003222edd6f002e5d4600000000000a0054}}}{\fldrslt {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf2\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 PSF}}}\sectd \ltrsect\linex0\sectdefaultcl\sftnbj {\rtlch\fcs1 \af4\afs22 -\ltrch\fcs0 \fs22\cf25\insrsid9658238 \~\hich\af4\dbch\af31505\loch\f4 license}{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf28\highlight8\insrsid9658238 -\par }{\field{\*\fldinst {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 HYPERLINK https://pypi.org/project/Pillow/ }{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\insrsid1784394 {\*\datafield -00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b5a000000680074007400700073003a002f002f0070007900700069002e006f00720067002f00700072006f006a006500630074002f00500069006c006c006f0077002f000000795881f43b1d7f48af2c825dc4852763 -00000000a5ab000300142a6900887f3000f30000744b005c}}}{\fldrslt {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 https://pypi.org/project/Pillow/}}}\sectd \ltrsect\linex0\sectdefaultcl\sftnbj {\rtlch\fcs1 \af4\afs22 -\ltrch\fcs0 \fs22\cf28\highlight8\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 }{\rtlch\fcs1 \ab\af4\afs22 \ltrch\fcs0 \b\fs22\cf25\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 License:}{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\insrsid9658238 \~ -\hich\af4\dbch\af31505\loch\f4 Historical Permission Notice}{\rtlch\fcs1 \ab\af4\afs22 \ltrch\fcs0 \b\fs22\cf25\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 and Disclaimer (HPND) }{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf27\highlight8\insrsid9658238 - -\par }\pard \ltrpar\ql \li0\ri0\sl288\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \af4 \ltrch\fcs0 \lang1053\langfe2052\kerning1\langnp1053\insrsid9658238 -\par }{\rtlch\fcs1 \af4 \ltrch\fcs0 \lang1053\langfe2052\kerning1\langnp1053\insrsid14892156 -\par }\pard \ltrpar\ql \li0\ri0\sl288\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid16455092 {\rtlch\fcs1 \ab\af4\afs22 \ltrch\fcs0 \b\fs22\cf25\kerning1\insrsid16455092\charrsid16455092 -\par \hich\af4\dbch\af31505\loch\f4 Xceed Extended WPF Toolkit v.5.0.103}{\rtlch\fcs1 \ab\af4\afs22 \ltrch\fcs0 \b\fs22\cf25\kerning1\insrsid16455092 -\par }{\field{\*\fldinst {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\lang1036\langfe2052\langnp1036\insrsid9658238\charrsid15220234 \hich\af4\dbch\af31505\loch\f4 HYPERLINK "https://opensource.org/licenses/ms-pl.html" }{\rtlch\fcs1 \af4\afs22 -\ltrch\fcs0 \fs22\ul\cf26\insrsid1784394 {\*\datafield -00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b6e000000680074007400700073003a002f002f006f00700065006e0073006f0075007200630065002e006f00720067002f006c006900630065006e007300650073002f006d0073002d0070006c002e00680074006d00 -6c000000795881f43b1d7f48af2c825dc485276300000000a5ab000300eaff00008b585800000000006d0038}}}{\fldrslt {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\lang1036\langfe2052\langnp1036\insrsid9658238\charrsid15220234 \hich\af4\dbch\af31505\loch\f4 -Microsoft Public License -\par }\pard \ltrpar\ql \li0\ri0\sl288\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 }}\pard\plain \ltrpar\ql \li0\ri0\sl288\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 \rtlch\fcs1 \af4\afs24\alang1025 \ltrch\fcs0 -\fs24\lang1033\langfe2052\loch\af4\hich\af4\dbch\af31505\cgrid\langnp1033\langfenp2052 \sectd \ltrsect\linex0\sectdefaultcl\sftnbj {\field{\*\fldinst {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\lang1036\langfe2052\langnp1036\insrsid9658238\charrsid15220234 -\hich\af4\dbch\af31505\loch\f4 HYPERLINK https://github.com/xceedsoftware/wpftoolkit/blob/0ed4ed84152d6a3e2a627f2ef05f82627fdaf3fc/license.md }{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\insrsid1784394 {\*\datafield -00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90be2000000680074007400700073003a002f002f006700690074006800750062002e0063006f006d002f007800630065006500640073006f006600740077006100720065002f0077007000660074006f006f006c006b00 -690074002f0062006c006f0062002f0030006500640034006500640038003400310035003200640036006100330065003200610036003200370066003200650066003000350066003800320036003200370066006400610066003300660063002f006c006900630065006e00730065002e006d0064000000795881f43b1d7f -48af2c825dc485276300000000a5ab0003005d800000cb7f4c0000000061910043}}}{\fldrslt {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\lang1036\langfe2052\langnp1036\insrsid9658238\charrsid15220234 \hich\af4\dbch\af31505\loch\f4 -https://github.com/xceedsoftware/wpftoolkit/blob/0ed4ed84152d6a3e2a627f2ef05f82627fdaf3fc/license.md}}}\sectd \ltrsect\linex0\sectdefaultcl\sftnbj {\rtlch\fcs1 \ab\af4\afs22 \ltrch\fcs0 -\b\fs22\cf25\lang1036\langfe2052\kerning1\langnp1036\insrsid9658238\charrsid15220234 -\par }\pard \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \ab\af40\afs20 \ltrch\fcs0 \b\f40\fs20\lang1036\langfe2052\kerning1\langnp1036\insrsid9658238\charrsid15220234 -\par }\pard \ltrpar\ql \li0\ri0\sl288\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \ab\af4\afs22 \ltrch\fcs0 \b\fs22\cf25\kerning1\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 Microsoft.Web.WebView2 }{\rtlch\fcs1 \ab\af4\afs22 -\ltrch\fcs0 \b\fs22\cf25\kerning1\insrsid13390354\charrsid13390354 \hich\af4\dbch\af31505\loch\f4 v.1.0.2045.28}{\rtlch\fcs1 \ab\af4\afs22 \ltrch\fcs0 \b\fs22\cf25\kerning1\insrsid9658238 -\par }\pard \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\insrsid9658238 \hich\af4\dbch\af31505\loch\f4 Copyright (C) Microsoft Corporation. All rights reserved. -\par -\par \hich\af4\dbch\af31505\loch\f4 Redistribution and use in source and binary forms, with or without -\par \hich\af4\dbch\af31505\loch\f4 modification, are permitted provided that the following conditions are -\par \hich\af4\dbch\af31505\loch\f4 met: -\par -\par \hich\af4\dbch\af31505\loch\f4 * Redistribut\hich\af4\dbch\af31505\loch\f4 ions of source code must retain the above copyright -\par \hich\af4\dbch\af31505\loch\f4 notice, this list of conditions and the following disclaimer. -\par \hich\af4\dbch\af31505\loch\f4 * Redistributions in binary form must reproduce the above -\par \hich\af4\dbch\af31505\loch\f4 copyright notice, this list of conditions and the following disclaimer -\par \hich\af4\dbch\af31505\loch\f4 in the doc\hich\af4\dbch\af31505\loch\f4 umentation and/or other materials provided with the -\par \hich\af4\dbch\af31505\loch\f4 distribution. -\par \hich\af4\dbch\af31505\loch\f4 * The name of Microsoft Corporation, or the names of its contributors -\par \hich\af4\dbch\af31505\loch\f4 may not be used to endorse or promote products derived from this -\par \hich\af4\dbch\af31505\loch\f4 software without specific prior written permission. -\par -\par \hich\af4\dbch\af31505\loch\f4 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -\par \hich\af4\dbch\af31505\loch\f4 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -\par \hich\af4\dbch\af31505\loch\f4 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -\par \hich\af4\dbch\af31505\loch\f4 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -\par \hich\af4\dbch\af31505\loch\f4 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -\par \hich\af4\dbch\af31505\loch\f4 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (I\hich\af4\dbch\af31505\loch\f4 NCLUDING, BUT NOT -\par \hich\af4\dbch\af31505\loch\f4 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -\par \hich\af4\dbch\af31505\loch\f4 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -\par \hich\af4\dbch\af31505\loch\f4 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -\par \hich\af4\dbch\af31505\loch\f4 (INCLUDING NEGLIGENCE OR OTHER\hich\af4\dbch\af31505\loch\f4 WISE) ARISING IN ANY WAY OUT OF THE USE -\par \hich\af4\dbch\af31505\loch\f4 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -\par }{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\insrsid1784394 -\par }\pard \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid16215368 {\rtlch\fcs1 \ab\af4\afs22 \ltrch\fcs0 \b\fs22\cf25\kerning1\insrsid16215368\charrsid16215368 \hich\af4\dbch\af31505\loch\f4 Lucene.Net v.4.8.0-beta00016 -\par \hich\af4\dbch\af31505\loch\f4 Lucene.Net.Analysis.Common v.4.8.0-beta00016 -\par \hich\af4\dbch\af31505\loch\f4 Lucene.Net.Queries v.4.8.0-b\hich\af4\dbch\af31505\loch\f4 eta00016 -\par \hich\af4\dbch\af31505\loch\f4 Lucene.Net.QueryParser v.4.8.0-beta00016 -\par }\pard \ltrpar\ql \li0\ri0\sl288\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid16215368 {\rtlch\fcs1 \ab\af4\afs22 \ltrch\fcs0 \b\fs22\cf25\kerning1\insrsid16215368\charrsid16215368 \hich\af4\dbch\af31505\loch\f4 -Lucene.Net.Sandbox v.4.8.0-beta00016}{\rtlch\fcs1 \ab\af4\afs22 \ltrch\fcs0 \b\fs22\cf25\kerning1\insrsid16215368 -\par }{\field\fldedit{\*\fldinst {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\insrsid1784394 \hich\af4\dbch\af31505\loch\f4 HYPERLINK "https://lucenenet.apache.org/"}{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\insrsid1784394 {\*\datafield -00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b54000000680074007400700073003a002f002f006c007500630065006e0065006e00650074002e006100700061006300680065002e006f00720067002f000000795881f43b1d7f48af2c825dc485276300000000a5ab -0003804f65150000009200ff004c782e0061}}}{\fldrslt {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\insrsid11167982\charrsid11167982 \hich\af4\dbch\af31505\loch\f4 https://lucenenet.}{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 -\fs22\ul\cf26\insrsid11167982\charrsid3998130 \hich\af4\dbch\af31505\loch\f4 apache}{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\insrsid11167982\charrsid11167982 \hich\af4\dbch\af31505\loch\f4 .org/}{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 -\fs22\ul\cf26\insrsid1784394 -\par }\pard \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid1784394 }}\pard\plain \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid1784394 \rtlch\fcs1 \af4\afs24\alang1025 \ltrch\fcs0 -\fs24\lang1033\langfe2052\loch\af4\hich\af4\dbch\af31505\cgrid\langnp1033\langfenp2052 \sectd \ltrsect\linex0\sectdefaultcl\sftnbj {\field{\*\fldinst {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\insrsid14298549 \hich\af4\dbch\af31505\loch\f4 - HYPERLINK "}{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\insrsid14298549\charrsid1784394 \hich\af4\dbch\af31505\loch\f4 https://github.com/apache/lucenenet/blob/master/LICENSE.txt}{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\insrsid14298549 -\hich\af4\dbch\af31505\loch\f4 " }{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\insrsid3998130 {\*\datafield -00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b90000000680074007400700073003a002f002f006700690074006800750062002e0063006f006d002f006100700061006300680065002f006c007500630065006e0065006e00650074002f0062006c006f0062002f00 -6d00610073007400650072002f004c004900430045004e00530045002e007400780074000000795881f43b1d7f48af2c825dc485276300000000a5ab0003580000d46bcc00000049000000}}}{\fldrslt {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \cs19\fs22\ul\cf21\insrsid14298549\charrsid14700233 -\hich\af4\dbch\af31505\loch\f4 https://github.com/apache/lucenenet/blob/master/LICENSE.txt}}}\sectd \ltrsect\linex0\sectdefaultcl\sftnbj {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\insrsid1784394 -\par }\pard \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid14298549 {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\insrsid14298549\charrsid14298549 \hich\af4\dbch\af31505\loch\f4 Copyright 2022 Apache Lucene.NET -\par -\par \hich\af4\dbch\af31505\loch\f4 Licensed under the Apac\hich\af4\dbch\af31505\loch\f4 he License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at}{\rtlch\fcs1 -\af4\afs22 \ltrch\fcs0 \fs22\cf25\insrsid14298549 \hich\af4\dbch\af31505\loch\f4 }{\field{\*\fldinst {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\insrsid14298549 \hich\af4\dbch\af31505\loch\f4 HYPERLINK "}{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 -\fs22\cf25\insrsid14298549\charrsid14298549 \hich\af4\dbch\af31505\loch\f4 http://www.apache.org/licenses/LICENSE-2.0}{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\insrsid14298549 \hich\af4\dbch\af31505\loch\f4 " }{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 -\fs22\cf25\insrsid3998130 {\*\datafield -00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b6e00000068007400740070003a002f002f007700770077002e006100700061006300680065002e006f00720067002f006c006900630065006e007300650073002f004c004900430045004e00530045002d0032002e00 -30000000795881f43b1d7f48af2c825dc485276300000000a5ab00030000380000b8586400ed00ae00}}}{\fldrslt {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \cs19\fs22\ul\cf21\insrsid14298549\charrsid14700233 \hich\af4\dbch\af31505\loch\f4 -http://www.apache.org/licenses/LICENSE-2.0}}}\sectd \ltrsect\linex0\sectdefaultcl\sftnbj {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\insrsid14298549 \hich\af4\dbch\af31505\loch\f4 }{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 -\fs22\cf25\insrsid14298549\charrsid14298549 \hich\af4\dbch\af31505\loch\f4 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT W\hich\af4\dbch\af31505\loch\f4 -ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.}{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\insrsid14298549 -\par }{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\insrsid3998130 -\par }\pard \ltrpar\ql \li0\ri0\sl288\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid3998130 {\rtlch\fcs1 \ab\af4\afs22 \ltrch\fcs0 \b\fs22\cf25\lang1036\langfe2052\kerning1\langnp1036\insrsid3998130\charrsid15220234 -\hich\af4\dbch\af31505\loch\f4 Microsoft.Extensions.Configuration.Json v6.0.0 -\par }{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\kerning1\insrsid3998130\charrsid3998130 \hich\af4\dbch\af31505\loch\f4 The MIT License (MIT) -\par }{\field\flddirty{\*\fldinst {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf26\kerning1\insrsid3998130\charrsid4611777 \hich\af4\dbch\af31505\loch\f4 HYPERLINK "https://github.com/dotnet/runtime/blob/main/LICENSE.TXT" }{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 -\fs22\cf26\kerning1\insrsid4611777\charrsid4611777 {\*\datafield -00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b88000000680074007400700073003a002f002f006700690074006800750062002e0063006f006d002f0064006f0074006e00650074002f00720075006e00740069006d0065002f0062006c006f0062002f006d006100 -69006e002f004c004900430045004e00530045002e005400580054000000795881f43b1d7f48af2c825dc485276300000000a5ab00030000001100000015005c145c}}}{\fldrslt {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \cs19\fs22\ul\cf26\kerning1\insrsid3998130\charrsid4611777 -\hich\af4\dbch\af31505\loch\f4 https://github.com/dotnet/runtime/blob/main/LICENSE.TX\hich\af4\dbch\af31505\loch\f4 T}}}\sectd \ltrsect\linex0\sectdefaultcl\sftnbj {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf26\kerning1\insrsid3998130\charrsid4611777 - -\par }{\rtlch\fcs1 \ab\af4\afs22 \ltrch\fcs0 \b\fs22\cf26\kerning1\insrsid4611777 -\par }\pard \ltrpar\ql \li0\ri0\sl288\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid4611777 {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\kerning1\insrsid4611777\charrsid4611777 \hich\af4\dbch\af31505\loch\f4 -Copyright (c) .NET Foundation and Contributors -\par \hich\af4\dbch\af31505\loch\f4 All rights reserved. -\par -\par \hich\af4\dbch\af31505\loch\f4 Permission is hereby granted, free of charge, to any person obtaining a copy}{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\kerning1\insrsid4611777 \hich\af4\dbch\af31505\loch\f4 }{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 -\fs22\cf25\kerning1\insrsid4611777\charrsid4611777 \hich\af4\dbch\af31505\loch\f4 of this software and associated documentation files (the "Software"), to deal}{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\kerning1\insrsid4611777 -\hich\af4\dbch\af31505\loch\f4 }{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\kerning1\insrsid4611777\charrsid4611777 \hich\af4\dbch\af31505\loch\f4 in the Software without restriction, including without limitation the rights}{\rtlch\fcs1 \af4\afs22 -\ltrch\fcs0 \fs22\cf25\kerning1\insrsid4611777 \hich\af4\dbch\af31505\loch\f4 }{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\kerning1\insrsid4611777\charrsid4611777 \hich\af4\dbch\af31505\loch\f4 -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell}{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\kerning1\insrsid4611777 \hich\af4\dbch\af31505\loch\f4 }{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 -\fs22\cf25\kerning1\insrsid4611777\charrsid4611777 \hich\af4\dbch\af31505\loch\f4 copies of the Software, and\hich\af4\dbch\af31505\loch\f4 to permit persons to whom the Software is}{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\kerning1\insrsid4611777 -\hich\af4\dbch\af31505\loch\f4 }{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\kerning1\insrsid4611777\charrsid4611777 \hich\af4\dbch\af31505\loch\f4 furnished to do so, subject to the following conditions: -\par -\par \hich\af4\dbch\af31505\loch\f4 The above copyright notice and this permission notice shall be included in all}{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\kerning1\insrsid4611777 \hich\af4\dbch\af31505\loch\f4 }{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 -\fs22\cf25\kerning1\insrsid4611777\charrsid4611777 \hich\af4\dbch\af31505\loch\f4 copies or substantial portions of the Software. -\par -\par \hich\af4\dbch\af31505\loch\f4 THE SOFTWARE IS PROVIDED "A\hich\af4\dbch\af31505\loch\f4 S IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR}{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\kerning1\insrsid4611777 \hich\af4\dbch\af31505\loch\f4 }{\rtlch\fcs1 -\af4\afs22 \ltrch\fcs0 \fs22\cf25\kerning1\insrsid4611777\charrsid4611777 \hich\af4\dbch\af31505\loch\f4 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,}{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\kerning1\insrsid4611777 -\hich\af4\dbch\af31505\loch\f4 }{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\kerning1\insrsid4611777\charrsid4611777 \hich\af4\dbch\af31505\loch\f4 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE}{\rtlch\fcs1 \af4\afs22 -\ltrch\fcs0 \fs22\cf25\kerning1\insrsid4611777 \hich\af4\dbch\af31505\loch\f4 }{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\kerning1\insrsid4611777\charrsid4611777 \hich\af4\dbch\af31505\loch\f4 -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAG\hich\af4\dbch\af31505\loch\f4 ES OR OTHER}{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\kerning1\insrsid4611777 \hich\af4\dbch\af31505\loch\f4 }{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 -\fs22\cf25\kerning1\insrsid4611777\charrsid4611777 \hich\af4\dbch\af31505\loch\f4 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,}{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\kerning1\insrsid4611777 -\hich\af4\dbch\af31505\loch\f4 }{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\kerning1\insrsid4611777\charrsid4611777 \hich\af4\dbch\af31505\loch\f4 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS }{\rtlch\fcs1 \af4\afs22 -\ltrch\fcs0 \fs22\cf25\kerning1\insrsid4611777 \hich\af4\dbch\af31505\loch\f4 I}{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\kerning1\insrsid4611777\charrsid4611777 \hich\af4\dbch\af31505\loch\f4 N THE}{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 -\fs22\cf25\kerning1\insrsid4611777 \hich\af4\dbch\af31505\loch\f4 }{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\kerning1\insrsid4611777\charrsid4611777 \hich\af4\dbch\af31505\loch\f4 SOFTWARE.}{\rtlch\fcs1 \ab\af4\afs22 \ltrch\fcs0 -\b\fs22\cf26\kerning1\insrsid4611777\charrsid3998130 -\par }\pard \ltrpar\ql \li0\ri0\sl288\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid3998130 {\rtlch\fcs1 \ab\af4\afs22 \ltrch\fcs0 \b\fs22\cf25\kerning1\insrsid3998130 -\par }{\rtlch\fcs1 \ab\af4\afs22 \ltrch\fcs0 \b\fs22\cf25\kerning1\insrsid3998130\charrsid3998130 \hich\af4\dbch\af31505\loch\f4 CsvHelper v30.0.1}{\rtlch\fcs1 \ab\af4\afs22 \ltrch\fcs0 \b\fs22\cf25\kerning1\insrsid3998130 -\par }{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\kerning1\insrsid3998130\charrsid3998130 \hich\af4\dbch\af31505\loch\f4 Apache 2.0 -\par }{\field\flddirty{\*\fldinst {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf26\kerning1\insrsid3998130\charrsid4611777 \hich\af4\dbch\af31505\loch\f4 HYPERLINK "https://github.com/JoshClose/CsvHelper/blob/master/LICENSE.txt" }{\rtlch\fcs1 \af4\afs22 -\ltrch\fcs0 \fs22\cf26\kerning1\insrsid4611777\charrsid4611777 {\*\datafield -00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b96000000680074007400700073003a002f002f006700690074006800750062002e0063006f006d002f004a006f007300680043006c006f00730065002f00430073007600480065006c007000650072002f0062006c00 -6f0062002f006d00610073007400650072002f004c004900430045004e00530045002e007400780074000000795881f43b1d7f48af2c825dc485276300000000a5ab0003000087018f13060000780020}}}{\fldrslt {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 -\cs19\fs22\ul\cf26\kerning1\insrsid3998130\charrsid4611777 \hich\af4\dbch\af31505\loch\f4 https://github.com/JoshClose/CsvHelper/bl\hich\af4\dbch\af31505\loch\f4 ob/master/LICENSE.txt}}}\sectd \ltrsect\linex0\sectdefaultcl\sftnbj {\rtlch\fcs1 \af4\afs22 -\ltrch\fcs0 \fs22\cf26\kerning1\insrsid3998130\charrsid4611777 -\par }\pard \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid4611777 {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\insrsid4611777 -\par }\pard \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid12653622 {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\insrsid4611777\charrsid14298549 \hich\af4\dbch\af31505\loch\f4 -Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at}{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\insrsid4611777 -\hich\af4\dbch\af31505\loch\f4 }{\field\flddirty{\*\fldinst {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\insrsid4611777 \hich\af4\dbch\af31505\loch\f4 HYPERLINK "}{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\insrsid4611777\charrsid14298549 -\hich\af4\dbch\af31505\loch\f4 http://www.apache.org/licenses/LICENSE-2.0}{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\insrsid4611777 \hich\af4\dbch\af31505\loch\f4 " }{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\insrsid4611777 {\*\datafield -00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b6e00000068007400740070003a002f002f007700770077002e006100700061006300680065002e006f00720067002f006c006900630065006e007300650073002f004c004900430045004e00530045002d0032002e00 -30000000795881f43b1d7f48af2c825dc485276300000000a5ab000300ff00003701ff660073000000}}}{\fldrslt {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \cs19\fs22\ul\cf21\insrsid4611777\charrsid14700233 \hich\af4\dbch\af31505\loch\f4 http://www.apache.org/licenses/LICENSE-2.0 -}}}\sectd \ltrsect\linex0\sectdefaultcl\sftnbj {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\insrsid4611777 \hich\af4\dbch\af31505\loch\f4 }{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\insrsid4611777\charrsid14298549 \hich\af4\dbch\af31505\loch\f4 -Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language gover -\hich\af4\dbch\af31505\loch\f4 n\hich\af4\dbch\af31505\loch\f4 ing permissions and limitations under the License.}{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\insrsid12653622\charrsid12653622 -\par }\pard \ltrpar\ql \li0\ri0\sl288\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid3998130 {\rtlch\fcs1 \ab\af4\afs22 \ltrch\fcs0 \b\fs22\cf25\kerning1\insrsid3998130 -\par }\pard \ltrpar\ql \li0\ri0\sl288\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid4484117 {\rtlch\fcs1 \ab\af4\afs22 \ltrch\fcs0 \b\fs22\cf25\kerning1\insrsid4484117\charrsid9377761 \hich\af4\dbch\af31505\loch\f4 Prism.Core v8.1.97 -\par }{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\kerning1\insrsid4484117\charrsid9377761 \hich\af4\dbch\af31505\loch\f4 The MIT License (MIT) -\par }{\rtlch\fcs1 \af4 \ltrch\fcs0 \cs19\ul\cf26\insrsid4484117\charrsid9377761 \hich\af4\dbch\af31505\loch\f4 https://github.com/PrismLibrary/Prism/blob/master/LICENSE.txt -\par }{\rtlch\fcs1 \ab\af4\afs22 \ltrch\fcs0 \b\fs22\cf25\kerning1\insrsid4484117\charrsid9377761 -\par }\pard \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid4484117 {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\insrsid4484117\charrsid12335516 \hich\af4\dbch\af31505\loch\f4 Copyright (c) Prism Library -\par -\par \hich\af4\dbch\af31505\loch\f4 All rights reserved. Permission is hereby granted, free of charge, to a\hich\af4\dbch\af31505\loch\f4 -ny person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -\hich\af4\dbch\af31505\loch\f4 \hich\af4\dbch\af31505\loch\f4 copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: -\par -\par \hich\af4\dbch\af31505\loch\f4 The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. -\par -\par \hich\af4\dbch\af31505\loch\f4 -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -\hich\af4\dbch\af31505\loch\f4 LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -\par }\pard \ltrpar\ql \li0\ri0\sl288\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid3998130 {\field\fldedit{\*\fldinst {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\insrsid3998130 \hich\af4\dbch\af31505\loch\f4 -HYPERLINK "https://lucenenet.apache.org/"}{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\insrsid3998130 {\*\datafield -00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b54000000680074007400700073003a002f002f006c007500630065006e0065006e00650074002e006100700061006300680065002e006f00720067002f000000795881f43b1d7f48af2c825dc485276300000000a5ab -0003804f657a0000000500010000005c0049}}}{\fldrslt {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\insrsid3998130 -\par }\pard \ltrpar\ql \li0\ri0\sl288\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid12653622 }}\pard\plain \ltrpar\ql \li0\ri0\sl288\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid12653622 \rtlch\fcs1 \af4\afs24\alang1025 -\ltrch\fcs0 \fs24\lang1033\langfe2052\loch\af4\hich\af4\dbch\af31505\cgrid\langnp1033\langfenp2052 \sectd \ltrsect\linex0\sectdefaultcl\sftnbj {\rtlch\fcs1 \ab\af4\afs22 \ltrch\fcs0 \b\fs22\cf25\kerning1\insrsid12653622 \hich\af4\dbch\af31505\loch\f4 -MimeMapping}{\rtlch\fcs1 \ab\af4\afs22 \ltrch\fcs0 \b\fs22\cf25\kerning1\insrsid12653622\charrsid3998130 \hich\af4\dbch\af31505\loch\f4 v}{\rtlch\fcs1 \ab\af4\afs22 \ltrch\fcs0 \b\fs22\cf25\kerning1\insrsid12653622 \hich\af4\dbch\af31505\loch\f4 2.}{ -\rtlch\fcs1 \ab\af4\afs22 \ltrch\fcs0 \b\fs22\cf25\kerning1\insrsid12653622\charrsid3998130 0.0}{\rtlch\fcs1 \ab\af4\afs22 \ltrch\fcs0 \b\fs22\cf25\kerning1\insrsid12653622 -\par }{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\kerning1\insrsid12653622 \hich\af4\dbch\af31505\loch\f4 MIT License}{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\kerning1\insrsid12653622\charrsid3998130 -\par }\pard \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid12653622 {\field\flddirty{\*\fldinst {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf26\kerning1\insrsid12653622 \hich\af4\dbch\af31505\loch\f4 HYPERLINK "}{\rtlch\fcs1 -\af4\afs22 \ltrch\fcs0 \fs22\cf26\kerning1\insrsid12653622\charrsid9731339 \hich\af4\dbch\af31505\loch\f4 https://licenses.nuget.org/MIT}{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf26\kerning1\insrsid12653622 \hich\af4\dbch\af31505\loch\f4 " }{ -\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf26\kerning1\insrsid12653622 {\*\datafield -00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b56000000680074007400700073003a002f002f006c006900630065006e007300650073002e006e0075006700650074002e006f00720067002f004d00490054000000795881f43b1d7f48af2c825dc485276300000000 -a5ab00030087006e006d1e63}}}{\fldrslt {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \cs19\fs22\ul\cf21\kerning1\insrsid12653622\charrsid10299691 \hich\af4\dbch\af31505\loch\f4 https://licenses.nuget.org/MIT}}}\sectd \ltrsect\linex0\sectdefaultcl\sftnbj {\rtlch\fcs1 -\af4\afs22 \ltrch\fcs0 \fs22\cf26\kerning1\insrsid12653622 -\par }{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\insrsid12653622\charrsid9731339 \hich\af4\dbch\af31505\loch\f4 Copyright (c) }{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\insrsid12653622 -\par }{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\insrsid12653622\charrsid9731339 -\par \hich\af4\dbch\af31505\loch\f4 Permission is hereby granted, free of charg\hich\af4\dbch\af31505\loch\f4 e, to any person obtaining a copy of\~}{\rtlch\fcs1 \ai\af4\afs22 \ltrch\fcs0 \i\fs22\cf25\insrsid12653622\charrsid9731339 -\hich\af4\dbch\af31505\loch\f4 this software and associated documentation files}{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\insrsid12653622\charrsid9731339 \~\hich\af4\dbch\af31505\loch\f4 -(the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/o\hich\af4\dbch\af31505\loch\f4 -r sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: -\par \hich\af4\dbch\af31505\loch\f4 The above copyright notice and this permission notice\~}{\rtlch\fcs1 \ai\af4\afs22 \ltrch\fcs0 \i\fs22\cf25\insrsid12653622\charrsid9731339 \hich\af4\dbch\af31505\loch\f4 (including the next paragraph)}{\rtlch\fcs1 -\af4\afs22 \ltrch\fcs0 \fs22\cf25\insrsid12653622\charrsid9731339 \~\hich\af4\dbch\af31505\loch\f4 shall be included in all copies or su\hich\af4\dbch\af31505\loch\f4 bstantial portions of the Software.}{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 -\fs22\cf25\insrsid12653622 -\par }{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\insrsid12653622\charrsid9731339 -\par \hich\af4\dbch\af31505\loch\f4 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\~}{ -\rtlch\fcs1 \ai\af4\afs22 \ltrch\fcs0 \i\fs22\cf25\insrsid12653622\charrsid9731339 \hich\af4\dbch\af31505\loch\f4 THE AUTHORS OR COPYRIGHT HOLDERS}{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\insrsid12653622\charrsid9731339 \~ -\hich\af4\dbch\af31505\loch\f4 BE \hich\af4\dbch\af31505\loch\f4 -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.}{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 -\cs19\fs22\ul\cf21\insrsid12653622\charrsid9731339 -\par }\pard \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid3998130 {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\insrsid3998130 -\par }\pard \ltrpar\ql \li0\ri0\sl288\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid3346706 {\rtlch\fcs1 \ab\af4\afs22 \ltrch\fcs0 \b\fs22\cf25\kerning1\insrsid3346706\charrsid15019625 \hich\af4\dbch\af31505\loch\f4 -DotNetProjects.Extended.Wpf.Toolkit v5.0.103 -\par }{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\kerning1\insrsid3346706\charrsid15019625 \hich\af4\dbch\af31505\loch\f4 Micro\hich\af4\dbch\af31505\loch\f4 soft Public License -\par }\pard \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid3346706 {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\ul\cf26\insrsid3346706\charrsid15019625 \hich\af4\dbch\af31505\loch\f4 -https://github.com/dotnetprojects/WpfExtendedToolkit/blob/Extended/LICENSE.md -\par -\par }\pard \ltrpar\ql \li0\ri0\sl288\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid3346706 {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\kerning1\insrsid3346706\charrsid15019625 \hich\af4\dbch\af31505\loch\f4 -This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the sof\hich\af4\dbch\af31505\loch\f4 tware. -\par -\par \hich\af4\dbch\af31505\loch\f4 1. Definitions -\par \hich\af4\dbch\af31505\loch\f4 -The terms "reproduce," "reproduction," "derivative works," and "distribution" have the same meaning here as under U.S. copyright law. A "contribution" is the original software, or any additions or changes to the software. A "contribu -\hich\af4\dbch\af31505\loch\f4 tor" is any person that distributes its contribution under this license. "Licensed patents" are a contributor's patent claims that read directly on its contribution. -\par \hich\af4\dbch\af31505\loch\f4 2. Grant of Rights -\par \hich\af4\dbch\af31505\loch\f4 (A) Copyright Grant- Subject to the terms of this license, including th\hich\af4\dbch\af31505\loch\f4 -e license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any d -\hich\af4\dbch\af31505\loch\f4 e\hich\af4\dbch\af31505\loch\f4 rivative works that you create. -\par \hich\af4\dbch\af31505\loch\f4 (B) Patent Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents t -\hich\af4\dbch\af31505\loch\f4 o make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. -\par \hich\af4\dbch\af31505\loch\f4 3. Conditions and Limitations -\par \hich\af4\dbch\af31505\loch\f4 (A) No Trademark License- This license does not grant \hich\af4\dbch\af31505\loch\f4 you rights to use any contributors' name, logo, or trademarks. -\par \hich\af4\dbch\af31505\loch\f4 (B) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. -\par \hich\af4\dbch\af31505\loch\f4 (C) If you distribute any portion of the software, you must ret\hich\af4\dbch\af31505\loch\f4 ain all copyright, patent, trademark, and attribution notices that are present in the software. -\par \hich\af4\dbch\af31505\loch\f4 (D) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with y\hich\af4\dbch\af31505\loch\f4 -our distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. -\par \hich\af4\dbch\af31505\loch\f4 (E) The software is licensed "as-is." You bear the risk of using it. The contributors give \hich\af4\dbch\af31505\loch\f4 -no express warranties, guarantees, or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantabi -\hich\af4\dbch\af31505\loch\f4 l\hich\af4\dbch\af31505\loch\f4 ity, fitness for a particular purpose and non-infringement. -\par }\pard \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid3998130 {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\insrsid3346706 -\par }\pard \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid1060736 {\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\insrsid1060736\charrsid1060736 \hich\af4\dbch\af31505\loch\f4 CastleCore v.5.1.1 -\par \hich\af4\dbch\af31505\loch\f4 APACHE 2.0 -\par \hich\af4\dbch\af31505\loch\f4 Copyright 2004-2021 Castle Project - http://www.castleproject.org/ -\par -\par \hich\af4\dbch\af31505\loch\f4 https://github.com/castleproject/Core/blob/master/LICENSE -\par -\par \hich\af4\dbch\af31505\loch\f4 DynamicLanguageRuntime v.1.2.2 -\par \hich\af4\dbch\af31505\loch\f4 APACHE 2.0 -\par \hich\af4\dbch\af31505\loch\f4 https://github.com/IronLanguages/dlr/blob/master/LICENSE -\par -\par \hich\af4\dbch\af31505\loch\f4 Copyright (c) .NET Foundation and Contributors -\par \hich\af4\dbch\af31505\loch\f4 All Rights Reserved -\par -\par \hich\af4\dbch\af31505\loch\f4 Licensed under the\hich\af4\dbch\af31505\loch\f4 - Apache License, Version 2.0 (the ""License""); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, -\hich\af4\dbch\af31505\loch\f4 s\hich\af4\dbch\af31505\loch\f4 -oftware distributed under the License is distributed on an ""AS IS"" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. -\par -\par \hich\af4\dbch\af31505\loch\f4 HarfBuz\hich\af4\dbch\af31505\loch\f4 zSharp v.2.8.2.4-preview.84 -\par \hich\af4\dbch\af31505\loch\f4 HarfBuzzSharp.NativeAssets.macOS v.2.8.2.4-preview.84 -\par \hich\af4\dbch\af31505\loch\f4 HarfBuzzSharp.NativeAssets.Win32 v.2.8.2.4-preview.84 -\par \hich\af4\dbch\af31505\loch\f4 Copyright (c) 2015-2016 Xamarin, Inc. -\par \hich\af4\dbch\af31505\loch\f4 Copyright (c) 2017-2018 Microsoft Corporation. -\par -\par \hich\af4\dbch\af31505\loch\f4 Permission is hereby granted, free\hich\af4\dbch\af31505\loch\f4 - of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublice -\hich\af4\dbch\af31505\loch\f4 n\hich\af4\dbch\af31505\loch\f4 se, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: -\par -\par \hich\af4\dbch\af31505\loch\f4 The above copyright notice and this permission notice shall be included in all copies or substantial portions of\hich\af4\dbch\af31505\loch\f4 the Software. -\par -\par \hich\af4\dbch\af31505\loch\f4 -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYR -\hich\af4\dbch\af31505\loch\f4 IGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -\par -\par \hich\af4\dbch\af31505\loch\f4 SkiaSharp v.2.88.4-preview.84 -\par \hich\af4\dbch\af31505\loch\f4 Skia\hich\af4\dbch\af31505\loch\f4 Sharp.HarfBuzz v.2.88.4-preview.84 -\par \hich\af4\dbch\af31505\loch\f4 SkiaSharp.NativeAssets.macOS v.2.88.4-preview.84 -\par \hich\af4\dbch\af31505\loch\f4 SkiaSharp.NativeAssets.Win32 v.2.88.4-preview.84 -\par \hich\af4\dbch\af31505\loch\f4 SkiaSharp.Views.Desktop.Common v.2.88.4-preview.84 -\par \hich\af4\dbch\af31505\loch\f4 SkiaSharp.Views.WPF v.2.88.4-preview.84 -\par \hich\af4\dbch\af31505\loch\f4 Copyright (c) 2015-2016 Xamarin, Inc. -\par \hich\af4\dbch\af31505\loch\f4 Copyright (c) 2017-2018 Microsoft Corporation. -\par -\par \hich\af4\dbch\af31505\loch\f4 Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (\hich\af4\dbch\af31505\loch\f4 -the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished -\hich\af4\dbch\af31505\loch\f4 \hich\af4\dbch\af31505\loch\f4 to do so, subject to the following conditions: -\par -\par \hich\af4\dbch\af31505\loch\f4 The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. -\par -\par \hich\af4\dbch\af31505\loch\f4 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI\hich\af4\dbch\af31505\loch\f4 -ED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTR -\hich\af4\dbch\af31505\loch\f4 A\hich\af4\dbch\af31505\loch\f4 CT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -\par -\par \hich\af4\dbch\af31505\loch\f4 SoapFormatter v1.0.11 -\par \hich\af4\dbch\af31505\loch\f4 https://github.com/novotnyllc/SoapFormatter/blob/main/LICENSE -\par -\par \hich\af4\dbch\af31505\loch\f4 In general, the runtime and its class librari\hich\af4\dbch\af31505\loch\f4 es are licensed under the -\par \hich\af4\dbch\af31505\loch\f4 terms of the MIT license, and some third party code is licensed under -\par \hich\af4\dbch\af31505\loch\f4 the 3-clause BSD license. See the file "PATENTS.TXT" for Microsoft's -\par \hich\af4\dbch\af31505\loch\f4 patent grant on the Mono codebase. -\par -\par \hich\af4\dbch\af31505\loch\f4 coverlet.collector v.3.1.2 -\par \hich\af4\dbch\af31505\loch\f4 The MIT License (MIT) -\par \hich\af4\dbch\af31505\loch\f4 https\hich\af4\dbch\af31505\loch\f4 ://github.com/coverlet-coverage/coverlet/blob/master/LICENSE -\par -\par \hich\af4\dbch\af31505\loch\f4 Copyright (c) 2018 Toni Solarin-Sodara -\par -\par \hich\af4\dbch\af31505\loch\f4 Permission is hereby granted, free of charge, to any person obtaining a copy -\par \hich\af4\dbch\af31505\loch\f4 of this software and associated documentation files (the "Software"), to deal -\par \hich\af4\dbch\af31505\loch\f4 in the Software without restriction, including without limitation the rights -\par \hich\af4\dbch\af31505\loch\f4 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -\par \hich\af4\dbch\af31505\loch\f4 copies of the Software, and to permit persons to whom the Software is -\par \hich\af4\dbch\af31505\loch\f4 furnished to do so, subject to the following conditions: -\par -\par \hich\af4\dbch\af31505\loch\f4 The above copyright notice and this permission notice shall be included in all -\par \hich\af4\dbch\af31505\loch\f4 copies or substantial portions of the Software. -\par -\par \hich\af4\dbch\af31505\loch\f4 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRES\hich\af4\dbch\af31505\loch\f4 S OR -\par \hich\af4\dbch\af31505\loch\f4 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -\par \hich\af4\dbch\af31505\loch\f4 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -\par \hich\af4\dbch\af31505\loch\f4 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -\par \hich\af4\dbch\af31505\loch\f4 LIABILITY, WHETHER IN AN ACTION\hich\af4\dbch\af31505\loch\f4 OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -\par \hich\af4\dbch\af31505\loch\f4 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -\par \hich\af4\dbch\af31505\loch\f4 SOFTWARE. -\par -\par \hich\af4\dbch\af31505\loch\f4 J2N v.2.0.0 -\par \hich\af4\dbch\af31505\loch\f4 APACHE 2.0 -\par \hich\af4\dbch\af31505\loch\f4 https://github.com/NightOwl888/J2N/blob/main/LICENSE.txt -\par -\par \hich\af4\dbch\af31505\loch\f4 JUnitTestLogger v.1.1.0 -\par \hich\af4\dbch\af31505\loch\f4 MIT License -\par \hich\af4\dbch\af31505\loch\f4 htt\hich\af4\dbch\af31505\loch\f4 ps://github.com/syncromatics/JUnitTestLogger/blob/master/LICENSE -\par -\par \hich\af4\dbch\af31505\loch\f4 Copyright (c) 2017 GMV Syncromatics Engineering -\par -\par \hich\af4\dbch\af31505\loch\f4 Permission is hereby granted, free of charge, to any person obtaining a copy -\par \hich\af4\dbch\af31505\loch\f4 of this software and associated documentation files (the "Softwa\hich\af4\dbch\af31505\loch\f4 re"), to deal -\par \hich\af4\dbch\af31505\loch\f4 in the Software without restriction, including without limitation the rights -\par \hich\af4\dbch\af31505\loch\f4 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -\par \hich\af4\dbch\af31505\loch\f4 copies of the Software, and to permit persons to whom the Software is -\par \hich\af4\dbch\af31505\loch\f4 furnished to do so, s\hich\af4\dbch\af31505\loch\f4 ubject to the following conditions: -\par -\par \hich\af4\dbch\af31505\loch\f4 The above copyright notice and this permission notice shall be included in all -\par \hich\af4\dbch\af31505\loch\f4 copies or substantial portions of the Software. -\par -\par \hich\af4\dbch\af31505\loch\f4 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -\par \hich\af4\dbch\af31505\loch\f4 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -\par \hich\af4\dbch\af31505\loch\f4 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -\par \hich\af4\dbch\af31505\loch\f4 AUTHORS OR COPYRIGHT HOLDERS BE \hich\af4\dbch\af31505\loch\f4 LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -\par \hich\af4\dbch\af31505\loch\f4 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -\par \hich\af4\dbch\af31505\loch\f4 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -\par \hich\af4\dbch\af31505\loch\f4 SOFTWARE. -\par -\par \hich\af4\dbch\af31505\loch\f4 JunitXml.TestLogger v.3.0.124 -\par \hich\af4\dbch\af31505\loch\f4 MIT License -\par \hich\af4\dbch\af31505\loch\f4 https://\hich\af4\dbch\af31505\loch\f4 github.com/spekt/junit.testlogger/blob/master/LICENSE.md -\par -\par \hich\af4\dbch\af31505\loch\f4 Copyright (c) 2017-2018 -\par -\par \hich\af4\dbch\af31505\loch\f4 Permission is hereby granted, free of charge, to any person obtaining a copy -\par \hich\af4\dbch\af31505\loch\f4 of this software and associated documentation files (the "Software"), to deal -\par \hich\af4\dbch\af31505\loch\f4 in the Software wi\hich\af4\dbch\af31505\loch\f4 thout restriction, including without limitation the rights -\par \hich\af4\dbch\af31505\loch\f4 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -\par \hich\af4\dbch\af31505\loch\f4 copies of the Software, and to permit persons to whom the Software is -\par \hich\af4\dbch\af31505\loch\f4 furnished to do so, subject to the following conditio\hich\af4\dbch\af31505\loch\f4 ns: -\par -\par \hich\af4\dbch\af31505\loch\f4 The above copyright notice and this permission notice shall be included in all -\par \hich\af4\dbch\af31505\loch\f4 copies or substantial portions of the Software. -\par -\par \hich\af4\dbch\af31505\loch\f4 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -\par \hich\af4\dbch\af31505\loch\f4 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -\par \hich\af4\dbch\af31505\loch\f4 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -\par \hich\af4\dbch\af31505\loch\f4 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -\par \hich\af4\dbch\af31505\loch\f4 LIABILITY, WHETHER IN AN ACTION OF C\hich\af4\dbch\af31505\loch\f4 ONTRACT, TORT OR OTHERWISE, ARISING FROM, -\par \hich\af4\dbch\af31505\loch\f4 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -\par \hich\af4\dbch\af31505\loch\f4 SOFTWARE. -\par -\par \hich\af4\dbch\af31505\loch\f4 NUnit.Analyzers v.3.3.0 -\par \hich\af4\dbch\af31505\loch\f4 https://github.com/nunit/nunit.analyzers/blob/master/license.txt -\par -\par \hich\af4\dbch\af31505\loch\f4 Permission is hereby granted, free \hich\af4\dbch\af31505\loch\f4 of charge, to any person obtaining a copy -\par \hich\af4\dbch\af31505\loch\f4 of this software and associated documentation files (the "Software"), to deal -\par \hich\af4\dbch\af31505\loch\f4 in the Software without restriction, including without limitation the rights -\par \hich\af4\dbch\af31505\loch\f4 to use, copy, modify, merge, publish, distribute, sublicens\hich\af4\dbch\af31505\loch\f4 e, and/or sell -\par \hich\af4\dbch\af31505\loch\f4 copies of the Software, and to permit persons to whom the Software is -\par \hich\af4\dbch\af31505\loch\f4 furnished to do so, subject to the following conditions: -\par -\par \hich\af4\dbch\af31505\loch\f4 The above copyright notice and this permission notice shall be included in -\par \hich\af4\dbch\af31505\loch\f4 all copies or substantial portions of \hich\af4\dbch\af31505\loch\f4 the Software. -\par -\par \hich\af4\dbch\af31505\loch\f4 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -\par \hich\af4\dbch\af31505\loch\f4 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -\par \hich\af4\dbch\af31505\loch\f4 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -\par \hich\af4\dbch\af31505\loch\f4 AUTHORS OR COPYRI\hich\af4\dbch\af31505\loch\f4 GHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -\par \hich\af4\dbch\af31505\loch\f4 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -\par \hich\af4\dbch\af31505\loch\f4 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -\par \hich\af4\dbch\af31505\loch\f4 THE SOFTWARE. -\par -\par \hich\af4\dbch\af31505\loch\f4 NUnit3TestAdapter v.4.2.1 -\par \hich\af4\dbch\af31505\loch\f4 MIT License}{\rtlch\fcs1 \af4\afs22 \ltrch\fcs0 \fs22\cf25\insrsid1060736 -\par }{\*\themedata 504b030414000600080000002100e9de0fbfff0000001c020000130000005b436f6e74656e745f54797065735d2e786d6cac91cb4ec3301045f748fc83e52d4a -9cb2400825e982c78ec7a27cc0c8992416c9d8b2a755fbf74cd25442a820166c2cd933f79e3be372bd1f07b5c3989ca74aaff2422b24eb1b475da5df374fd9ad -5689811a183c61a50f98f4babebc2837878049899a52a57be670674cb23d8e90721f90a4d2fa3802cb35762680fd800ecd7551dc18eb899138e3c943d7e503b6 -b01d583deee5f99824e290b4ba3f364eac4a430883b3c092d4eca8f946c916422ecab927f52ea42b89a1cd59c254f919b0e85e6535d135a8de20f20b8c12c3b0 -0c895fcf6720192de6bf3b9e89ecdbd6596cbcdd8eb28e7c365ecc4ec1ff1460f53fe813d3cc7f5b7f020000ffff0300504b030414000600080000002100a5d6 -a7e7c0000000360100000b0000005f72656c732f2e72656c73848fcf6ac3300c87ef85bd83d17d51d2c31825762fa590432fa37d00e1287f68221bdb1bebdb4f -c7060abb0884a4eff7a93dfeae8bf9e194e720169aaa06c3e2433fcb68e1763dbf7f82c985a4a725085b787086a37bdbb55fbc50d1a33ccd311ba548b6309512 -0f88d94fbc52ae4264d1c910d24a45db3462247fa791715fd71f989e19e0364cd3f51652d73760ae8fa8c9ffb3c330cc9e4fc17faf2ce545046e37944c69e462 -a1a82fe353bd90a865aad41ed0b5b8f9d6fd010000ffff0300504b0304140006000800000021006b799616830000008a0000001c0000007468656d652f746865 -6d652f7468656d654d616e616765722e786d6c0ccc4d0ac3201040e17da17790d93763bb284562b2cbaebbf600439c1a41c7a0d29fdbd7e5e38337cedf14d59b -4b0d592c9c070d8a65cd2e88b7f07c2ca71ba8da481cc52c6ce1c715e6e97818c9b48d13df49c873517d23d59085adb5dd20d6b52bd521ef2cdd5eb9246a3d8b -4757e8d3f729e245eb2b260a0238fd010000ffff0300504b030414000600080000002100b6f4679893070000c9200000160000007468656d652f7468656d652f -7468656d65312e786d6cec59cd8b1bc915bf07f23f347d97f5d5ad8fc1f2a24fcfda33b6b164873dd648a5eef2547789aad28cc56208de532e81c026e49085bd -ed21842cecc22eb9e48f31d8249b3f22afaa5bdd5552c99e191c3061463074977eefd5afde7bf5de53d5ddcf5e26d4bbc05c1096f6fcfa9d9aefe174ce16248d -7afeb3d9a4d2f13d2151ba4094a5b8e76fb0f03fbbf7eb5fdd454732c609f6403e1547a8e7c752ae8eaa5531876124eeb0154ee1bb25e30992f0caa3ea82a34b -d09bd06aa3566b55134452df4b51026a1f2f97648ebd9952e9dfdb2a1f53784da5500373caa74a35b6243476715e5708b11143cabd0b447b3eccb3609733fc52 -fa1e4542c2173dbfa6fffceabdbb5574940b517940d6909be8bf5c2e17589c37f49c3c3a2b260d823068f50bfd1a40e53e6edc1eb7c6ad429f06a0f91c569a71 -b175b61bc320c71aa0ecd1a17bd41e35eb16ded0dfdce3dc0fd5c7c26b50a63fd8c34f2643b0a285d7a00c1feee1c3417730b2f56b50866fede1dbb5fe28685b -fa3528a6243ddf43d7c25673b85d6d0159327aec8477c360d26ee4ca4b144443115d6a8a254be5a1584bd00bc6270050408a24493db959e1259a43140f112567 -9c7827248a21f056286502866b8ddaa4d684ffea13e827ed5174849121ad780113b137a4f87862cec94af6fc07a0d537206f7ffef9cdeb1fdfbcfee9cd575fbd -79fdf77c6eadca923b466964cafdf2dd1ffef3cd6fbd7ffff0ed2f5fff319b7a172f4cfcbbbffdeedd3ffef93ef5b0e2d2146ffff4fdbb1fbf7ffbe7dfffebaf -5f3bb4f7393a33e1339260e13dc297de5396c0021dfcf119bf9ec42c46c494e8a791402952b338f48f656ca11f6d10450edc00db767cce21d5b880f7d72f2cc2 -d398af2571687c182716f094313a60dc6985876a2ec3ccb3751ab927e76b13f714a10bd7dc43945a5e1eaf579063894be530c616cd2714a5124538c5d253dfb1 -738c1dabfb8210cbaea764ce99604be97d41bc01224e93ccc899154da5d03149c02f1b1741f0b7659bd3e7de8051d7aa47f8c246c2de40d4417e86a965c6fb68 -2d51e252394309350d7e8264ec2239ddf0b9891b0b099e8e3065de78818570c93ce6b05ec3e90f21cdb8dd7e4a37898de4929cbb749e20c64ce4889d0f6394ac -5cd829496313fbb938871045de13265df05366ef10f50e7e40e941773f27d872f787b3c133c8b026a53240d4376beef0e57dccacf89d6ee8126157aae9f3c44a -b17d4e9cd131584756689f604cd1255a60ec3dfbdcc160c05696cd4bd20f62c82ac7d815580f901dabea3dc5027a25d5dcece7c91322ac909de2881de073bad9 -493c1b9426881fd2fc08bc6eda7c0ca52e7105c0633a3f37818f08f480102f4ea33c16a0c308ee835a9fc4c82a60ea5db8e375c32dff5d658fc1be7c61d1b8c2 -be04197c6d1948eca6cc7b6d3343d49aa00c9819822ec3956e41c4727f29a28aab165b3be596f6a62ddd00dd91d5f42424fd6007b4d3fb84ffbbde073a8cb77f -f9c6b10f3e4ebfe3566c25ab6b763a8792c9f14e7f7308b7dbd50c195f904fbfa919a175fa04431dd9cf58b73dcd6d4fe3ffdff73487f6f36d2773a8dfb8ed64 -7ce8306e3b99fc70e5e3743265f3027d8d3af0c80e7af4b14f72f0d46749289dca0dc527421ffc08f83db398c0a092d3279eb838055cc5f0a8ca1c4c60e1228e -b48cc799fc0d91f134462b381daafb4a492472d591f0564cc0a1911e76ea5678ba4e4ed9223becacd7d5c16656590592e5782d2cc6e1a04a66e856bb3cc02bd4 -6bb6913e68dd1250b2d721614c6693683a48b4b783ca48fa58178ce620a157f65158741d2c3a4afdd6557b2c805ae115f8c1edc1cff49e1f06200242701e07cd -f942f92973f5d6bbda991fd3d3878c69450034d8db08283ddd555c0f2e4fad2e0bb52b78da2261849b4d425b46377822869fc17974aad1abd0b8aeafbba54b2d -7aca147a3e08ad9246bbf33e1637f535c8ede6069a9a9982a6de65cf6f35430899395af5fc251c1ac363b282d811ea3717a211dcbccc25cf36fc4d32cb8a0b39 -4222ce0cae934e960d122231f728497abe5a7ee1069aea1ca2b9d51b90103e59725d482b9f1a3970baed64bc5ce2b934dd6e8c284b67af90e1b35ce1fc568bdf -1cac24d91adc3d8d1797de195df3a708422c6cd795011744c0dd413db3e682c0655891c8caf8db294c79da356fa3740c65e388ae62945714339967709dca0b3a -faadb081f196af190c6a98242f8467912ab0a651ad6a5a548d8cc3c1aafb6121653923699635d3ca2aaa6abab39835c3b60cecd8f26645de60b53531e434b3c2 -67a97b37e576b7b96ea74f28aa0418bcb09fa3ea5ea12018d4cac92c6a8af17e1a56393b1fb56bc776811fa07695226164fdd656ed8edd8a1ae19c0e066f54f9 -416e376a6168b9ed2bb5a5f5adb979b1cdce5e40f2184197bba6526857c2c92e47d0104d754f92a50dd8222f65be35e0c95b73d2f3bfac85fd60d80887955a27 -1c57826650ab74c27eb3d20fc3667d1cd66ba341e31514161927f530bbb19fc00506dde4f7f67a7cefee3ed9ded1dc99b3a4caf4dd7c5513d777f7f5c6e1bb7b -8f40d2f9b2d598749bdd41abd26df627956034e854bac3d6a0326a0ddba3c9681876ba9357be77a1c141bf390c5ae34ea5551f0e2b41aba6e877ba9576d068f4 -8376bf330efaaff23606569ea58fdc16605ecdebde7f010000ffff0300504b0304140006000800000021000dd1909fb60000001b010000270000007468656d65 -2f7468656d652f5f72656c732f7468656d654d616e616765722e786d6c2e72656c73848f4d0ac2301484f78277086f6fd3ba109126dd88d0add40384e4350d36 -3f2451eced0dae2c082e8761be9969bb979dc9136332de3168aa1a083ae995719ac16db8ec8e4052164e89d93b64b060828e6f37ed1567914b284d262452282e -3198720e274a939cd08a54f980ae38a38f56e422a3a641c8bbd048f7757da0f19b017cc524bd62107bd5001996509affb3fd381a89672f1f165dfe514173d985 -0528a2c6cce0239baa4c04ca5bbabac4df000000ffff0300504b01022d0014000600080000002100e9de0fbfff0000001c020000130000000000000000000000 -0000000000005b436f6e74656e745f54797065735d2e786d6c504b01022d0014000600080000002100a5d6a7e7c0000000360100000b00000000000000000000 -000000300100005f72656c732f2e72656c73504b01022d00140006000800000021006b799616830000008a0000001c0000000000000000000000000019020000 -7468656d652f7468656d652f7468656d654d616e616765722e786d6c504b01022d0014000600080000002100b6f4679893070000c92000001600000000000000 -000000000000d60200007468656d652f7468656d652f7468656d65312e786d6c504b01022d00140006000800000021000dd1909fb60000001b01000027000000 -000000000000000000009d0a00007468656d652f7468656d652f5f72656c732f7468656d654d616e616765722e786d6c2e72656c73504b050600000000050005005d010000980b00000000} -{\*\colorschememapping 3c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d225554462d3822207374616e64616c6f6e653d22796573223f3e0d0a3c613a636c724d -617020786d6c6e733a613d22687474703a2f2f736368656d61732e6f70656e786d6c666f726d6174732e6f72672f64726177696e676d6c2f323030362f6d6169 -6e22206267313d226c743122207478313d22646b3122206267323d226c743222207478323d22646b322220616363656e74313d22616363656e74312220616363 -656e74323d22616363656e74322220616363656e74333d22616363656e74332220616363656e74343d22616363656e74342220616363656e74353d22616363656e74352220616363656e74363d22616363656e74362220686c696e6b3d22686c696e6b2220666f6c486c696e6b3d22666f6c486c696e6b222f3e} -{\*\latentstyles\lsdstimax376\lsdlockeddef0\lsdsemihiddendef0\lsdunhideuseddef0\lsdqformatdef0\lsdprioritydef99{\lsdlockedexcept \lsdqformat1 \lsdpriority0 \lsdlocked0 Normal;\lsdqformat1 \lsdlocked0 heading 1;\lsdqformat1 \lsdlocked0 heading 2; -\lsdqformat1 \lsdlocked0 heading 3;\lsdqformat1 \lsdlocked0 heading 4;\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 5;\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 6; -\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 7;\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 8;\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 9; -\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 1;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 4; -\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 5;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 6;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 7;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 8; -\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 9;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 1;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 2;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 3; -\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 4;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 5;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 6; -\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 7;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 8;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 9;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Normal Indent; -\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 footnote text;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 annotation text;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 header;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 footer; -\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index heading;\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority35 \lsdlocked0 caption;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 table of figures; -\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 envelope address;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 envelope return;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 footnote reference;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 annotation reference; -\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 line number;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 page number;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 endnote reference;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 endnote text; -\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 table of authorities;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 macro;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 toa heading;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List; -\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Bullet;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Number;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List 3; -\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List 4;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List 5;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Bullet 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Bullet 3; -\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Bullet 4;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Bullet 5;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Number 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Number 3; -\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Number 4;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Number 5;\lsdqformat1 \lsdpriority10 \lsdlocked0 Title;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Closing; -\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Signature;\lsdsemihidden1 \lsdunhideused1 \lsdpriority1 \lsdlocked0 Default Paragraph Font;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text Indent; -\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Continue;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Continue 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Continue 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Continue 4; -\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Continue 5;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Message Header;\lsdqformat1 \lsdpriority11 \lsdlocked0 Subtitle;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Salutation; -\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Date;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text First Indent;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text First Indent 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Note Heading; -\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text Indent 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text Indent 3; -\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Block Text;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Hyperlink;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 FollowedHyperlink;\lsdqformat1 \lsdpriority22 \lsdlocked0 Strong; -\lsdqformat1 \lsdpriority20 \lsdlocked0 Emphasis;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Document Map;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Plain Text;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 E-mail Signature; -\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Top of Form;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Bottom of Form;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Normal (Web);\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Acronym; -\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Address;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Cite;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Code;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Definition; -\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Keyboard;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Preformatted;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Sample;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Typewriter; -\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Variable;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 annotation subject;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 No List;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Outline List 1; -\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Outline List 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Outline List 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Balloon Text;\lsdpriority39 \lsdlocked0 Table Grid; -\lsdsemihidden1 \lsdlocked0 Placeholder Text;\lsdqformat1 \lsdpriority1 \lsdlocked0 No Spacing;\lsdpriority60 \lsdlocked0 Light Shading;\lsdpriority61 \lsdlocked0 Light List;\lsdpriority62 \lsdlocked0 Light Grid; -\lsdpriority63 \lsdlocked0 Medium Shading 1;\lsdpriority64 \lsdlocked0 Medium Shading 2;\lsdpriority65 \lsdlocked0 Medium List 1;\lsdpriority66 \lsdlocked0 Medium List 2;\lsdpriority67 \lsdlocked0 Medium Grid 1;\lsdpriority68 \lsdlocked0 Medium Grid 2; -\lsdpriority69 \lsdlocked0 Medium Grid 3;\lsdpriority70 \lsdlocked0 Dark List;\lsdpriority71 \lsdlocked0 Colorful Shading;\lsdpriority72 \lsdlocked0 Colorful List;\lsdpriority73 \lsdlocked0 Colorful Grid;\lsdpriority60 \lsdlocked0 Light Shading Accent 1; -\lsdpriority61 \lsdlocked0 Light List Accent 1;\lsdpriority62 \lsdlocked0 Light Grid Accent 1;\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 1;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 1;\lsdpriority65 \lsdlocked0 Medium List 1 Accent 1; -\lsdsemihidden1 \lsdlocked0 Revision;\lsdqformat1 \lsdpriority34 \lsdlocked0 List Paragraph;\lsdqformat1 \lsdpriority29 \lsdlocked0 Quote;\lsdqformat1 \lsdpriority30 \lsdlocked0 Intense Quote;\lsdpriority66 \lsdlocked0 Medium List 2 Accent 1; -\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 1;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 1;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 1;\lsdpriority70 \lsdlocked0 Dark List Accent 1;\lsdpriority71 \lsdlocked0 Colorful Shading Accent 1; -\lsdpriority72 \lsdlocked0 Colorful List Accent 1;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 1;\lsdpriority60 \lsdlocked0 Light Shading Accent 2;\lsdpriority61 \lsdlocked0 Light List Accent 2;\lsdpriority62 \lsdlocked0 Light Grid Accent 2; -\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 2;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 2;\lsdpriority65 \lsdlocked0 Medium List 1 Accent 2;\lsdpriority66 \lsdlocked0 Medium List 2 Accent 2; -\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 2;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 2;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 2;\lsdpriority70 \lsdlocked0 Dark List Accent 2;\lsdpriority71 \lsdlocked0 Colorful Shading Accent 2; -\lsdpriority72 \lsdlocked0 Colorful List Accent 2;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 2;\lsdpriority60 \lsdlocked0 Light Shading Accent 3;\lsdpriority61 \lsdlocked0 Light List Accent 3;\lsdpriority62 \lsdlocked0 Light Grid Accent 3; -\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 3;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 3;\lsdpriority65 \lsdlocked0 Medium List 1 Accent 3;\lsdpriority66 \lsdlocked0 Medium List 2 Accent 3; -\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 3;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 3;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 3;\lsdpriority70 \lsdlocked0 Dark List Accent 3;\lsdpriority71 \lsdlocked0 Colorful Shading Accent 3; -\lsdpriority72 \lsdlocked0 Colorful List Accent 3;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 3;\lsdpriority60 \lsdlocked0 Light Shading Accent 4;\lsdpriority61 \lsdlocked0 Light List Accent 4;\lsdpriority62 \lsdlocked0 Light Grid Accent 4; -\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 4;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 4;\lsdpriority65 \lsdlocked0 Medium List 1 Accent 4;\lsdpriority66 \lsdlocked0 Medium List 2 Accent 4; -\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 4;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 4;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 4;\lsdpriority70 \lsdlocked0 Dark List Accent 4;\lsdpriority71 \lsdlocked0 Colorful Shading Accent 4; -\lsdpriority72 \lsdlocked0 Colorful List Accent 4;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 4;\lsdpriority60 \lsdlocked0 Light Shading Accent 5;\lsdpriority61 \lsdlocked0 Light List Accent 5;\lsdpriority62 \lsdlocked0 Light Grid Accent 5; -\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 5;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 5;\lsdpriority65 \lsdlocked0 Medium List 1 Accent 5;\lsdpriority66 \lsdlocked0 Medium List 2 Accent 5; -\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 5;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 5;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 5;\lsdpriority70 \lsdlocked0 Dark List Accent 5;\lsdpriority71 \lsdlocked0 Colorful Shading Accent 5; -\lsdpriority72 \lsdlocked0 Colorful List Accent 5;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 5;\lsdpriority60 \lsdlocked0 Light Shading Accent 6;\lsdpriority61 \lsdlocked0 Light List Accent 6;\lsdpriority62 \lsdlocked0 Light Grid Accent 6; -\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 6;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 6;\lsdpriority65 \lsdlocked0 Medium List 1 Accent 6;\lsdpriority66 \lsdlocked0 Medium List 2 Accent 6; -\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 6;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 6;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 6;\lsdpriority70 \lsdlocked0 Dark List Accent 6;\lsdpriority71 \lsdlocked0 Colorful Shading Accent 6; -\lsdpriority72 \lsdlocked0 Colorful List Accent 6;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 6;\lsdqformat1 \lsdpriority19 \lsdlocked0 Subtle Emphasis;\lsdqformat1 \lsdpriority21 \lsdlocked0 Intense Emphasis; -\lsdqformat1 \lsdpriority31 \lsdlocked0 Subtle Reference;\lsdqformat1 \lsdpriority32 \lsdlocked0 Intense Reference;\lsdqformat1 \lsdpriority33 \lsdlocked0 Book Title;\lsdsemihidden1 \lsdunhideused1 \lsdpriority37 \lsdlocked0 Bibliography; -\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority39 \lsdlocked0 TOC Heading;\lsdpriority41 \lsdlocked0 Plain Table 1;\lsdpriority42 \lsdlocked0 Plain Table 2;\lsdpriority43 \lsdlocked0 Plain Table 3;\lsdpriority44 \lsdlocked0 Plain Table 4; -\lsdpriority45 \lsdlocked0 Plain Table 5;\lsdpriority40 \lsdlocked0 Grid Table Light;\lsdpriority46 \lsdlocked0 Grid Table 1 Light;\lsdpriority47 \lsdlocked0 Grid Table 2;\lsdpriority48 \lsdlocked0 Grid Table 3;\lsdpriority49 \lsdlocked0 Grid Table 4; -\lsdpriority50 \lsdlocked0 Grid Table 5 Dark;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful;\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful;\lsdpriority46 \lsdlocked0 Grid Table 1 Light Accent 1;\lsdpriority47 \lsdlocked0 Grid Table 2 Accent 1; -\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 1;\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 1;\lsdpriority50 \lsdlocked0 Grid Table 5 Dark Accent 1;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Accent 1; -\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful Accent 1;\lsdpriority46 \lsdlocked0 Grid Table 1 Light Accent 2;\lsdpriority47 \lsdlocked0 Grid Table 2 Accent 2;\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 2; -\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 2;\lsdpriority50 \lsdlocked0 Grid Table 5 Dark Accent 2;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Accent 2;\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful Accent 2; -\lsdpriority46 \lsdlocked0 Grid Table 1 Light Accent 3;\lsdpriority47 \lsdlocked0 Grid Table 2 Accent 3;\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 3;\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 3; -\lsdpriority50 \lsdlocked0 Grid Table 5 Dark Accent 3;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Accent 3;\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful Accent 3;\lsdpriority46 \lsdlocked0 Grid Table 1 Light Accent 4; -\lsdpriority47 \lsdlocked0 Grid Table 2 Accent 4;\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 4;\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 4;\lsdpriority50 \lsdlocked0 Grid Table 5 Dark Accent 4; -\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Accent 4;\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful Accent 4;\lsdpriority46 \lsdlocked0 Grid Table 1 Light Accent 5;\lsdpriority47 \lsdlocked0 Grid Table 2 Accent 5; -\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 5;\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 5;\lsdpriority50 \lsdlocked0 Grid Table 5 Dark Accent 5;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Accent 5; -\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful Accent 5;\lsdpriority46 \lsdlocked0 Grid Table 1 Light Accent 6;\lsdpriority47 \lsdlocked0 Grid Table 2 Accent 6;\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 6; -\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 6;\lsdpriority50 \lsdlocked0 Grid Table 5 Dark Accent 6;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Accent 6;\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful Accent 6; -\lsdpriority46 \lsdlocked0 List Table 1 Light;\lsdpriority47 \lsdlocked0 List Table 2;\lsdpriority48 \lsdlocked0 List Table 3;\lsdpriority49 \lsdlocked0 List Table 4;\lsdpriority50 \lsdlocked0 List Table 5 Dark; -\lsdpriority51 \lsdlocked0 List Table 6 Colorful;\lsdpriority52 \lsdlocked0 List Table 7 Colorful;\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 1;\lsdpriority47 \lsdlocked0 List Table 2 Accent 1;\lsdpriority48 \lsdlocked0 List Table 3 Accent 1; -\lsdpriority49 \lsdlocked0 List Table 4 Accent 1;\lsdpriority50 \lsdlocked0 List Table 5 Dark Accent 1;\lsdpriority51 \lsdlocked0 List Table 6 Colorful Accent 1;\lsdpriority52 \lsdlocked0 List Table 7 Colorful Accent 1; -\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 2;\lsdpriority47 \lsdlocked0 List Table 2 Accent 2;\lsdpriority48 \lsdlocked0 List Table 3 Accent 2;\lsdpriority49 \lsdlocked0 List Table 4 Accent 2; -\lsdpriority50 \lsdlocked0 List Table 5 Dark Accent 2;\lsdpriority51 \lsdlocked0 List Table 6 Colorful Accent 2;\lsdpriority52 \lsdlocked0 List Table 7 Colorful Accent 2;\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 3; -\lsdpriority47 \lsdlocked0 List Table 2 Accent 3;\lsdpriority48 \lsdlocked0 List Table 3 Accent 3;\lsdpriority49 \lsdlocked0 List Table 4 Accent 3;\lsdpriority50 \lsdlocked0 List Table 5 Dark Accent 3; -\lsdpriority51 \lsdlocked0 List Table 6 Colorful Accent 3;\lsdpriority52 \lsdlocked0 List Table 7 Colorful Accent 3;\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 4;\lsdpriority47 \lsdlocked0 List Table 2 Accent 4; -\lsdpriority48 \lsdlocked0 List Table 3 Accent 4;\lsdpriority49 \lsdlocked0 List Table 4 Accent 4;\lsdpriority50 \lsdlocked0 List Table 5 Dark Accent 4;\lsdpriority51 \lsdlocked0 List Table 6 Colorful Accent 4; -\lsdpriority52 \lsdlocked0 List Table 7 Colorful Accent 4;\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 5;\lsdpriority47 \lsdlocked0 List Table 2 Accent 5;\lsdpriority48 \lsdlocked0 List Table 3 Accent 5; -\lsdpriority49 \lsdlocked0 List Table 4 Accent 5;\lsdpriority50 \lsdlocked0 List Table 5 Dark Accent 5;\lsdpriority51 \lsdlocked0 List Table 6 Colorful Accent 5;\lsdpriority52 \lsdlocked0 List Table 7 Colorful Accent 5; -\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 6;\lsdpriority47 \lsdlocked0 List Table 2 Accent 6;\lsdpriority48 \lsdlocked0 List Table 3 Accent 6;\lsdpriority49 \lsdlocked0 List Table 4 Accent 6; -\lsdpriority50 \lsdlocked0 List Table 5 Dark Accent 6;\lsdpriority51 \lsdlocked0 List Table 6 Colorful Accent 6;\lsdpriority52 \lsdlocked0 List Table 7 Colorful Accent 6;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Mention; -\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Smart Hyperlink;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Hashtag;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Unresolved Mention;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Smart Link;}}{\*\datastore 01050000 -02000000180000004d73786d6c322e534158584d4c5265616465722e362e3000000000000000000000060000 -d0cf11e0a1b11ae1000000000000000000000000000000003e000300feff090006000000000000000000000001000000010000000000000000100000feffffff00000000feffffff0000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffdfffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffff52006f006f007400200045006e00740072007900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016000500ffffffffffffffffffffffff0c6ad98892f1d411a65f0040963251e5000000000000000000000000502f -cd5a7e03da01feffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000105000000000000}} \ No newline at end of file +{\rtf1\ansi\ansicpg1252\deff0\nouicompat\deflang1033\deflangfe2052{\fonttbl{\f0\fswiss\fprq2\fcharset0 Helvetica;}{\f1\fswiss\fprq2\fcharset0 Verdana;}{\f2\froman\fprq2\fcharset0 Times New Roman;}} +{\colortbl ;\red165\green165\blue165;\red109\green210\blue255;\red0\green0\blue255;\red70\green70\blue70;\red255\green255\blue255;\red74\green74\blue74;\red5\green99\blue193;\red36\green41\blue47;} +{\stylesheet{ Normal;}{\s1 heading 1;}{\s2 heading 2;}{\s3 heading 3;}{\s4 heading 4;}} +{\*\generator Riched20 10.0.22621}{\*\mmathPr\mnaryLim0\mdispDef1\mwrapIndent1440 }\viewkind4\uc1 +\pard\nowidctlpar\sb240\sl276\slmult1\cf1\b\f0\fs22\lang2057 @DYNAMO v.3.0.0 \'a9 2023 Autodesk, Inc. All rights reserved.\par +Dynamo License\par + +\pard\widctlpar\b0\par +Those portions created by Ian are provided with the following copyright:\par +\par +Copyright 2017 Ian Keough\par +\par +Those portions created by Autodesk employees are provided with the following copyright:\par +\par +Copyright 2023 Autodesk, Inc.\par +\par +Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at {\cf2\ul{\field{\*\fldinst{HYPERLINK "https://nam11.safelinks.protection.outlook.com/?url=http%3A%2F%2Fwww.apache.org%2Flicenses%2FLICENSE-2.0&data=04%7C01%7CJames.Conner%40autodesk.com%7Cdaecd65781944b855e7808d946251ff6%7C67bff79e7f914433a8e5c9252d2ddc1d%7C0%7C0%7C637617947520120511%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=hM4SECRXlI3Y3bhWd0n7aVFES8pYfE3tfdiIfbSsdIo%3D&reserved=0" }}{\fldrslt{http://www.apache.org/licenses/LICENSE-2.0}}}}\cf2\ul\f0\fs22 \cf1\ulnone Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.\cf2\ul\par +\cf0\ulnone\b\f1\fs20\par + +\pard\nowidctlpar\sb240\sl276\slmult1\cf1\f0\fs22 Privacy\par + +\pard\widctlpar\b0 To learn more about Autodesk\rquote s online and offline privacy practices, please see the {\cf2\ul{\field{\*\fldinst{HYPERLINK "http://www.autodesk.com/company/legal-notices-trademarks/privacy-statement"}}{\fldrslt{Autodesk Privacy Statement}}}}\cf2\ul\f0\fs22 .\cf0\ulnone\f1\fs16\par +\par + +\pard\nowidctlpar\sb240\sl276\slmult1\cf1\b\f0\fs22 Autodesk Trademarks\par + +\pard\widctlpar\b0 The trademarks on the {\cf2\ul{\field{\*\fldinst{HYPERLINK "https://www.autodesk.com/company/legal-notices-trademarks/intellectual-property/trademarks"}}{\fldrslt{Autodesk Trademarks page}}}}\f0\fs22 are registered trademarks or trademarks of Autodesk, Inc., and/or its subsidiaries and/or affiliates in the USA and/or other countries. \par +\par +All other brand names, product names or trademarks belong to their respective holders.\par + +\pard\nowidctlpar\sb240\sl276\slmult1\b Autodesk Cloud and Desktop Components\cf0\f1\par + +\pard\widctlpar\cf1\b0\f0 This Product or Service may incorporate or use background Autodesk online and desktop technology components.\~ For information about these components, see\cf0\f1 {\cf2\ul\f0{\field{\*\fldinst{HYPERLINK "https://www.autodesk.com/company/legal-notices-trademarks/autodesk-cloud-platform-components"}}{\fldrslt{Autodesk Cloud Platform Components}}}}\cf1\f2\fs22 \f0 and {\cf2\ul{\field{\*\fldinst{HYPERLINK "https://www.autodesk.com/company/legal-notices-trademarks/autodesk-desktop-platform-components"}}{\fldrslt{Autodesk Desktop Platform Components}}}}\cf2\ul\f0\fs22 .\par +\cf0\ulnone\f1\fs18\par + +\pard\widctlpar\sb168\cf1\b\f0\fs22 LIBG, ProtoGeometry v.2.7.0, DynamoVisualProgramming.Analytics, CER, ADP, GRegRevitAuth, AGET, IDSDK, IDSDK Wrapper, ForgeUnits.NET, ForgeUnits.Schemas,, and Autodesk.GeometryPrimitive\b0 are closed source files licensed by Autodesk under the license that can be found here {\cf0{\field{\*\fldinst{HYPERLINK https://github.com/DynamoDS/Dynamo/tree/master/doc/distrib/Autodesk.rtf }}{\fldrslt{https://github.com/DynamoDS/Dynamo/tree/master/doc/distrib/Autodesk.rtf\ul0\cf0}}}}\f0\fs22\par + +\pard\widctlpar\cf0\f1\fs18\par +\fs20\par +\cf1\b\f0\fs22 Third-Party Trademarks, Software Credits and Attributions\par +\cf0\b0\f1\fs18\par +\cf1\b\f0\fs22 Greg v.\cf0\b0\f2\fs24 \cf1\b\f0\fs22 v.2.5.0.5076:\par +\b0 (The MIT License)\par +Copyright (c) 2013 Peter Boyer {\cf2\ul\f2\fs24{\field{\*\fldinst{HYPERLINK "mailto:peter.boyer@autodesk.com" }}{\fldrslt{\f0\fs22 peter.boyer@autodesk.com}}}}\f0\fs22 Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the 'Software'), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\par +\par +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\par +\par +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\par +\cf0\f1\fs18\par +\cf1\b\f0\fs22 Microsoft.CSharp v.4.0.0.0:\par +\b0 The MIT License (MIT)\par +Copyright (c) .NET Foundation and Contributors\par +All rights reserved.\par +\par +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\par +\ul\par +\ulnone The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\par +\par +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\par +\cf0\f1\fs18\par +\cf1\b\f0\fs22 Newtonsoft.Json v.13.0.1:\par +{\cf2\ul\b0{\field{\*\fldinst{HYPERLINK "https://nam11.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2FJamesNK%2FNewtonsoft.Json&data=04%7C01%7CJames.Conner%40autodesk.com%7Cdaecd65781944b855e7808d946251ff6%7C67bff79e7f914433a8e5c9252d2ddc1d%7C0%7C0%7C637617947520419200%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=hvR4mYgVhMPpQh4uLCJ3PY9Ywr8mM0vqXF98ac8mPXA%3D&reserved=0" }}{\fldrslt{https://github.com/JamesNK/Newtonsoft.Json}}}}\cf2\ul\b0\f0\fs22\par +{{\field{\*\fldinst{HYPERLINK "https://nam11.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2FJamesNK%2FNewtonsoft.Json%2Fblob%2Fmaster%2FLICENSE.md&data=04%7C01%7CJames.Conner%40autodesk.com%7Cdaecd65781944b855e7808d946251ff6%7C67bff79e7f914433a8e5c9252d2ddc1d%7C0%7C0%7C637617947520429148%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=OuX0yvu%2F0kVS7X5KARjQ3p9Ycg8qvk67fFAaKNEWxbM%3D&reserved=0" }}{\fldrslt{https://github.com/JamesNK/Newtonsoft.Json/blob/master/LICENSE.md}}}}\f0\fs22\par +\cf1\ulnone The MIT License (MIT)\par +Copyright (c) 2007 James Newton-King\par +\par +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\par +\par +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\par +\par +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\par +\par +\b RestSharp v.106.12.0.0:\par +{\cf2\ul\b0{\field{\*\fldinst{HYPERLINK "https://nam11.safelinks.protection.outlook.com/?url=http%3A%2F%2Fwww.apache.org%2Flicenses%2FLICENSE-2.0&data=04%7C01%7CJames.Conner%40autodesk.com%7Cdaecd65781944b855e7808d946251ff6%7C67bff79e7f914433a8e5c9252d2ddc1d%7C0%7C0%7C637617947520478947%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=foUoDUPyy8Or0rkNJtlLjI9XfJO7gemOLFnuKIkflHU%3D&reserved=0" }}{\fldrslt{http://www.apache.org/licenses/LICENSE-2.0}}}}\cf2\ul\b0\f0\fs22\par +\cf1\ulnone Copyright \'a9 2021 Alexe Zimarev\par +\par +Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at {\cf0{\field{\*\fldinst{HYPERLINK http://www.apache.org/licenses/LICENSE-2.0 }}{\fldrslt{http://www.apache.org/licenses/LICENSE-2.0\ul0\cf0}}}}\f0\fs22 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.\par +\cf0\f1\fs18\par + +\pard\nowidctlpar\sl288\slmult1\cf1\kerning1\b\f0\fs22 System.Collections.Immutable v.5.0.0:\par + +\pard\widctlpar\kerning0\b0 Copyright (c) 2017 .NET Foundation and Contributors\par +All rights reserved.\par +\par +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\par +\par +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\par +\par +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\par +\cf0\f1\fs18\par +\cf1\kerning2\b\f0\fs22\lang1031 FontAwesome5 v.2.1.11:\par +{\cf2\kerning0\ul\b0{\field{\*\fldinst{HYPERLINK https://www.nuget.org/packages/FontAwesome5/ }}{\fldrslt{https://www.nuget.org/packages/FontAwesome5/}}}}\cf2\kerning0\ul\b0\f0\fs22\par +{{\field{\*\fldinst{HYPERLINK https://github.com/MartinTopfstedt/FontAwesome5/blob/master/LICENSE }}{\fldrslt{https://github.com/MartinTopfstedt/FontAwesome5/blob/master/LICENSE}}}}\f0\fs22\par +\cf1\ulnone\lang1033 MIT License\par +Copyright (c) 2018 MartinTopfstedt\par +\par +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\par +\par +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\par +\cf0\f1\fs18\par + +\pard\nowidctlpar\sl288\slmult1\cf1\kerning1\b\f0\fs22 Cyotek.Drawing.BitmapFont v.2.0.0:\par + +\pard\widctlpar {\cf2\kerning0\ul\b0{\field{\*\fldinst{HYPERLINK "https://nam11.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fcyotek%2FCyotek.Drawing.BitmapFont&data=04%7C01%7CJames.Conner%40autodesk.com%7Cdaecd65781944b855e7808d946251ff6%7C67bff79e7f914433a8e5c9252d2ddc1d%7C0%7C0%7C637617947520160343%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=kvdO%2FPPgz3PuASG6zv93DwNJ4gPkL6T6islWBwoI9Xk%3D&reserved=0" }}{\fldrslt{https://github.com/cyotek/Cyotek.Drawing.BitmapFont}}}}\cf2\kerning0\ul\b0\f0\fs22\par +{{\field{\*\fldinst{HYPERLINK "https://nam11.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fcyotek%2FCyotek.Drawing.BitmapFont%2Fblob%2Fmaster%2FLICENSE.txt&data=04%7C01%7CJames.Conner%40autodesk.com%7Cdaecd65781944b855e7808d946251ff6%7C67bff79e7f914433a8e5c9252d2ddc1d%7C0%7C0%7C637617947520170297%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=WjEf%2FyE1koklbovxfFzHrScckILOiAOQlGkhPLaZ%2FL8%3D&reserved=0" }}{\fldrslt{https://github.com/cyotek/Cyotek.Drawing.BitmapFont/blob/master/LICENSE.txt}}}}\f0\fs22\par +\cf1\ulnone The MIT License (MIT)\par +Copyright \'a9 2012-2021 Cyotek Ltd.\par +\par +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\par +\par +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\par +\par +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\par +\cf0\f1\fs18\par +\cf1\kerning1\b\f0\fs22 Helix Toolkit v.2.24.0:\par +HelixToolkit.Core.Wpf v.2.24.0:\par +HelixToolkit.SharpDX.Core v.2.24.0:\par +HelixToolkit.SharpDX.Core.Wpf v.2.24.0:\par +{\cf2\kerning0\ul\b0{\field{\*\fldinst{HYPERLINK "https://nam11.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fhelix-toolkit%2Fhelix-toolkit&data=04%7C01%7CJames.Conner%40autodesk.com%7Cdaecd65781944b855e7808d946251ff6%7C67bff79e7f914433a8e5c9252d2ddc1d%7C0%7C0%7C637617947520210113%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=dfWqblB8VdDL63AyawNfgrFG2TD08PCrheqsu%2B7K0Us%3D&reserved=0" }}{\fldrslt{https://github.com/helix-toolkit/helix-toolkit}}}}\cf2\kerning0\ul\b0\f0\fs22\par +{{\field{\*\fldinst{HYPERLINK "https://nam11.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fhelix-toolkit%2Fhelix-toolkit%2Fblob%2Fdevelop%2FLICENSE&data=04%7C01%7CJames.Conner%40autodesk.com%7Cdaecd65781944b855e7808d946251ff6%7C67bff79e7f914433a8e5c9252d2ddc1d%7C0%7C0%7C637617947520210113%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=qUPlp6EXAxHOk9eACY7DopacUlVCn355KLenUznV%2Ft0%3D&reserved=0" }}{\fldrslt{https://github.com/helix-toolkit/helix-toolkit/blob/develop/LICENSE}}}}\f0\fs22\par +\cf1\ulnone The MIT License (MIT)\par +Copyright (c) 2019 Helix Toolkit contributors\par +\par +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\par +\par +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\par +\par +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\par +\cf0\f1\fs18\par + +\pard\nowidctlpar\sl288\slmult1\cf1\kerning1\b\f0\fs22 SharpDX v.4.2.0:\par +SharpDX.D3DCompiler v.4.2.0:\par +SharpDX.Direct2D1 v.4.2.0:\par +SharpDX.Direct3D11 v.4.2.0:\par +SharpDX.Direct3D9 v.4.2.0:\par +SharpDX.DXGI v.4.2.0:\par +SharpDX.Mathematics v.4.2.0:\par + +\pard\widctlpar {\cf2\kerning0\ul\b0{\field{\*\fldinst{HYPERLINK "https://nam11.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fsharpdx%2FSharpDX%2Fblob%2Fmaster%2FLICENSE&data=04%7C01%7CJames.Conner%40autodesk.com%7Cdaecd65781944b855e7808d946251ff6%7C67bff79e7f914433a8e5c9252d2ddc1d%7C0%7C0%7C637617947520488895%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=VOYhb2IAZGG0jx%2FwQxJ2Q9HXN2t6XKVVP6AiBEdD%2F3E%3D&reserved=0" }}{\fldrslt{https://github.com/sharpdx/SharpDX/blob/master/LICENSE}}}}\cf2\kerning0\ul\b0\f0\fs22\par +\cf1\ulnone Copyright (c) 2010-2014 SharpDX - Alexandre Mutel\par +\par +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\par +\par +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\par +\par +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\par +\cf0\f1\fs18\par +\cf1\f0\fs22\par + +\pard\nowidctlpar\sl288\slmult1\kerning1\b ICSharpCode.AvalonEdit v.6.3.0.90:\par + +\pard\widctlpar {\cf2\kerning0\ul\b0{\field{\*\fldinst{HYPERLINK http://www.avalonedit.net/ }}{\fldrslt{http://www.avalonedit.net/}}}}\cf2\kerning0\ul\b0\f0\fs22\par +{{\field{\*\fldinst{HYPERLINK https://licenses.nuget.org/MIT }}{\fldrslt{https://licenses.nuget.org/MIT}}}}\f0\fs22\par +\cf0\ulnone\f1\fs18\par +\cf1\f0\fs22 MIT License\par +\par +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\par +\par +The above copyright notice and this permission notice (including the next paragraph) shall be included in all copies or substantial portions of the Software.\par +\par +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE\par +\cf0\f1\fs18\par + +\pard\nowidctlpar\sl288\slmult1\cf1\kerning1\b\f0\fs22 Google OpenSans:\par + +\pard\widctlpar\kerning0\b0 OpenSans font from Google\par +{\cf2\ul{\field{\*\fldinst{HYPERLINK "https://nam11.safelinks.protection.outlook.com/?url=http%3A%2F%2Fwww.google.com%2Ffonts%2Fspecimen%2FOpen%2BSans&data=04%7C01%7CJames.Conner%40autodesk.com%7Cdaecd65781944b855e7808d946251ff6%7C67bff79e7f914433a8e5c9252d2ddc1d%7C0%7C0%7C637617947520439110%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=uwmtTlbBUjq%2B1z%2FvJsb9jSJ7i6M8hIMll1qnznB0mDw%3D&reserved=0" }}{\fldrslt{http://www.google.com/fonts/specimen/Open+Sans}}}}\cf2\ul\f0\fs22\par +{{\field{\*\fldinst{HYPERLINK "https://nam11.safelinks.protection.outlook.com/?url=http%3A%2F%2Fwww.apache.org%2Flicenses%2FLICENSE-2.0.html&data=04%7C01%7CJames.Conner%40autodesk.com%7Cdaecd65781944b855e7808d946251ff6%7C67bff79e7f914433a8e5c9252d2ddc1d%7C0%7C0%7C637617947520449066%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=u4S07VDF20%2BhKswWuPxfNxdMvEV6u6kUxVXid57TMkQ%3D&reserved=0" }}{\fldrslt{http://www.apache.org/licenses/LICENSE-2.0.html}}}}\f0\fs22\par +\cf1\ulnone Copyright \'a9 [yyyy] Steve Matteson\par +\par +Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at {\cf0{\field{\*\fldinst{HYPERLINK http://www.apache.org/licenses/LICENSE-2.0 }}{\fldrslt{http://www.apache.org/licenses/LICENSE-2.0\ul0\cf0}}}}\cf2\ul\f2\fs22 \cf1\ulnone\f0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.\cf2\ul\f2\par +\cf0\ulnone\f1\fs18\par + +\pard\nowidctlpar\sl288\slmult1\cf1\kerning1\b\f0\fs22 DocumentFormat.OpenXml v.2.12.3:\par + +\pard\widctlpar\kerning0\b0 The MIT License (MIT)\par +Copyright (c) Microsoft Corporation\par +\par +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\par +\par +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\par +\par +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\par +\cf0\f1\fs18\par + +\pard\nowidctlpar\sl288\slmult1\cf1\kerning1\b\f0\fs22 IronPython.StdLib v.2.7.9:\par + +\pard\widctlpar\kerning0\b0 Copyright \'a9 2018 Slide & Slozier\par +\par +1. This LICENSE AGREEMENT is between the Python Software Foundation ("PSF"), and the Individual or Organization ("Licensee") accessing and otherwise using Python 2.7.18 software in source or binary form and its associated documentation.\par +\par +2. Subject to the terms and conditions of this License Agreement, PSF hereby grants Licensee a nonexclusive, royalty-free, world-wide license to reproduce, analyze, test, perform and/or display publicly, prepare derivative works, distribute, and otherwise use Python 2.7.18 alone or in any derivative version, provided, however, that PSF's License Agreement and PSF's notice of copyright, i.e., "Copyright \'a9 2001-2020 Python Software Foundation; All Rights Reserved" are retained in Python 2.7.18 alone or in any derivative version prepared by Licensee.\par +\par +3. In the event Licensee prepares a derivative work that is based on or incorporates Python 2.7.18 or any part thereof, and wants to make the derivative work available to others as provided herein, then Licensee hereby agrees to include in any such work a brief summary of the changes made to Python 2.7.18.\par +\par +4. PSF is making Python 2.7.18 available to Licensee on an "AS IS" basis. PSF MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, PSF MAKES NO AND DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON 2.7.18 WILL NOT INFRINGE ANY THIRD PARTY RIGHTS.\par +\par +5. PSF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON 2.7.18 FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON 2.7.18, OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF.\par +\par +6. This License Agreement will automatically terminate upon a material breach of its terms and conditions.\par +\par +7. Nothing in this License Agreement shall be deemed to create any relationship of agency, partnership, or joint venture between PSF and Licensee. This License Agreement does not grant permission to use PSF trademarks or trade name in a trademark sense to endorse or promote products or services of Licensee, or any third party.\par +\par +8. By copying, installing or otherwise using Python 2.7.18, Licensee agrees to be bound by the terms and conditions of this License Agreement.\par +\par + +\pard\nowidctlpar\sl288\slmult1\kerning1\b IronPython v.2.7.9\par +DynamicLanguageRuntime v.1.2.2\par + +\pard\widctlpar\kerning0\b0 Iron Python, Dynamic Language Runtime\par +{\cf2\ul{\field{\*\fldinst{HYPERLINK "https://nam11.safelinks.protection.outlook.com/?url=http%3A%2F%2Fironpython.net%2F&data=04%7C01%7CJames.Conner%40autodesk.com%7Cdaecd65781944b855e7808d946251ff6%7C67bff79e7f914433a8e5c9252d2ddc1d%7C0%7C0%7C637617947520230026%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=imRCR5wnzORiO%2BHcoAs4qY%2FUsg2F3%2BvpQsquG4pLPbc%3D&reserved=0" }}{\fldrslt{http://ironpython.net/}}}}\cf2\ul\f0\fs22\par +{{\field{\*\fldinst{HYPERLINK "https://nam11.safelinks.protection.outlook.com/?url=http%3A%2F%2Fopensource.org%2Flicenses%2Fapache2.0.php&data=04%7C01%7CJames.Conner%40autodesk.com%7Cdaecd65781944b855e7808d946251ff6%7C67bff79e7f914433a8e5c9252d2ddc1d%7C0%7C0%7C637617947520339551%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=GqzN3ywkegHn8Xwxmkje5HuJNO7iecwBGZU3LOoNIus%3D&reserved=0" }}{\fldrslt{http://opensource.org/licenses/apache2.0.php}}}}\f0\fs22\par +\cf1\ulnone Copyright \'a9 2018 Iron Python Community\par +\par +Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at {\cf0{\field{\*\fldinst{HYPERLINK http://www.apache.org/licenses/LICENSE-2.0 }}{\fldrslt{http://www.apache.org/licenses/LICENSE-2.0\ul0\cf0}}}}\f0\fs22 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.\par +\cf0\f1\fs18\par + +\pard\nowidctlpar\sl288\slmult1\cf1\kerning1\b\f0\fs22 Python.Runtime.NETStandard v.3.7.0:\par + +\pard\widctlpar\kerning0\b0 Copyright (c) 2006-2021 the contributors of the Python.NET project\par +\par +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\par +\par +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\par +\par +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\par +\cf0\f1\fs18\par + +\pard\nowidctlpar\sl288\slmult1\cf1\kerning1\b\f0\fs22 Python.Included v.3.7.3.4\par + +\pard\widctlpar\kerning0\b0 PSF LICENSE AGREEMENT FOR PYTHON 3.10.4\par +\par +1. This LICENSE AGREEMENT is between the Python Software Foundation ("PSF"), and the Individual or Organization ("Licensee") accessing and otherwise using Python 3.7.3.4 software in source or binary form and its associated documentation.\par +\par +2. Subject to the terms and conditions of this License Agreement, PSF hereby grants Licensee a nonexclusive, royalty-free, world-wide license to reproduce, analyze, test, perform and/or display publicly, prepare derivative works, distribute, and otherwise use Python 3.7.3.4 alone or in any derivative version, provided, however, that PSF's License Agreement and PSF's notice of copyright, i.e., "Copyright \'a9 2001-2022 Python Software Foundation; All Rights Reserved" are retained in Python 3.7.3.4 alone or in any derivative version prepared by Licensee.\par +\par +3. In the event Licensee prepares a derivative work that is based on or incorporates Python 3.7.3.4 or any part thereof, and wants to make the derivative work available to others as provided herein, then Licensee hereby agrees to include in any such work a brief summary of the changes made to Python 3.7.3.4.\par +\par +4. PSF is making Python 3.7.3.4 available to Licensee on an "AS IS" basis. PSF MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, PSF MAKES NO AND DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON 3.7.3.4 WILL NOT INFRINGE ANY THIRD PARTY RIGHTS.\par +\par +5. PSF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON 3.7.3.4 FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON 3.7.3.4, OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF.\par +\par +6. This License Agreement will automatically terminate upon a material breach of its terms and conditions.\par +\par +7. Nothing in this License Agreement shall be deemed to create any relationship of agency, partnership, or joint venture between PSF and Licensee. This License Agreement does not grant permission to use PSF trademarks or trade name in a trademark sense to endorse or promote products or services of Licensee, or any third party.\par +\par +8. By copying, installing or otherwise using Python 3.7.3.4, Licensee agrees to be bound by the terms and conditions of this License Agreement.\par +\par + +\pard\nowidctlpar\sl288\slmult1\kerning1\b IPython (autoreload.py) v.7.24.1:\par + +\pard\widctlpar {\cf2\kerning0\ul\b0{\field{\*\fldinst{HYPERLINK "https://nam11.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fipython%2Fipython%2Fblob%2Fmaster%2FIPython%2Fextensions%2Fautoreload.py&data=04%7C01%7CJames.Conner%40autodesk.com%7Cdaecd65781944b855e7808d946251ff6%7C67bff79e7f914433a8e5c9252d2ddc1d%7C0%7C0%7C637617947520359465%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=7AtWEHhH3h2E0eDlvyhqM0OyREJugNDsYai4S5egwXc%3D&reserved=0" }}{\fldrslt{https://github.com/ipython/ipython/blob/master/IPython/extensions/autoreload.py}}}}\cf2\kerning0\ul\b0\f0\fs22\par +{{\field{\*\fldinst{HYPERLINK "https://nam11.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fipython%2Fipython%2Fblob%2Fmaster%2FLICENSE&data=04%7C01%7CJames.Conner%40autodesk.com%7Cdaecd65781944b855e7808d946251ff6%7C67bff79e7f914433a8e5c9252d2ddc1d%7C0%7C0%7C637617947520359465%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=Pilk0qSjYqpb4gwsh9CFaG42mk5wngBXOSykgiBj1EQ%3D&reserved=0" }}{\fldrslt{https://github.com/ipython/ipython/blob/master/LICENSE}}}}\f0\fs22\par +\cf1\ulnone BSD 3-Clause License\par +- Copyright (c) 2008-Present, IPython Development Team\par +\lang3082 - Copyright (c) 2001-2007, Fernando Perez \par +\lang1033 - Copyright (c) 2001, Janko Hauser \par +- Copyright (c) 2001, Nathaniel Gray \par +All rights reserved.\par +\par +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\par +\par +* Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.\par +* Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.\par +* Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.\par +\par +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\par +\cf0\f1\fs18\par + +\pard\nowidctlpar\sl288\slmult1\cf1\kerning1\b\f0\fs22 Nunit v.3.13.3\par + +\pard\widctlpar {\cf2\kerning0\ul\b0{\field{\*\fldinst{HYPERLINK "https://nam11.safelinks.protection.outlook.com/?url=http%3A%2F%2Fwww.nunit.org%2F&data=04%7C01%7CJames.Conner%40autodesk.com%7Cdaecd65781944b855e7808d946251ff6%7C67bff79e7f914433a8e5c9252d2ddc1d%7C0%7C0%7C637617947520429148%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=BUfNk%2Flw%2BcIf69w2%2FUf0Rq%2FiDdxtlm4UOrklWu1jBco%3D&reserved=0" }}{\fldrslt{http://www.nunit.org/}}}}\cf2\kerning0\ul\b0\f0\fs22\par +\cf1\ulnone Copyright \'a9 2002-2013 Charlie Poole\line Copyright \'a9 2002-2004 James W. Newkirk, Michael C. Two, Alexei A. Vorontsov\line Copyright \'a9 2000-2002 Philip A. Craig\par +\par +This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software.\par +Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions:\par +\par +1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment (see the following) in the product documentation is required. Portions Copyright \'a9 2002-2009 Charlie Poole or Copyright\~\'a9 2002-2004 James W. Newkirk, Michael C. Two, Alexei A. Vorontsov or Copyright\~\'a9 2000-2002 Philip A. Craig\~\par +2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.\~\par +3. This notice may not be removed or altered from any source distribution.\par + +\pard\widctlpar\li720\par + +\pard\widctlpar\s4 License Note\par + +\pard\widctlpar This license is based on\~{{\field{\*\fldinst{HYPERLINK "http://www.opensource.org/licenses/zlib-license.html" }}{\fldrslt{\ul\cf3\cf3\ul the open source zlib/libpng license}}}}\f0\fs22 ({\cf0{\field{\*\fldinst{HYPERLINK https://opensource.org/licenses/zlib-license.html }}{\fldrslt{https://opensource.org/licenses/zlib-license.html\ul0\cf0}}}}\f0\fs22 ). The idea was to keep the license as simple as possible to encourage use of NUnit in free and commercial applications and libraries, but to keep the source code together and to give credit to the NUnit contributors for their efforts. While this license allows shipping NUnit in source and binary form, if shipping a NUnit variant is the sole purpose of your product, please\~{{\field{\*\fldinst{HYPERLINK "mailto:cpoole@pooleconsulting.com" }}{\fldrslt{\ul\cf3\cf3\ul let us know}}}}\f0\fs22 ({{\field{\*\fldinst{HYPERLINK "mailto:cpoole@pooleconsulting.com" }}{\fldrslt{\ul\cf3\cf3\ul cpoole@pooleconsulting.com}}}}\f0\fs22 ).\par +\par + +\pard\nowidctlpar\sl288\slmult1\kerning1\b\lang3082 Moq v.4.18.4:\par + +\pard\widctlpar {\cf2\kerning0\ul\b0{\field{\*\fldinst{HYPERLINK "https://nam11.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fmoq%2Fmoq4%2Fblob%2Fmaster%2FLicense.txt&data=04%7C01%7CJames.Conner%40autodesk.com%7Cdaecd65781944b855e7808d946251ff6%7C67bff79e7f914433a8e5c9252d2ddc1d%7C0%7C0%7C637617947520409253%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=H%2FwNgy%2FpMYIgd%2FFlP1IU1dbvTUCauizIJKCAU6ISQZI%3D&reserved=0" }}{\fldrslt{https://github.com/moq/moq4/blob/master/License.txt/}}}}\cf2\kerning0\ul\b0\f0\fs22\par +\cf1\ulnone\lang1033 BSD 3-Clause License\par +Copyright (c) 2007, Clarius Consulting, Manas Technology Solutions, InSTEDD, and Contributors. All rights reserved.\par +\par +Redistribution and use in source and binary forms, with or without\par +modification, are permitted provided that the following conditions are met:\par +\par +* Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.\par +* Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.\par +* Neither the names of the copyright holders nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.\par +\par +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\par +\cf0\f1\fs18\par + +\pard\nowidctlpar\sl288\slmult1\cf1\kerning1\b\f0\fs22\lang3082 Libiconv v.1.14.0.1:\par + +\pard\widctlpar {\cf2\kerning0\ul\b0{\field{\*\fldinst{HYPERLINK "https://nam11.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.gnu.org%2Fsoftware%2Flibiconv%2F&data=04%7C01%7CJames.Conner%40autodesk.com%7Cdaecd65781944b855e7808d946251ff6%7C67bff79e7f914433a8e5c9252d2ddc1d%7C0%7C0%7C637617947520369420%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=fyvQ8axd0727ARcscr232iqeW1sGK6FTq%2FP7s1ZtC6s%3D&reserved=0" }}{\fldrslt{https://www.gnu.org/software/libiconv/}}}}\cf2\kerning0\ul\b0\f0\fs22\par +{{\field{\*\fldinst{HYPERLINK "https://nam11.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.gnu.org%2Fsoftware%2Fgettext%2Fmanual%2Fhtml_node%2FGNU-LGPL.html%23GNU-LGPL&data=04%7C01%7CJames.Conner%40autodesk.com%7Cdaecd65781944b855e7808d946251ff6%7C67bff79e7f914433a8e5c9252d2ddc1d%7C0%7C0%7C637617947520369420%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=NZT9tNyZbyPw1WOLz%2BE6ShwxQDWHBJ9uLSyHhKPHWHk%3D&reserved=0" }}{\fldrslt{https://www.gnu.org/software/gettext/manual/html_node/GNU-LGPL.html#GNU-LGPL}}}}\f0\fs22\par +\cf1\ulnone\lang1033\'a9 1998, 2013 Free Software Foundation, Inc. \par +\par +This Autodesk software contains libiconv v. 1.14.0.1. libiconv is licensed under the GNU Lesser General Public License v.2.1, which can be found at {\cf0{\field{\*\fldinst{HYPERLINK http://www.gnu.org/licenses/oldlicenses/lgpl-2.1.txt }}{\fldrslt{http://www.gnu.org/licenses/oldlicenses/lgpl-2.1.txt\ul0\cf0}}}}\f0\fs22 . A text copy of this license is included on the media or with the download of this Autodesk software. You may obtain a copy of the source code for libiconv from {\cf2\ul{\field{\*\fldinst{HYPERLINK "http://www.autodesk.com/lgplsource" }}{\fldrslt{www.autodesk.com/lgplsource}}}}\f0\fs22 or by sending a written request to:\par +\par +Autodesk, Inc.\par +Attention: General Counsel\par +Legal Department\par +111 McInnis Parkway\par +San Rafael, CA 94903\par +Your written request must:\par +\par +Contain a self-addressed CD/DVD mailer (or envelope sufficiently large to hold a DVD) with postage sufficient to cover the amount of the current U.S. Post Office First Class postage rate for CD/DVD mailers (or the envelope you have chosen) weighing 5 ounces from San Rafael, California USA to your indicated address; and Identify:\par +\par +This Autodesk software name and release number; That you are requesting the source code for libiconvv .1.14.0.1; and The above URL ({\cf2\ul{\field{\*\fldinst{HYPERLINK "http://www.autodesk.com/lgplsource" }}{\fldrslt{www.autodesk.com/lgplsource}}}}\f0\fs22 ) so that Autodesk may properly respond to your request. The offer to receive this libiconv source code via the above URL ({\cf2\ul{\field{\*\fldinst{HYPERLINK "http://www.autodesk.com/lgplsource" }}{\fldrslt{www.autodesk.com/lgplsource}}}}\f0\fs22 ) or by written request to Autodesk is valid for a period of three (3) years from the date you purchased your license to this Autodesk software. You may modify, debug and relink libiconv to this Autodesk software as provided under the terms of the GNU Lesser General Public License v.2.1.\par +\cf0\f1\fs18\par + +\pard\nowidctlpar\sl288\slmult1\cf1\kerning1\b\f0\fs22 GNU gettext (libintl) v.0.19.8.3:\par + +\pard\widctlpar {\cf2\kerning0\ul\b0{\field{\*\fldinst{HYPERLINK "https://nam11.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.gnu.org%2Fsoftware%2Fgettext%2F&data=04%7C01%7CJames.Conner%40autodesk.com%7Cdaecd65781944b855e7808d946251ff6%7C67bff79e7f914433a8e5c9252d2ddc1d%7C0%7C0%7C637617947520200164%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=Nf21XpKiL0wk%2Fv5o95n6NHU9yBTsVWmKLfq1AJGQ1bM%3D&reserved=0" }}{\fldrslt{https://www.gnu.org/software/gettext/}}}}\cf2\kerning0\ul\b0\f0\fs22\par +{{\field{\*\fldinst{HYPERLINK "https://nam11.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.gnu.org%2Fsoftware%2Fgettext%2Fmanual%2Fhtml_node%2FGNU-LGPL.html%23GNU-LGPL&data=04%7C01%7CJames.Conner%40autodesk.com%7Cdaecd65781944b855e7808d946251ff6%7C67bff79e7f914433a8e5c9252d2ddc1d%7C0%7C0%7C637617947520210113%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=fm4crd4P%2By6SL%2F0glLKwxCwV9NjLZs7f2LAoNHfi2QE%3D&reserved=0" }}{\fldrslt{https://www.gnu.org/software/gettext/manual/html_node/GNU-LGPL.html#GNU-LGPL}}}}\f0\fs22\par +\cf1\ulnone\'a9 Copyright \'a9 1991, 1999 Free Software Foundation, Inc.\par +\par +This Autodesk software contains libintl v.0.19.8.3. libintl is licensed under the GNU Lesser General Public License v.2.1 , which can be found at {\cf0{\field{\*\fldinst{HYPERLINK http://www.gnu.org/licenses/oldlicenses/lgpl-2.1.txt }}{\fldrslt{http://www.gnu.org/licenses/oldlicenses/lgpl-2.1.txt\ul0\cf0}}}}\cf2\ul\f0\fs22 . \cf1\ulnone A text copy of this license is included on the media or with the download of this Autodesk software. You may obtain a copy of the source code for libintl v.0.19.8.3 from {\cf2\ul{\field{\*\fldinst{HYPERLINK "http://www.autodesk.com/lgplsource" }}{\fldrslt{www.autodesk.com/lgplsource}}}}\f0\fs22 or by sending a written request to:\par +\par +Autodesk, Inc.\par +Attention: General Counsel\par +Legal Department\par +111 McInnis Parkway\par +San Rafael, CA 94903\par +\par +Your written request must:\par +1. Contain a self-addressed CD/DVD mailer (or envelope sufficiently large to hold a DVD) with postage sufficient to cover the amount of the current U.S. Post Office First Class postage rate for CD/DVD mailers (or the envelope you have chosen) weighing 5 ounces from San Rafael, California USA to your indicated address; and\par +2. Identify:\par +a. This Autodesk software name and release number;\par +b. That you are requesting the source code for libintl v.0.19.8.3; and\par +c. The above URL ({\cf0{\field{\*\fldinst{HYPERLINK www.autodesk.com/lgplsource }}{\fldrslt{www.autodesk.com/lgplsource\ul0\cf0}}}}\f0\fs22 )\par +so that Autodesk may properly respond to your request. The offer to receive this libintl source code via the above URL ({\cf0{\field{\*\fldinst{HYPERLINK www.autodesk.com/lgplsource }}{\fldrslt{www.autodesk.com/lgplsource\ul0\cf0}}}}\f0\fs22 ) or by written request to Autodesk is valid for a period of three (3) years from the date you purchased your license to this Autodesk software.\par +You may modify, debug and relink libintl to this Autodesk software as provided under the terms of the GNU Lesser General Public License v.2.1.\par +\cf0\f1\fs18\par +\par + +\pard\nowidctlpar\sl288\slmult1\cf1\kerning1\b\f0\fs22\lang3082 Ncalc v.1.3.8.0:\cf2\kerning0\ul\b0\par + +\pard\widctlpar {{\field{\*\fldinst{HYPERLINK "https://nam11.safelinks.protection.outlook.com/?url=http%3A%2F%2Fncalc.codeplex.com%2F&data=04%7C01%7CJames.Conner%40autodesk.com%7Cdaecd65781944b855e7808d946251ff6%7C67bff79e7f914433a8e5c9252d2ddc1d%7C0%7C0%7C637617947520409253%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=MXJNaR69ECgPJDJYPSnyLqGx9AGSwz%2FQZR55FnDPv5U%3D&reserved=0" }}{\fldrslt{http://ncalc.codeplex.com/}}}}\f0\fs22\par +\cf1\ulnone\lang1033\'a9 2011 Sebastien Ros\par +\par +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\par +\par +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\par +\par +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\par +\cf0\f1\fs18\par + +\pard\nowidctlpar\sl288\slmult1\cf1\kerning1\b\f0\fs22 MIConvexHull.NET v.1.0.17.411\par + +\pard\widctlpar {\cf2\kerning0\ul\b0{\field{\*\fldinst{HYPERLINK "https://nam11.safelinks.protection.outlook.com/?url=https%3A%2F%2Fdesignengrlab.github.io%2FMIConvexHull%2F&data=04%7C01%7CJames.Conner%40autodesk.com%7Cdaecd65781944b855e7808d946251ff6%7C67bff79e7f914433a8e5c9252d2ddc1d%7C0%7C0%7C637617947520389325%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=NY1pGp4Rus1IhXoLEAgeQgcF3gsQK5hhpdBY1KGxtSY%3D&reserved=0" }}{\fldrslt{http://miconvexhull.codeplex.com/}}}}\cf2\kerning0\ul\b0\f0\fs22\par +{{\field{\*\fldinst{HYPERLINK "https://nam11.safelinks.protection.outlook.com/?url=http%3A%2F%2Fmiconvexhull.codeplex.com%2Flicense&data=04%7C01%7CJames.Conner%40autodesk.com%7Cdaecd65781944b855e7808d946251ff6%7C67bff79e7f914433a8e5c9252d2ddc1d%7C0%7C0%7C637617947520389325%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=hNSoZ7QXpdD4Fhf0DlaIzm2xF9XGsksCYNlWnpXQ%2BiM%3D&reserved=0" }}{\fldrslt{http://miconvexhull.codeplex.com/license}}}}\f0\fs22\par +\cf1\ulnone Copyright (c) 2010 David Sehnal, Matthew Campbell\par +\par +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\par +\par +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\par +\par +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \par +\cf0\f1\fs18\par + +\pard\nowidctlpar\sl288\slmult1\cf1\kerning1\b\f0\fs22 StarMath v.2.0.17:\par + +\pard\widctlpar {\cf2\kerning0\ul\b0{\field{\*\fldinst{HYPERLINK "https://nam11.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2FDesignEngrLab%2FStarMath%2Fblob%2Fmaster%2FLICENSE&data=04%7C01%7CJames.Conner%40autodesk.com%7Cdaecd65781944b855e7808d946251ff6%7C67bff79e7f914433a8e5c9252d2ddc1d%7C0%7C0%7C637617947520488895%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=QlLJQ5zjjCkV03%2BrjgrcdUTiz9O6pTyzKdtSv5xpHsg%3D&reserved=0" }}{\fldrslt{https://github.com/DesignEngrLab/StarMath/blob/master/LICENSE}}}}\cf2\kerning0\ul\b0\f0\fs22\par +\cf1\ulnone The MIT License (MIT)\par +Copyright (c) 2015 DesignEngrLab\par +\par +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\par +\par +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\par +\par +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\par +\par + +\pard\nowidctlpar\sl288\slmult1\kerning1\b DiffPlex v.1.6.3:\par + +\pard\widctlpar\kerning0\b0\'a9 2020 mmanela\par +\par +Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at\par +{\cf0{\field{\*\fldinst{HYPERLINK http://www.apache.org/licenses/LICENSE-2.0 }}{\fldrslt{http://www.apache.org/licenses/LICENSE-2.0\ul0\cf0}}}}\cf2\ul\f0\fs22 \cf1\ulnone Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.\cf2\ul\par +\cf0\ulnone\f1\fs18\par +\par + +\pard\nowidctlpar\sl288\slmult1\cf1\kerning2\b\f0\fs22 FontAwesome v.5.15.4:\par + +\pard\widctlpar {\cf2\kerning0\ul\b0{\field{\*\fldinst{HYPERLINK https://github.com/FortAwesome/Font-Awesome/blob/5.x/LICENSE.txt }}{\fldrslt{https://github.com/FortAwesome/Font-Awesome/blob/5.x/LICENSE.txt}}}}\f0\fs22\lang1031\par +\kerning0\b0\lang1033 CC BY 4.0 License\kerning2\b\lang1031 ({\cf2\kerning0\ul\b0\lang1033{\field{\*\fldinst{HYPERLINK https://creativecommons.org/licenses/by/4.0/ }}{\fldrslt{https://creativecommons.org/licenses/by/4.0/}}}}\f0\fs22 )\par +\kerning0\b0\lang1033 Copyright (c) 2022 Fonticons, Inc.\kerning2\b\lang1031 ({\cf2\kerning0\ul\b0\lang1033{\field{\*\fldinst{HYPERLINK https://fontawesome.com }}{\fldrslt{https://fontawesome.com}}}}\f0\fs22 )\par +\par +\kerning0\b0\lang1033 In the Font Awesome Free download, the CC BY 4.0 license applies to all icons packaged as SVG and JS file types.\par +\par +Icons: CC BY 4.0 License ({{\field{\*\fldinst{HYPERLINK https://creativecommons.org/licenses/by/4.0/ }}{\fldrslt{https://creativecommons.org/licenses/by/4.0/\ul0\cf0}}}}\f0\fs22 ): The Font Awesome Free download is licensed under a Creative Commons Attribution 4.0 International License and applies to all icons packaged as SVG and JS file types.\par +\par +Fonts: SIL OFL 1.1 License\par +In the Font Awesome Free download, the SIL OFL license applies to all icons packaged as web and desktop font files.\par +Copyright (c) 2023 Fonticons, Inc. ({{\field{\*\fldinst{HYPERLINK https://fontawesome.com }}{\fldrslt{https://fontawesome.com\ul0\cf0}}}}\f0\fs22 )\par +with Reserved Font Name: "Font Awesome".\par +This Font Software is licensed under the SIL Open Font License, Version 1.1. \par +This license can be found at: {{\field{\*\fldinst{HYPERLINK http://scripts.sil.org/OFL }}{\fldrslt{http://scripts.sil.org/OFL\ul0\cf0}}}}\f0\fs22\par +\cf0\f1\fs18\par +\cf1\f0\fs22 Code: MIT License ({{\field{\*\fldinst{HYPERLINK https://opensource.org/licenses/MIT }}{\fldrslt{https://opensource.org/licenses/MIT\ul0\cf0}}}}\f0\fs22 )\par +In the Font Awesome Free download, the MIT license applies to all non-font and\par +non-icon files.\par +Copyright 2023 Fonticons, Inc.\par +Permission is hereby granted, free of charge, to any person obtaining a copy of\par +this software and associated documentation files (the "Software"), to deal in the\par +Software without restriction, including without limitation the rights to use, copy,\par +modify, merge, publish, distribute, sublicense, and/or sell copies of the Software,\par +and to permit persons to whom the Software is furnished to do so, subject to the\par +following conditions:\par +The above copyright notice and this permission notice shall be included in all\par +copies or substantial portions of the Software.\par +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,\par +INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\par +PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\par +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\par +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\par +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\cf0\f1\fs18\line\line\cf1\f0\fs22\par + +\pard\nowidctlpar\sl288\slmult1\kerning1\b AngleSharp v.0.14.0: Copyright (c) 2013 - 2019 AngleSharp\par +AngleSharp.CSS v.0.14.2: Copyright \'a9 2013-2020 AngleSharp\par + +\pard\widctlpar\kerning0\b0 The MIT License (MIT)\par +\par +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\par +\par +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\par +\par +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\par +\cf0\f1\fs18\par + +\pard\nowidctlpar\sl288\slmult1\cf1\kerning1\b\f0\fs22 HTMLSanitizer v.5.0.372:\par + +\pard\widctlpar {\cf2\kerning0\ul\b0{\field{\*\fldinst{HYPERLINK "https://nam11.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fmganss%2FHtmlSanitizer&data=04%7C01%7CJames.Conner%40autodesk.com%7Cdaecd65781944b855e7808d946251ff6%7C67bff79e7f914433a8e5c9252d2ddc1d%7C0%7C0%7C637617947520220149%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=t7WD0mko%2B%2FF%2FdpKKLHyM93UCXrX%2BXwo3yUYVGPZQcGs%3D&reserved=0" }}{\fldrslt{https://github.com/mganss/HtmlSanitizer}}}}\cf2\kerning0\ul\b0\f0\fs22\par +{{\field{\*\fldinst{HYPERLINK "https://nam11.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fmganss%2FHtmlSanitizer%2Fblob%2Fmaster%2FLICENSE.md&data=04%7C01%7CJames.Conner%40autodesk.com%7Cdaecd65781944b855e7808d946251ff6%7C67bff79e7f914433a8e5c9252d2ddc1d%7C0%7C0%7C637617947520220149%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=phLGnloT%2FCglabebh%2FsUSc6iiDyt6D3vSMPPKA%2FgOJQ%3D&reserved=0" }}{\fldrslt{https://github.com/mganss/HtmlSanitizer/blob/master/LICENSE.md}}}}\f0\fs22\par +\cf1\ulnone The MIT License (MIT)\par +Copyright (c) 2013-2016 Michael Ganss and HtmlSanitizer contributors\par +\par +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\par +\par +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\par +\par +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\par +\par + +\pard\nowidctlpar\sl288\slmult1\kerning1\b\lang1031 Markdig v.0.22.0:\par + +\pard\widctlpar {\cf2\kerning0\ul\b0{\field{\*\fldinst{HYPERLINK "https://nam11.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Flunet-io%2Fmarkdig&data=04%7C01%7CJames.Conner%40autodesk.com%7Cdaecd65781944b855e7808d946251ff6%7C67bff79e7f914433a8e5c9252d2ddc1d%7C0%7C0%7C637617947520379375%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=IkaWjqj6UwIqoUB8EQOeZKYMz4qbWg8kbbCcZ0Qa%2Fhg%3D&reserved=0" }}{\fldrslt{https://github.com/lunet-io/markdig}}}}\cf2\kerning0\ul\b0\f0\fs22\par +{{\field{\*\fldinst{HYPERLINK "https://nam11.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Flunet-io%2Fmarkdig%2Fblob%2Fmaster%2Flicense.txt&data=04%7C01%7CJames.Conner%40autodesk.com%7Cdaecd65781944b855e7808d946251ff6%7C67bff79e7f914433a8e5c9252d2ddc1d%7C0%7C0%7C637617947520379375%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=eIL37c9G%2B11uq1htX8ARhSCvefpQIOMXjVAqMh1aceU%3D&reserved=0" }}{\fldrslt{https://github.com/lunet-io/markdig/blob/master/license.txt}}}}\f0\fs22\par +\cf1\ulnone\lang1033 Copyright (c) 2018-2019, Alexandre Mutel\par +All rights reserved.\par +\par +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\par +\par +1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.\par +\par +2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.\par +\par +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\par +\cf0\f1\fs18\par +\par + +\pard\nowidctlpar\sl288\slmult1\cf1\kerning1\b\f0\fs22 System.Buffers v.4.5.1\par + +\pard\widctlpar\kerning0\b0 The MIT License (MIT)\par +Copyright (c) .NET Foundation and Contributors\par +All rights reserved.\par +\par +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\par +\par +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\par +\par +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\par +\cf0\f1\fs18\par + +\pard\nowidctlpar\sl288\slmult1\cf1\kerning1\b\f0\fs22 System.Memory v.4.5.4\par + +\pard\widctlpar\kerning0\b0 The MIT License (MIT)\par +Copyright (c) .NET Foundation and Contributors\par +All rights reserved.\par +\par +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\par +\par +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\par +\par +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\par +\cf0\f1\fs18\par + +\pard\nowidctlpar\sl288\slmult1\cf1\kerning1\b\f0\fs22 System.Numerics.Vectors v.4.5.0\par + +\pard\widctlpar\kerning0\b0 The MIT License (MIT)\par +Copyright (c) .NET Foundation and Contributors\par +All rights reserved.\par +\par +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\par +\par +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\par +\par +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\par +\cf0\f1\fs18\par +\par + +\pard\nowidctlpar\sl288\slmult1\cf1\kerning1\b\f0\fs22 System.Text.Encoding.CodePages v.4.5.0 \par + +\pard\widctlpar\kerning0\b0 The MIT License (MIT)\par +Copyright (c) .NET Foundation and Contributors\par +All rights reserved.\par +\par +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\par +\par +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\par +\par +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\par +\cf0\f1\fs18\par + +\pard\nowidctlpar\sl288\slmult1\cf1\kerning1\b\f0\fs22 Rapidjson v.1.1.0:\par + +\pard\widctlpar\kerning0\b0 Copyright \'a9 2015 THL A29 Limited, a Tencent company, and Milo Yip. All rights reserved.\par +\par +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\par +\par +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \par +\cf0\f1\fs20\par + +\pard\nowidctlpar\sl288\slmult1\cf1\kerning1\b\f0\fs22 Mono.Cecil v.0.11.4:\par + +\pard\widctlpar\kerning0\b0 Copyright (c) 2008 - 2015 Jb Evain\par +Copyright (c) 2008 - 2011 Novell, Inc.\par +\par +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\par +\par +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\par +\par +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,\par +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\par +\cf0\f1\fs20\par +\cf1\kerning1\b\f0\fs22 LaunchDarkly.Clientsdk v.2.0.1\par +LaunchDarkly.CommonSdk v.5.5.0\par +LaunchDarkly.EventSource v.4.1.3\par +LaunchDarkly.InternalSdk v.2.3.2\par +LaunchDarkly.JsonStream v.1.0.3\par +LaunchDarkly.Logging v.1.0.1\line Copyright 2018 Catamorphic, Co.\par +\kerning0\b0\par +Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at {\cf0{\field{\*\fldinst{HYPERLINK http://www.apache.org/licenses/LICENSE-2.0 }}{\fldrslt{http://www.apache.org/licenses/LICENSE-2.0\ul0\cf0}}}}\f0\fs22 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.\par +\cf0\f1\fs20\par + +\pard\nowidctlpar\sl288\slmult1\cf1\kerning1\b\f0\fs22 CommandLineParser v.2.8.0:\par + +\pard\widctlpar\kerning0\b0 The MIT License (MIT)\par +Copyright (c) 2005 - 2015 Giacomo Stelluti Scala & Contributors\par +\par +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\par +\par +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\par +\par +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\par +\cf0\f1\fs20\par + +\pard\nowidctlpar\sl288\slmult1\cf1\kerning1\b\f0\fs22 Nlohmann.json v.3.7.3\par + +\pard\widctlpar\kerning0\b0 Copyright \'a9 2013-2022 Niels Lohmann\par +\par +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is\par +furnished to do so, subject to the following conditions:\par +\par +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\par +\par +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\par +\cf0\f1\fs20\par + +\pard\nowidctlpar\sl288\slmult1\cf1\kerning1\b\f0\fs22 Autodesk Artifakt Fonts\par + +\pard\widctlpar\kerning0\b0 Licensing information: \'a9 Autodesk, Inc. All Rights Reserved.\par +\par +The Artifakt font software is Autodesk proprietary and confidential, and may be used only by authorized users and only for Autodesk business purposes. Any use not authorized by Autodesk is not permitted and is an infringement of Autodesk's intellectual property rights as well as a breach of your agreement with Autodesk. Go to {\cf0{\field{\*\fldinst{HYPERLINK https://brand.autodesk.com/brand-system/typography }}{\fldrslt{https://brand.autodesk.com/brand-system/typography\ul0\cf0}}}}\f0\fs22 for detailed usage guidelines on when and how to use the Artifakt designer collection.\par +\cf0\f1\fs20\par + +\pard\nowidctlpar\sl288\slmult1\cf1\kerning1\b\f0\fs22 DirectX\par +{\cf2\kerning0\ul\b0{\field{\*\fldinst{HYPERLINK "https://github.com/DynamoDS/Dynamo/tree/master/tools/install/Extra/DirectX/License%20Agreements/DirectX%20SDK%20EULA.txt" }}{\fldrslt{https://github.com/DynamoDS/Dynamo/tree/master/tools/install/Extra/DirectX/License Agreements/DirectX SDK EULA.txt\par +}}}}{\cf2\kerning0\ul\b0\f0\fs22{\field{\*\fldinst{HYPERLINK "https://github.com/DynamoDS/Dynamo/tree/master/tools/install/Extra/DirectX/License%20Agreements/directx%20redist.txt" }}{\fldrslt{https://github.com/DynamoDS/Dynamo/tree/master/tools/install/Extra/DirectX/License Agreements/directx redist.txt\par +}}}}\cf0\kerning1\ulnone\b\f0\fs24\par +\cf1\fs22 ImageMagick\par +{\cf0\kerning0\b0{\field{\*\fldinst{HYPERLINK https://imagemagick.org/script/license.php }}{\fldrslt{https://imagemagick.org/script/license.php\ul0\cf0}}}}\cf0\kerning0\b0\f0\fs22\par +\par + +\pard\widctlpar\cf1\kerning1\b LiveChartsCore v.2.0.0-beta.855:\par +LiveChartsCore.SkiaSharpView v.2.0.0-beta.855:\par +LiveChartsCore.SkiaSharpView.WPF v.2.0.0-beta.855:\par +Copyright (c) 2021 Alberto Rodriguez Orozco\par +\par +MIT License\par +\par +\kerning0\b0 Permission is hereby granted, free of charge, to any person obtaining a copy\par +of this software and associated documentation files (the "Software"), to deal\par +in the Software without restriction, including without limitation the rights\par +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\par +copies of the Software, and to permit persons to whom the Software is\par +furnished to do so, subject to the following conditions:\par +\par +The above copyright notice and this permission notice shall be included in all\par +copies or substantial portions of the Software.\par +\par +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\par +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\par +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\par +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\par +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\par +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\par +\cf0\f1\fs20\lang1053\par +\cf1\kerning1\b\f0\fs22 Magick.NET.Core v7.0.1:\par + +\pard\nowidctlpar\sl288\slmult1 Copyright [2013] [dlemstra]\par +{\cf0\kerning0\b0{\field{\*\fldinst{HYPERLINK https://github.com/dlemstra/Magick.NET/blob/main/License.txt }}{\fldrslt{https://github.com/dlemstra/Magick.NET/blob/main/License.txt\ul0\cf0}}}}\cf0\kerning0\b0\f0\fs22\par +\cf2\ul\par + +\pard\widctlpar\cf1\ulnone\lang1033 Licensed under the Apache License, Version 2.0 (the "License");\par +you may not use this file except in compliance with the License.\par +You may obtain a copy of the License at\par +\par + +\pard\nowidctlpar\sl288\slmult1 {\cf2\ul\lang1053{\field{\*\fldinst{HYPERLINK http://www.apache.org/licenses/LICENSE-2.0 }}{\fldrslt{http://www.apache.org/licenses/LICENSE-2.0}}}}\cf2\ul\f0\fs22\lang1053\par + +\pard\widctlpar\cf1\ulnone\lang1033\par +Unless required by applicable law or agreed to in writing, software\par +distributed under the License is distributed on an "AS IS" BASIS,\par +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\par +See the License for the specific language governing permissions and\par +limitations under the License.\par + +\pard\nowidctlpar\sl288\slmult1\cf0\fs24\lang1053\par +Magick.NET-Q8-AnyCPU v7.24.1:\par +{\cf2\ul\fs22{\field{\*\fldinst{HYPERLINK https://imagemagick.org/script/license.php }}{\fldrslt{https://imagemagick.org/script/license.php}}}}\cf2\ul\f0\fs22\par + +\pard\widctlpar\cf1\ulnone\lang1033 Copyright 1999-2021 ImageMagick Studio LLC, a non-profit organization dedicated to making software imaging solutions freely available.\par + +\pard\nowidctlpar\sl288\slmult1\cf0\fs24\lang1053\par +\cf1\kerning1\b\fs22\lang1033 Open XML SDK\par +{\cf0\kerning0\b0\lang1053{\field{\*\fldinst{HYPERLINK https://github.com/OfficeDev/Open-XML-SDK }}{\fldrslt{https://github.com/OfficeDev/Open-XML-SDK\ul0\cf0}}}}\cf2\kerning0\ul\b0\f0\fs22\lang1053\par +{\cf0\ulnone{\field{\*\fldinst{HYPERLINK https://github.com/OfficeDev/Open-XML-SDK/blob/main/LICENSE }}{\fldrslt{https://github.com/OfficeDev/Open-XML-SDK/blob/main/LICENSE\ul0\cf0}}}}\f0\fs22\par +\cf0\kerning1\ulnone\b\fs24\par +\cf1\fs22 Python Standard Library\par +{\cf2\kerning0\ul\b0{\field{\*\fldinst{HYPERLINK "https://docs.python.org/2.7/library/" }}{\fldrslt{https://docs.python.org/2.7/library/\par +}}}}{\cf2\kerning0\ul\b0\f0\fs22{\field{\*\fldinst{HYPERLINK "https://docs.python.org/2.7/license.html" }}{\fldrslt{https://docs.python.org/2.7/license.html\par +}}}}\cf1\kerning1\ulnone\b\f0\fs22\par +\lang1033 Python Modules\cf4\highlight5\kerning0\b0\par + +\pard\nowidctlpar\sl276\slmult1 {\cf0\highlight0{\field{\*\fldinst{HYPERLINK https://numpy.org/ }}{\fldrslt{https://numpy.org/\ul0\cf0}}}}\cf2\highlight0\ul\f0\fs22\lang1053 \cf1\ulnone\lang1033 License: Distributed under a liberal\cf6\highlight5\~{\cf0\highlight0{\field{\*\fldinst{HYPERLINK "https://github.com/numpy/numpy/blob/main/LICENSE.txt" }}{\fldrslt{\ul\cf3\cf7\highlight5\ul BSD license}}}}\cf0\highlight0\f0\fs22\par +{{\field{\*\fldinst{HYPERLINK https://pandas.pydata.org/ }}{\fldrslt{https://pandas.pydata.org/\ul0\cf0}}}}\cf2\ul\f0\fs22\lang1053 \cf1\ulnone\lang1033 License\b :\b0 BSD 3-Clause "New" or "Revised" License\cf8\par +{\cf0{\field{\*\fldinst{HYPERLINK https://scipy.org/ }}{\fldrslt{https://scipy.org/\ul0\cf0}}}}\cf0\f0\fs22 \cf1 License:\b \b0 Distributed under a liberal\b\~{\cf0\b0{\field{\*\fldinst{HYPERLINK "https://github.com/numpy/numpy/blob/main/LICENSE.txt" }}{\fldrslt{\ul\cf3\cf7\highlight5\ul BSD license}}}}\cf0\b0\f0\fs22\par +{{\field{\*\fldinst{HYPERLINK https://pypi.org/project/openpyxl/ }}{\fldrslt{https://pypi.org/project/openpyxl/\ul0\cf0}}}}\f0\fs22 \cf1 License:\~MIT License (MIT)\cf4\highlight5\par +{\cf0\highlight0{\field{\*\fldinst{HYPERLINK https://matplotlib.org/ }}{\fldrslt{https://matplotlib.org/\ul0\cf0}}}}\cf0\highlight0\f0\fs22 \cf1 License\b : \b0 Matplotlib only uses BSD compatible code, and its license is based on the\~{{\field{\*\fldinst{HYPERLINK "https://docs.python.org/3/license.html" }}{\fldrslt{\ul\cf3\cf3\ul PSF}}}}\f0\fs22\~license\cf6\highlight5\par +{\cf0\highlight0{\field{\*\fldinst{HYPERLINK https://pypi.org/project/Pillow/ }}{\fldrslt{https://pypi.org/project/Pillow/\ul0\cf0}}}}\f0\fs22 \cf1\highlight0\b License:\b0\~Historical Permission Notice\b and Disclaimer (HPND) \cf4\highlight5\b0\par + +\pard\nowidctlpar\sl288\slmult1\cf0\highlight0\kerning1\fs24\lang1053\par +\par +\cf1\b\fs22\lang1033\par +Xceed Extended WPF Toolkit v.5.0.103\par +{\cf2\kerning0\ul\b0\lang1036{\field{\*\fldinst{HYPERLINK "https://opensource.org/licenses/ms-pl.html" }}{\fldrslt{Microsoft Public License\par +}}}}{\cf0\kerning0\b0\f0\fs22\lang1036{\field{\*\fldinst{HYPERLINK https://github.com/xceedsoftware/wpftoolkit/blob/0ed4ed84152d6a3e2a627f2ef05f82627fdaf3fc/license.md }}{\fldrslt{https://github.com/xceedsoftware/wpftoolkit/blob/0ed4ed84152d6a3e2a627f2ef05f82627fdaf3fc/license.md\ul0\cf0}}}}\cf1\kerning1\ulnone\b\f0\fs22\par + +\pard\widctlpar\cf0\f1\fs20\par + +\pard\nowidctlpar\sl288\slmult1\cf1\f0\fs22\lang1033 Microsoft.Web.WebView2 v.1.0.2045.28\par + +\pard\widctlpar\kerning0\b0 Copyright (C) Microsoft Corporation. All rights reserved.\par +\par +Redistribution and use in source and binary forms, with or without\par +modification, are permitted provided that the following conditions are\par +met:\par +\par + * Redistributions of source code must retain the above copyright\par +notice, this list of conditions and the following disclaimer.\par + * Redistributions in binary form must reproduce the above\par +copyright notice, this list of conditions and the following disclaimer\par +in the documentation and/or other materials provided with the\par +distribution.\par + * The name of Microsoft Corporation, or the names of its contributors \par +may not be used to endorse or promote products derived from this\par +software without specific prior written permission.\par +\par +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\par +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\par +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\par +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\par +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\par +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\par +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\par +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\par +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\par +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\par +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\par +\par +\kerning1\b Lucene.Net v.4.8.0-beta00016\par +Lucene.Net.Analysis.Common v.4.8.0-beta00016\par +Lucene.Net.Queries v.4.8.0-beta00016\par +Lucene.Net.QueryParser v.4.8.0-beta00016\par + +\pard\nowidctlpar\sl288\slmult1 Lucene.Net.Sandbox v.4.8.0-beta00016\par +{\cf2\kerning0\ul\b0{\field{\*\fldinst{HYPERLINK "https://lucenenet.apache.org/"}}{\fldrslt{https://lucenenet.apache.org/\par + +\pard\widctlpar }}}}{\cf0\kerning0\b0\f0\fs22{\field{\*\fldinst{HYPERLINK https://github.com/apache/lucenenet/blob/master/LICENSE.txt }}{\fldrslt{https://github.com/apache/lucenenet/blob/master/LICENSE.txt\ul0\cf0}}}}\f0\fs22\par +\cf1\ulnone Copyright 2022 Apache Lucene.NET\par +\par +Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at {\cf0{\field{\*\fldinst{HYPERLINK http://www.apache.org/licenses/LICENSE-2.0 }}{\fldrslt{http://www.apache.org/licenses/LICENSE-2.0\ul0\cf0}}}}\f0\fs22 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.\par +\par + +\pard\nowidctlpar\sl288\slmult1\kerning1\b\lang1036 Microsoft.Extensions.Configuration.Json v6.0.0\par +\b0\lang1033 The MIT License (MIT)\par +{\cf0{\field{\*\fldinst{HYPERLINK https://github.com/dotnet/runtime/blob/main/LICENSE.TXT }}{\fldrslt{https://github.com/dotnet/runtime/blob/main/LICENSE.TXT\ul0\cf0}}}}\cf2\f0\fs22\par +\b\par +\cf1\b0 Copyright (c) .NET Foundation and Contributors\par +All rights reserved.\par +\par +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\par +\par +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\par +\par +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\cf2\b\par +\cf1\par +CsvHelper v30.0.1\par +\b0 Apache 2.0\par +{\cf0{\field{\*\fldinst{HYPERLINK https://github.com/JoshClose/CsvHelper/blob/master/LICENSE.txt }}{\fldrslt{https://github.com/JoshClose/CsvHelper/blob/master/LICENSE.txt\ul0\cf0}}}}\cf2\f0\fs22\par + +\pard\widctlpar\cf1\kerning0\par +Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at {\cf0{\field{\*\fldinst{HYPERLINK http://www.apache.org/licenses/LICENSE-2.0 }}{\fldrslt{http://www.apache.org/licenses/LICENSE-2.0\ul0\cf0}}}}\f0\fs22 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.\par + +\pard\nowidctlpar\sl288\slmult1\kerning1\b\par +Prism.Core v8.1.97\par +\b0 The MIT License (MIT)\par +{\cf2\kerning0\ul\fs24{\field{\*\fldinst{HYPERLINK https://github.com/PrismLibrary/Prism/blob/master/LICENSE.txt }}{\fldrslt{https://github.com/PrismLibrary/Prism/blob/master/LICENSE.txt}}}}\cf2\kerning0\ul\f0\fs24\par +\cf1\kerning1\ulnone\b\fs22\par + +\pard\widctlpar\kerning0\b0 Copyright (c) Prism Library\par +\par +All rights reserved. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: \par +\par +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\par +\par +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\par + +\pard\nowidctlpar\sl288\slmult1 {\cf2\ul{\field{\*\fldinst{HYPERLINK "https://lucenenet.apache.org/"}}{\fldrslt{\par +}}}}\kerning1\b\f0\fs22 MimeMapping v2.0.0\par +\b0 MIT License\par + +\pard\widctlpar {\cf0{\field{\*\fldinst{HYPERLINK https://licenses.nuget.org/MIT }}{\fldrslt{https://licenses.nuget.org/MIT\ul0\cf0}}}}\cf2\f0\fs22\par +\cf1\kerning0 Copyright (c) \par +\par +Permission is hereby granted, free of charge, to any person obtaining a copy of\~\i this software and associated documentation files\i0\~(the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\par +The above copyright notice and this permission notice\~\i (including the next paragraph)\i0\~shall be included in all copies or substantial portions of the Software.\par +\par +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\~\i THE AUTHORS OR COPYRIGHT HOLDERS\i0\~BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\cf7\ul\par +\cf1\ulnone\par + +\pard\nowidctlpar\sl288\slmult1\kerning1\b DotNetProjects.Extended.Wpf.Toolkit v5.0.103\par +\b0 Microsoft Public License\par + +\pard\widctlpar {\cf2\kerning0\ul{\field{\*\fldinst{HYPERLINK https://github.com/dotnetprojects/WpfExtendedToolkit/blob/Extended/LICENSE.md }}{\fldrslt{https://github.com/dotnetprojects/WpfExtendedToolkit/blob/Extended/LICENSE.md}}}}\cf2\kerning0\ul\f0\fs22\par +\par + +\pard\nowidctlpar\sl288\slmult1\cf1\kerning1\ulnone This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software.\par +\par +1. Definitions\par +The terms "reproduce," "reproduction," "derivative works," and "distribution" have the same meaning here as under U.S. copyright law. A "contribution" is the original software, or any additions or changes to the software. A "contributor" is any person that distributes its contribution under this license. "Licensed patents" are a contributor's patent claims that read directly on its contribution.\par +2. Grant of Rights\par +(A) Copyright Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create.\par +(B) Patent Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software.\par +3. Conditions and Limitations\par +(A) No Trademark License- This license does not grant you rights to use any contributors' name, logo, or trademarks.\par +(B) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically.\par +(C) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software.\par +(D) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license.\par +(E) The software is licensed "as-is." You bear the risk of using it. The contributors give no express warranties, guarantees, or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement.\par + +\pard\widctlpar\kerning0\par +CastleCore v.5.1.1\par +APACHE 2.0\par +Copyright 2004-2021 Castle Project - {{\field{\*\fldinst{HYPERLINK http://www.castleproject.org/ }}{\fldrslt{http://www.castleproject.org/\ul0\cf0}}}}\f0\fs22\par +\par +{{\field{\*\fldinst{HYPERLINK https://github.com/castleproject/Core/blob/master/LICENSE }}{\fldrslt{https://github.com/castleproject/Core/blob/master/LICENSE\ul0\cf0}}}}\f0\fs22\par +\par +DynamicLanguageRuntime v.1.2.2\par +APACHE 2.0\par +{{\field{\*\fldinst{HYPERLINK https://github.com/IronLanguages/dlr/blob/master/LICENSE }}{\fldrslt{https://github.com/IronLanguages/dlr/blob/master/LICENSE\ul0\cf0}}}}\f0\fs22\par +\par +Copyright (c) .NET Foundation and Contributors\par + All Rights Reserved\par +\par +Licensed under the Apache License, Version 2.0 (the ""License""); you may not use this file except in compliance with the License. You may obtain a copy of the License at {{\field{\*\fldinst{HYPERLINK http://www.apache.org/licenses/LICENSE-2.0 }}{\fldrslt{http://www.apache.org/licenses/LICENSE-2.0\ul0\cf0}}}}\f0\fs22 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an ""AS IS"" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.\par +\par +HarfBuzzSharp v.2.8.2.4-preview.84\par +HarfBuzzSharp.NativeAssets.macOS v.2.8.2.4-preview.84\par +HarfBuzzSharp.NativeAssets.Win32 v.2.8.2.4-preview.84\par +Copyright (c) 2015-2016 Xamarin, Inc.\par +Copyright (c) 2017-2018 Microsoft Corporation.\par +\par +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\par +\par +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\par +\par +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\par +\par +SkiaSharp v.2.88.4-preview.84\par +SkiaSharp.HarfBuzz v.2.88.4-preview.84\par +SkiaSharp.NativeAssets.macOS v.2.88.4-preview.84\par +SkiaSharp.NativeAssets.Win32 v.2.88.4-preview.84\par +SkiaSharp.Views.Desktop.Common v.2.88.4-preview.84\par +SkiaSharp.Views.WPF v.2.88.4-preview.84\par +Copyright (c) 2015-2016 Xamarin, Inc.\par +Copyright (c) 2017-2018 Microsoft Corporation.\par +\par +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\par +\par +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\par +\par +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\par +\par +coverlet.collector v.3.1.2\par +The MIT License (MIT)\par +{{\field{\*\fldinst{HYPERLINK https://github.com/coverlet-coverage/coverlet/blob/master/LICENSE }}{\fldrslt{https://github.com/coverlet-coverage/coverlet/blob/master/LICENSE\ul0\cf0}}}}\f0\fs22\par +\par +Copyright (c) 2018 Toni Solarin-Sodara\par +\par +Permission is hereby granted, free of charge, to any person obtaining a copy\par +of this software and associated documentation files (the "Software"), to deal\par +in the Software without restriction, including without limitation the rights\par +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\par +copies of the Software, and to permit persons to whom the Software is\par +furnished to do so, subject to the following conditions:\par +\par +The above copyright notice and this permission notice shall be included in all\par +copies or substantial portions of the Software.\par +\par +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\par +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\par +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\par +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\par +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\par +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\par +SOFTWARE.\par +\par +J2N v.2.0.0\par +APACHE 2.0\par +{{\field{\*\fldinst{HYPERLINK https://github.com/NightOwl888/J2N/blob/main/LICENSE.txt }}{\fldrslt{https://github.com/NightOwl888/J2N/blob/main/LICENSE.txt\ul0\cf0}}}}\f0\fs22\par +\par +JUnitTestLogger v.1.1.0\par +MIT License\par +{{\field{\*\fldinst{HYPERLINK https://github.com/syncromatics/JUnitTestLogger/blob/master/LICENSE }}{\fldrslt{https://github.com/syncromatics/JUnitTestLogger/blob/master/LICENSE\ul0\cf0}}}}\f0\fs22\par +\par +Copyright (c) 2017 GMV Syncromatics Engineering\par +\par +Permission is hereby granted, free of charge, to any person obtaining a copy\par +of this software and associated documentation files (the "Software"), to deal\par +in the Software without restriction, including without limitation the rights\par +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\par +copies of the Software, and to permit persons to whom the Software is\par +furnished to do so, subject to the following conditions:\par +\par +The above copyright notice and this permission notice shall be included in all\par +copies or substantial portions of the Software.\par +\par +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\par +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\par +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\par +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\par +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\par +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\par +SOFTWARE.\par +\par +JunitXml.TestLogger v.3.0.124\par +MIT License\par +{{\field{\*\fldinst{HYPERLINK https://github.com/spekt/junit.testlogger/blob/master/LICENSE.md }}{\fldrslt{https://github.com/spekt/junit.testlogger/blob/master/LICENSE.md\ul0\cf0}}}}\f0\fs22\par +\par +Copyright (c) 2017-2018\par +\par +Permission is hereby granted, free of charge, to any person obtaining a copy\par +of this software and associated documentation files (the "Software"), to deal\par +in the Software without restriction, including without limitation the rights\par +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\par +copies of the Software, and to permit persons to whom the Software is\par +furnished to do so, subject to the following conditions:\par +\par +The above copyright notice and this permission notice shall be included in all\par +copies or substantial portions of the Software.\par +\par +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\par +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\par +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\par +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\par +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\par +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\par +SOFTWARE.\par +\par +NUnit.Analyzers v.3.3.0\par +{{\field{\*\fldinst{HYPERLINK https://github.com/nunit/nunit.analyzers/blob/master/license.txt }}{\fldrslt{https://github.com/nunit/nunit.analyzers/blob/master/license.txt\ul0\cf0}}}}\f0\fs22\par +\par +Permission is hereby granted, free of charge, to any person obtaining a copy\par +of this software and associated documentation files (the "Software"), to deal\par +in the Software without restriction, including without limitation the rights\par +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\par +copies of the Software, and to permit persons to whom the Software is\par +furnished to do so, subject to the following conditions:\par +\par +The above copyright notice and this permission notice shall be included in\par +all copies or substantial portions of the Software.\par +\par +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\par +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\par +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\par +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\par +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\par +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\par +THE SOFTWARE.\par +\par +NUnit3TestAdapter v.4.2.1\par +MIT License\par +} + \ No newline at end of file diff --git a/doc/distrib/MLNodeAutocompleteConsent.rtf b/doc/distrib/MLNodeAutocompleteConsent.rtf new file mode 100644 index 00000000000..4269ec83948 --- /dev/null +++ b/doc/distrib/MLNodeAutocompleteConsent.rtf @@ -0,0 +1,195 @@ +{\rtf1\adeflang1025\ansi\ansicpg1252\uc1\adeff37\deff0\stshfdbch0\stshfloch37\stshfhich37\stshfbi37\deflang1033\deflangfe1033\themelang1033\themelangfe0\themelangcs0{\fonttbl{\f0\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;} +{\f11\fbidi \fmodern\fcharset128\fprq1{\*\panose 02020609040205080304}MS Mincho{\*\falt ?l?r ??\'81\'66c};}{\f34\fbidi \froman\fcharset0\fprq2{\*\panose 02040503050406030204}Cambria Math;} +{\f37\fbidi \fswiss\fcharset0\fprq2{\*\panose 020f0502020204030204}Calibri;}{\f40\fbidi \fswiss\fcharset0\fprq2{\*\panose 020b0604030504040204}Verdana;}{\f43\fbidi \fmodern\fcharset128\fprq1{\*\panose 00000000000000000000}@MS Mincho;} +{\flomajor\f31500\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\fdbmajor\f31501\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;} +{\fhimajor\f31502\fbidi \froman\fcharset0\fprq2{\*\panose 02040503050406030204}Cambria;}{\fbimajor\f31503\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;} +{\flominor\f31504\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\fdbminor\f31505\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;} +{\fhiminor\f31506\fbidi \fswiss\fcharset0\fprq2{\*\panose 020f0502020204030204}Calibri;}{\fbiminor\f31507\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f45\fbidi \froman\fcharset238\fprq2 Times New Roman CE;} +{\f46\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\f48\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\f49\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\f50\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);} +{\f51\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\f52\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\f53\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);} +{\f157\fbidi \fmodern\fcharset0\fprq1 MS Mincho Western{\*\falt ?l?r ??\'81\'66c};}{\f155\fbidi \fmodern\fcharset238\fprq1 MS Mincho CE{\*\falt ?l?r ??\'81\'66c};}{\f156\fbidi \fmodern\fcharset204\fprq1 MS Mincho Cyr{\*\falt ?l?r ??\'81\'66c};} +{\f158\fbidi \fmodern\fcharset161\fprq1 MS Mincho Greek{\*\falt ?l?r ??\'81\'66c};}{\f159\fbidi \fmodern\fcharset162\fprq1 MS Mincho Tur{\*\falt ?l?r ??\'81\'66c};}{\f162\fbidi \fmodern\fcharset186\fprq1 MS Mincho Baltic{\*\falt ?l?r ??\'81\'66c};} +{\f385\fbidi \froman\fcharset238\fprq2 Cambria Math CE;}{\f386\fbidi \froman\fcharset204\fprq2 Cambria Math Cyr;}{\f388\fbidi \froman\fcharset161\fprq2 Cambria Math Greek;}{\f389\fbidi \froman\fcharset162\fprq2 Cambria Math Tur;} +{\f392\fbidi \froman\fcharset186\fprq2 Cambria Math Baltic;}{\f393\fbidi \froman\fcharset163\fprq2 Cambria Math (Vietnamese);}{\f415\fbidi \fswiss\fcharset238\fprq2 Calibri CE;}{\f416\fbidi \fswiss\fcharset204\fprq2 Calibri Cyr;} +{\f418\fbidi \fswiss\fcharset161\fprq2 Calibri Greek;}{\f419\fbidi \fswiss\fcharset162\fprq2 Calibri Tur;}{\f420\fbidi \fswiss\fcharset177\fprq2 Calibri (Hebrew);}{\f421\fbidi \fswiss\fcharset178\fprq2 Calibri (Arabic);} +{\f422\fbidi \fswiss\fcharset186\fprq2 Calibri Baltic;}{\f423\fbidi \fswiss\fcharset163\fprq2 Calibri (Vietnamese);}{\f445\fbidi \fswiss\fcharset238\fprq2 Verdana CE;}{\f446\fbidi \fswiss\fcharset204\fprq2 Verdana Cyr;} +{\f448\fbidi \fswiss\fcharset161\fprq2 Verdana Greek;}{\f449\fbidi \fswiss\fcharset162\fprq2 Verdana Tur;}{\f452\fbidi \fswiss\fcharset186\fprq2 Verdana Baltic;}{\f453\fbidi \fswiss\fcharset163\fprq2 Verdana (Vietnamese);} +{\f477\fbidi \fmodern\fcharset0\fprq1 @MS Mincho Western;}{\f475\fbidi \fmodern\fcharset238\fprq1 @MS Mincho CE;}{\f476\fbidi \fmodern\fcharset204\fprq1 @MS Mincho Cyr;}{\f478\fbidi \fmodern\fcharset161\fprq1 @MS Mincho Greek;} +{\f479\fbidi \fmodern\fcharset162\fprq1 @MS Mincho Tur;}{\f482\fbidi \fmodern\fcharset186\fprq1 @MS Mincho Baltic;}{\flomajor\f31508\fbidi \froman\fcharset238\fprq2 Times New Roman CE;} +{\flomajor\f31509\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\flomajor\f31511\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\flomajor\f31512\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;} +{\flomajor\f31513\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\flomajor\f31514\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\flomajor\f31515\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;} +{\flomajor\f31516\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fdbmajor\f31518\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\fdbmajor\f31519\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;} +{\fdbmajor\f31521\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fdbmajor\f31522\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\fdbmajor\f31523\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);} +{\fdbmajor\f31524\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fdbmajor\f31525\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\fdbmajor\f31526\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);} +{\fhimajor\f31528\fbidi \froman\fcharset238\fprq2 Cambria CE;}{\fhimajor\f31529\fbidi \froman\fcharset204\fprq2 Cambria Cyr;}{\fhimajor\f31531\fbidi \froman\fcharset161\fprq2 Cambria Greek;}{\fhimajor\f31532\fbidi \froman\fcharset162\fprq2 Cambria Tur;} +{\fhimajor\f31535\fbidi \froman\fcharset186\fprq2 Cambria Baltic;}{\fhimajor\f31536\fbidi \froman\fcharset163\fprq2 Cambria (Vietnamese);}{\fbimajor\f31538\fbidi \froman\fcharset238\fprq2 Times New Roman CE;} +{\fbimajor\f31539\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\fbimajor\f31541\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fbimajor\f31542\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;} +{\fbimajor\f31543\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\fbimajor\f31544\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fbimajor\f31545\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;} +{\fbimajor\f31546\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\flominor\f31548\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\flominor\f31549\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;} +{\flominor\f31551\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\flominor\f31552\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\flominor\f31553\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);} +{\flominor\f31554\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\flominor\f31555\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\flominor\f31556\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);} +{\fdbminor\f31558\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\fdbminor\f31559\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\fdbminor\f31561\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;} +{\fdbminor\f31562\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\fdbminor\f31563\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\fdbminor\f31564\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);} +{\fdbminor\f31565\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\fdbminor\f31566\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fhiminor\f31568\fbidi \fswiss\fcharset238\fprq2 Calibri CE;} +{\fhiminor\f31569\fbidi \fswiss\fcharset204\fprq2 Calibri Cyr;}{\fhiminor\f31571\fbidi \fswiss\fcharset161\fprq2 Calibri Greek;}{\fhiminor\f31572\fbidi \fswiss\fcharset162\fprq2 Calibri Tur;} +{\fhiminor\f31573\fbidi \fswiss\fcharset177\fprq2 Calibri (Hebrew);}{\fhiminor\f31574\fbidi \fswiss\fcharset178\fprq2 Calibri (Arabic);}{\fhiminor\f31575\fbidi \fswiss\fcharset186\fprq2 Calibri Baltic;} +{\fhiminor\f31576\fbidi \fswiss\fcharset163\fprq2 Calibri (Vietnamese);}{\fbiminor\f31578\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\fbiminor\f31579\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;} +{\fbiminor\f31581\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fbiminor\f31582\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\fbiminor\f31583\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);} +{\fbiminor\f31584\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fbiminor\f31585\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\fbiminor\f31586\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}} +{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0; +\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;\red0\green0\blue0;\red0\green0\blue0;\red72\green148\blue208;\cbackgroundone\ctint255\cshade191\red191\green191\blue191;}{\*\defchp +\f37\fs22\cf19 }{\*\defpap \ql \li0\ri0\sa200\sl276\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 }\noqfpromote {\stylesheet{\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 \rtlch\fcs1 \af37\afs22\alang1025 +\ltrch\fcs0 \f37\fs22\cf19\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \snext0 \sqformat \spriority0 \styrsid9534305 Normal;}{\s1\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\outlinelevel0\rin0\lin0\itap0 \rtlch\fcs1 \ab\af0\afs32\alang1025 +\ltrch\fcs0 \b\fs32\cf19\lang1033\langfe1033\kerning32\loch\f31502\hich\af31502\dbch\af31501\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext0 \slink15 \sqformat \spriority9 \styrsid7559448 heading 1;}{ +\s2\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\outlinelevel1\rin0\lin0\itap0 \rtlch\fcs1 \ab\ai\af0\afs28\alang1025 \ltrch\fcs0 \b\i\fs28\cf19\lang1033\langfe1033\loch\f31502\hich\af31502\dbch\af31501\cgrid\langnp1033\langfenp1033 +\sbasedon0 \snext0 \slink16 \sqformat \spriority9 \styrsid7559448 heading 2;}{\s3\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\outlinelevel2\rin0\lin0\itap0 \rtlch\fcs1 \ab\af0\afs26\alang1025 \ltrch\fcs0 +\b\fs26\cf19\lang1033\langfe1033\loch\f31502\hich\af31502\dbch\af31501\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext0 \slink17 \sqformat \spriority9 \styrsid7559448 heading 3;}{\*\cs10 \additive \sunhideused \spriority1 Default Paragraph Font;}{\* +\ts11\tsrowd\trftsWidthB3\trpaddl108\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\trcbpat1\trcfpat1\tblind0\tblindtype3\tsvertalt\tsbrdrt\tsbrdrl\tsbrdrb\tsbrdrr\tsbrdrdgl\tsbrdrdgr\tsbrdrh\tsbrdrv \ql \li0\ri0\sa200\sl276\slmult1 +\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af37\afs22\alang1025 \ltrch\fcs0 \f37\fs22\cf19\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \snext11 \ssemihidden \sunhideused Normal Table;}{\*\cs15 \additive +\rtlch\fcs1 \ab\af0\afs32 \ltrch\fcs0 \b\fs32\kerning32\loch\f31502\hich\af31502\dbch\af31501 \sbasedon10 \slink1 \slocked \spriority9 \styrsid7559448 Heading 1 Char;}{\*\cs16 \additive \rtlch\fcs1 \ab\ai\af0\afs28 \ltrch\fcs0 +\b\i\fs28\loch\f31502\hich\af31502\dbch\af31501 \sbasedon10 \slink2 \slocked \spriority9 \styrsid7559448 Heading 2 Char;}{\*\cs17 \additive \rtlch\fcs1 \ab\af0\afs26 \ltrch\fcs0 \b\fs26\loch\f31502\hich\af31502\dbch\af31501 +\sbasedon10 \slink3 \slocked \spriority9 \styrsid7559448 Heading 3 Char;}}{\*\pgptbl {\pgp\ipgp0\itap0\li0\ri0\sb0\sa0}{\pgp\ipgp0\itap0\li0\ri0\sb0\sa0}}{\*\rsidtbl \rsid483671\rsid3037294\rsid5012088\rsid5136836\rsid5309285\rsid5378609\rsid6827092 +\rsid6963270\rsid7174336\rsid7559448\rsid9534305\rsid10551617\rsid12388035\rsid14363366\rsid14811469\rsid14831659\rsid15021189\rsid15617602\rsid16192969}{\mmathPr\mmathFont34\mbrkBin0\mbrkBinSub0\msmallFrac0\mdispDef1\mlMargin0\mrMargin0\mdefJc1 +\mwrapIndent1440\mintLim0\mnaryLim1}{\info{\author Limiardi Sancerio}{\operator Jesus Alfredo Alvi\'f1o}{\creatim\yr2015\mo5\dy4\hr12\min55}{\revtim\yr2023\mo11\dy17\hr16\min18}{\version16}{\edmins11}{\nofpages1}{\nofwords57}{\nofchars331} +{\*\company Autodesk, Inc.}{\nofcharsws387}{\vern79}}{\*\xmlnstbl {\xmlns1 http://schemas.microsoft.com/office/word/2003/wordml}}\paperw12240\paperh15840\margl1440\margr1440\margt1440\margb1440\gutter0\ltrsect +\widowctrl\ftnbj\aenddoc\trackmoves0\trackformatting1\donotembedsysfont1\relyonvml0\donotembedlingdata0\grfdocevents0\validatexml1\showplaceholdtext0\ignoremixedcontent0\saveinvalidxml0\showxmlerrors1\noxlattoyen +\expshrtn\noultrlspc\dntblnsbdb\nospaceforul\formshade\horzdoc\dgmargin\dghspace180\dgvspace180\dghorigin1440\dgvorigin1440\dghshow1\dgvshow1 +\jexpand\viewkind1\viewscale100\pgbrdrhead\pgbrdrfoot\splytwnine\ftnlytwnine\htmautsp\nolnhtadjtbl\useltbaln\alntblind\lytcalctblwd\lyttblrtgr\lnbrkrule\nobrkwrptbl\snaptogridincell\allowfieldendsel\wrppunct +\asianbrkrule\rsidroot9534305\newtblstyruls\nogrowautofit\usenormstyforlist\noindnmbrts\felnbrelev\nocxsptable\indrlsweleven\noafcnsttbl\afelev\utinl\hwelev\spltpgpar\notcvasp\notbrkcnstfrctbl\notvatxbx\krnprsnet\cachedcolbal \nouicompat \fet0 +{\*\wgrffmtfilter 2450}\nofeaturethrottle1\ilfomacatclnup0\ltrpar \sectd \ltrsect\linex0\endnhere\sectlinegrid360\sectdefaultcl\sftnbj {\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang +{\pntxta .}}{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl4\pnlcltr\pnstart1\pnindent720\pnhang {\pntxta )}}{\*\pnseclvl5\pndec\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang +{\pntxtb (}{\pntxta )}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl8\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}} +\pard\plain \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid9534305 \rtlch\fcs1 \af37\afs22\alang1025 \ltrch\fcs0 \f37\fs22\cf19\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af0\afs20 \ltrch\fcs0 +\b\fs20\cf20\lang1033\langfe1041\loch\af40\hich\af40\dbch\af11\langfenp1041\insrsid15021189\charrsid15021189 \hich\af40\dbch\af11\loch\f40 [}{\rtlch\fcs1 \af0\afs20 \ltrch\fcs0 +\b\fs20\cf20\lang1033\langfe1041\loch\af40\hich\af40\dbch\af11\langfenp1041\insrsid6963270 \hich\af40\dbch\af11\loch\f40 ML Node Autocomplete}{\rtlch\fcs1 \af0\afs20 \ltrch\fcs0 +\b\fs20\cf20\lang1033\langfe1041\loch\af40\hich\af40\dbch\af11\langfenp1041\insrsid15021189\charrsid15021189 \hich\af40\dbch\af11\loch\f40 ]}{\rtlch\fcs1 \af0\afs20 \ltrch\fcs0 +\b\fs20\cf20\lang1033\langfe1041\loch\af40\hich\af40\dbch\af11\langfenp1041\insrsid15021189 +\par }\pard \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid14363366 {\rtlch\fcs1 \af0\afs20 \ltrch\fcs0 \fs20\cf20\lang1033\langfe1041\loch\af40\hich\af40\dbch\af11\langfenp1041\insrsid14363366 +\par }\pard \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid5136836 {\rtlch\fcs1 \af0\afs20 \ltrch\fcs0 \fs20\cf20\lang1033\langfe1041\loch\af40\hich\af40\dbch\af11\langfenp1041\insrsid14363366\charrsid14363366 +\hich\af40\dbch\af11\loch\f40 Autodesk analytics \hich\af40\dbch\af11\loch\f40 programs help us (Autodesk) understand your use of Dynamo so we can personalize your experience and build better online, mobile, and desktop applications.\~ + By analyzing usage trends and patterns we can optimize current features, make positive changes for \hich\af40\dbch\af11\loch\f40 future releases, provide more useful communications, and improve performance and quality.}{\rtlch\fcs1 \af0\afs20 +\ltrch\fcs0 \fs20\cf20\lang1033\langfe1041\loch\af40\hich\af40\dbch\af11\langfenp1041\insrsid7174336\charrsid3037294 +\par }{\*\themedata 504b030414000600080000002100e9de0fbfff0000001c020000130000005b436f6e74656e745f54797065735d2e786d6cac91cb4ec3301045f748fc83e52d4a +9cb2400825e982c78ec7a27cc0c8992416c9d8b2a755fbf74cd25442a820166c2cd933f79e3be372bd1f07b5c3989ca74aaff2422b24eb1b475da5df374fd9ad +5689811a183c61a50f98f4babebc2837878049899a52a57be670674cb23d8e90721f90a4d2fa3802cb35762680fd800ecd7551dc18eb899138e3c943d7e503b6 +b01d583deee5f99824e290b4ba3f364eac4a430883b3c092d4eca8f946c916422ecab927f52ea42b89a1cd59c254f919b0e85e6535d135a8de20f20b8c12c3b0 +0c895fcf6720192de6bf3b9e89ecdbd6596cbcdd8eb28e7c365ecc4ec1ff1460f53fe813d3cc7f5b7f020000ffff0300504b030414000600080000002100a5d6 +a7e7c0000000360100000b0000005f72656c732f2e72656c73848fcf6ac3300c87ef85bd83d17d51d2c31825762fa590432fa37d00e1287f68221bdb1bebdb4f +c7060abb0884a4eff7a93dfeae8bf9e194e720169aaa06c3e2433fcb68e1763dbf7f82c985a4a725085b787086a37bdbb55fbc50d1a33ccd311ba548b6309512 +0f88d94fbc52ae4264d1c910d24a45db3462247fa791715fd71f989e19e0364cd3f51652d73760ae8fa8c9ffb3c330cc9e4fc17faf2ce545046e37944c69e462 +a1a82fe353bd90a865aad41ed0b5b8f9d6fd010000ffff0300504b0304140006000800000021006b799616830000008a0000001c0000007468656d652f746865 +6d652f7468656d654d616e616765722e786d6c0ccc4d0ac3201040e17da17790d93763bb284562b2cbaebbf600439c1a41c7a0d29fdbd7e5e38337cedf14d59b +4b0d592c9c070d8a65cd2e88b7f07c2ca71ba8da481cc52c6ce1c715e6e97818c9b48d13df49c873517d23d59085adb5dd20d6b52bd521ef2cdd5eb9246a3d8b +4757e8d3f729e245eb2b260a0238fd010000ffff0300504b03041400060008000000210030dd4329a8060000a41b0000160000007468656d652f7468656d652f +7468656d65312e786d6cec594f6fdb3614bf0fd87720746f6327761a07758ad8b19b2d4d1bc46e871e698996d850a240d2497d1bdae38001c3ba618715d86d87 +615b8116d8a5fb34d93a6c1dd0afb0475292c5585e9236d88aad3e2412f9e3fbff1e1fa9abd7eec70c1d1221294fda5efd72cd4324f1794093b0eddd1ef62fad +79482a9c0498f184b4bd2991deb58df7dfbb8ad755446282607d22d771db8b944ad79796a40fc3585ee62949606ecc458c15bc8a702910f808e8c66c69b9565b +5d8a314d3c94e018c8de1a8fa94fd05093f43672e23d06af89927ac06762a049136785c10607758d9053d965021d62d6f6804fc08f86e4bef210c352c144dbab +999fb7b4717509af678b985ab0b6b4ae6f7ed9ba6c4170b06c788a705430adf71bad2b5b057d03606a1ed7ebf5babd7a41cf00b0ef83a6569632cd467faddec9 +699640f6719e76b7d6ac355c7c89feca9cccad4ea7d36c65b258a206641f1b73f8b5da6a6373d9c11b90c537e7f08dce66b7bbeae00dc8e257e7f0fd2badd586 +8b37a088d1e4600ead1ddaef67d40bc898b3ed4af81ac0d76a197c86826828a24bb318f3442d8ab518dfe3a20f000d6458d104a9694ac6d88728eee2782428d6 +0cf03ac1a5193be4cbb921cd0b495fd054b5bd0f530c1931a3f7eaf9f7af9e3f45c70f9e1d3ff8e9f8e1c3e3073f5a42ceaa6d9c84e5552fbffdeccfc71fa33f +9e7ef3f2d117d57859c6fffac327bffcfc793510d26726ce8b2f9ffcf6ecc98baf3efdfdbb4715f04d814765f890c644a29be408edf3181433567125272371be +15c308d3f28acd249438c19a4b05fd9e8a1cf4cd296699771c393ac4b5e01d01e5a30a787d72cf1178108989a2159c77a2d801ee72ce3a5c545a6147f32a9979 +3849c26ae66252c6ed637c58c5bb8b13c7bfbd490a75330f4b47f16e441c31f7184e140e494214d273fc80900aedee52ead87597fa824b3e56e82e451d4c2b4d +32a423279a668bb6690c7e9956e90cfe766cb37b077538abd27a8b1cba48c80acc2a841f12e698f13a9e281c57911ce298950d7e03aba84ac8c154f8655c4f2a +f074481847bd804859b5e696007d4b4edfc150b12addbecba6b18b148a1e54d1bc81392f23b7f84137c2715a851dd0242a633f900710a218ed715505dfe56e86 +e877f0034e16bafb0e258ebb4faf06b769e888340b103d331115bebc4eb813bf83291b63624a0d1475a756c734f9bbc2cd28546ecbe1e20a3794ca175f3fae90 +fb6d2dd99bb07b55e5ccf68942bd0877b23c77b908e8db5f9db7f024d9239010f35bd4bbe2fcae387bfff9e2bc289f2fbe24cfaa301468dd8bd846dbb4ddf1c2 +ae7b4c191ba8292337a469bc25ec3d411f06f53a73e224c5292c8de0516732307070a1c0660d125c7d44553488700a4d7bddd3444299910e254ab984c3a219ae +a4adf1d0f82b7bd46cea4388ad1c12ab5d1ed8e1153d9c9f350a3246aad01c6873462b9ac05999ad5cc988826eafc3acae853a33b7ba11cd1445875ba1b236b1 +399483c90bd560b0b0263435085a21b0f22a9cf9356b38ec6046026d77eba3dc2dc60b17e92219e180643ed27acffba86e9c94c7ca9c225a0f1b0cfae0788ad5 +4adc5a9aec1b703b8b93caec1a0bd8e5de7b132fe5113cf312503b998e2c2927274bd051db6b35979b1ef271daf6c6704e86c73805af4bdd476216c26593af84 +0dfb5393d964f9cc9bad5c313709ea70f561ed3ea7b053075221d51696910d0d339585004b34272bff7213cc7a510a5454a3b349b1b206c1f0af490176745d4b +c663e2abb2b34b23da76f6352ba57ca2881844c1111ab189d8c7e07e1daaa04f40255c77988aa05fe06e4e5bdb4cb9c5394bbaf28d98c1d971ccd20867e556a7 +689ec9166e0a522183792b8907ba55ca6e943bbf2a26e52f48957218ffcf54d1fb09dc3eac04da033e5c0d0b8c74a6b43d2e54c4a10aa511f5fb021a07533b20 +5ae07e17a621a8e082dafc17e450ffb739676998b48643a4daa7211214f623150942f6a02c99e83b85583ddbbb2c4996113211551257a656ec1139246ca86be0 +aadedb3d1441a89b6a929501833b197fee7b9641a3503739e57c732a59b1f7da1cf8a73b1f9bcca0945b874d4393dbbf10b1680f66bbaa5d6f96e77b6f59113d +316bb31a795600b3d256d0cad2fe354538e7566b2bd69cc6cbcd5c38f0e2bcc63058344429dc2121fd07f63f2a7c66bf76e80d75c8f7a1b622f878a18941d840 +545fb28d07d205d20e8ea071b283369834296bdaac75d256cb37eb0bee740bbe278cad253b8bbfcf69eca23973d939b97891c6ce2cecd8da8e2d343578f6648a +c2d0383fc818c798cf64e52f597c740f1cbd05df0c264c49134cf09d4a60e8a107260f20f92d47b374e32f000000ffff0300504b030414000600080000002100 +0dd1909fb60000001b010000270000007468656d652f7468656d652f5f72656c732f7468656d654d616e616765722e786d6c2e72656c73848f4d0ac2301484f7 +8277086f6fd3ba109126dd88d0add40384e4350d363f2451eced0dae2c082e8761be9969bb979dc9136332de3168aa1a083ae995719ac16db8ec8e4052164e89 +d93b64b060828e6f37ed1567914b284d262452282e3198720e274a939cd08a54f980ae38a38f56e422a3a641c8bbd048f7757da0f19b017cc524bd62107bd500 +1996509affb3fd381a89672f1f165dfe514173d9850528a2c6cce0239baa4c04ca5bbabac4df000000ffff0300504b01022d0014000600080000002100e9de0f +bfff0000001c0200001300000000000000000000000000000000005b436f6e74656e745f54797065735d2e786d6c504b01022d0014000600080000002100a5d6 +a7e7c0000000360100000b00000000000000000000000000300100005f72656c732f2e72656c73504b01022d00140006000800000021006b799616830000008a +0000001c00000000000000000000000000190200007468656d652f7468656d652f7468656d654d616e616765722e786d6c504b01022d00140006000800000021 +0030dd4329a8060000a41b00001600000000000000000000000000d60200007468656d652f7468656d652f7468656d65312e786d6c504b01022d001400060008 +00000021000dd1909fb60000001b0100002700000000000000000000000000b20900007468656d652f7468656d652f5f72656c732f7468656d654d616e616765722e786d6c2e72656c73504b050600000000050005005d010000ad0a00000000} +{\*\colorschememapping 3c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d225554462d3822207374616e64616c6f6e653d22796573223f3e0d0a3c613a636c724d +617020786d6c6e733a613d22687474703a2f2f736368656d61732e6f70656e786d6c666f726d6174732e6f72672f64726177696e676d6c2f323030362f6d6169 +6e22206267313d226c743122207478313d22646b3122206267323d226c743222207478323d22646b322220616363656e74313d22616363656e74312220616363 +656e74323d22616363656e74322220616363656e74333d22616363656e74332220616363656e74343d22616363656e74342220616363656e74353d22616363656e74352220616363656e74363d22616363656e74362220686c696e6b3d22686c696e6b2220666f6c486c696e6b3d22666f6c486c696e6b222f3e} +{\*\latentstyles\lsdstimax376\lsdlockeddef0\lsdsemihiddendef0\lsdunhideuseddef0\lsdqformatdef0\lsdprioritydef99{\lsdlockedexcept \lsdqformat1 \lsdpriority0 \lsdlocked0 Normal;\lsdqformat1 \lsdlocked0 heading 1; +\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdlocked0 heading 2;\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdlocked0 heading 3;\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 4; +\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 5;\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 6;\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 7; +\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 8;\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 9;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 1; +\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 2;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 3;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 4; +\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 5;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 6;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 7; +\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 8;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 9;\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority35 \lsdlocked0 caption; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Number;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List 4;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List 5;\lsdqformat1 \lsdpriority10 \lsdlocked0 Title; +\lsdsemihidden1 \lsdunhideused1 \lsdpriority1 \lsdlocked0 Default Paragraph Font;\lsdqformat1 \lsdpriority11 \lsdlocked0 Subtitle;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Salutation;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Date; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text First Indent;\lsdqformat1 \lsdpriority22 \lsdlocked0 Strong;\lsdqformat1 \lsdpriority20 \lsdlocked0 Emphasis;\lsdpriority59 \lsdlocked0 Table Grid;\lsdsemihidden1 \lsdlocked0 Placeholder Text; +\lsdqformat1 \lsdpriority1 \lsdlocked0 No Spacing;\lsdpriority60 \lsdlocked0 Light Shading;\lsdpriority61 \lsdlocked0 Light List;\lsdpriority62 \lsdlocked0 Light Grid;\lsdpriority63 \lsdlocked0 Medium Shading 1;\lsdpriority64 \lsdlocked0 Medium Shading 2; +\lsdpriority65 \lsdlocked0 Medium List 1;\lsdpriority66 \lsdlocked0 Medium List 2;\lsdpriority67 \lsdlocked0 Medium Grid 1;\lsdpriority68 \lsdlocked0 Medium Grid 2;\lsdpriority69 \lsdlocked0 Medium Grid 3;\lsdpriority70 \lsdlocked0 Dark List; +\lsdpriority71 \lsdlocked0 Colorful Shading;\lsdpriority72 \lsdlocked0 Colorful List;\lsdpriority73 \lsdlocked0 Colorful Grid;\lsdpriority60 \lsdlocked0 Light Shading Accent 1;\lsdpriority61 \lsdlocked0 Light List Accent 1; +\lsdpriority62 \lsdlocked0 Light Grid Accent 1;\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 1;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 1;\lsdpriority65 \lsdlocked0 Medium List 1 Accent 1;\lsdsemihidden1 \lsdlocked0 Revision; +\lsdqformat1 \lsdpriority34 \lsdlocked0 List Paragraph;\lsdqformat1 \lsdpriority29 \lsdlocked0 Quote;\lsdqformat1 \lsdpriority30 \lsdlocked0 Intense Quote;\lsdpriority66 \lsdlocked0 Medium List 2 Accent 1;\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 1; +\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 1;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 1;\lsdpriority70 \lsdlocked0 Dark List Accent 1;\lsdpriority71 \lsdlocked0 Colorful Shading Accent 1;\lsdpriority72 \lsdlocked0 Colorful List Accent 1; +\lsdpriority73 \lsdlocked0 Colorful Grid Accent 1;\lsdpriority60 \lsdlocked0 Light Shading Accent 2;\lsdpriority61 \lsdlocked0 Light List Accent 2;\lsdpriority62 \lsdlocked0 Light Grid Accent 2;\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 2; +\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 2;\lsdpriority65 \lsdlocked0 Medium List 1 Accent 2;\lsdpriority66 \lsdlocked0 Medium List 2 Accent 2;\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 2;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 2; +\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 2;\lsdpriority70 \lsdlocked0 Dark List Accent 2;\lsdpriority71 \lsdlocked0 Colorful Shading Accent 2;\lsdpriority72 \lsdlocked0 Colorful List Accent 2;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 2; +\lsdpriority60 \lsdlocked0 Light Shading Accent 3;\lsdpriority61 \lsdlocked0 Light List Accent 3;\lsdpriority62 \lsdlocked0 Light Grid Accent 3;\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 3;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 3; +\lsdpriority65 \lsdlocked0 Medium List 1 Accent 3;\lsdpriority66 \lsdlocked0 Medium List 2 Accent 3;\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 3;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 3;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 3; +\lsdpriority70 \lsdlocked0 Dark List Accent 3;\lsdpriority71 \lsdlocked0 Colorful Shading Accent 3;\lsdpriority72 \lsdlocked0 Colorful List Accent 3;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 3;\lsdpriority60 \lsdlocked0 Light Shading Accent 4; +\lsdpriority61 \lsdlocked0 Light List Accent 4;\lsdpriority62 \lsdlocked0 Light Grid Accent 4;\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 4;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 4;\lsdpriority65 \lsdlocked0 Medium List 1 Accent 4; +\lsdpriority66 \lsdlocked0 Medium List 2 Accent 4;\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 4;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 4;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 4;\lsdpriority70 \lsdlocked0 Dark List Accent 4; +\lsdpriority71 \lsdlocked0 Colorful Shading Accent 4;\lsdpriority72 \lsdlocked0 Colorful List Accent 4;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 4;\lsdpriority60 \lsdlocked0 Light Shading Accent 5;\lsdpriority61 \lsdlocked0 Light List Accent 5; +\lsdpriority62 \lsdlocked0 Light Grid Accent 5;\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 5;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 5;\lsdpriority65 \lsdlocked0 Medium List 1 Accent 5;\lsdpriority66 \lsdlocked0 Medium List 2 Accent 5; +\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 5;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 5;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 5;\lsdpriority70 \lsdlocked0 Dark List Accent 5;\lsdpriority71 \lsdlocked0 Colorful Shading Accent 5; +\lsdpriority72 \lsdlocked0 Colorful List Accent 5;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 5;\lsdpriority60 \lsdlocked0 Light Shading Accent 6;\lsdpriority61 \lsdlocked0 Light List Accent 6;\lsdpriority62 \lsdlocked0 Light Grid Accent 6; +\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 6;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 6;\lsdpriority65 \lsdlocked0 Medium List 1 Accent 6;\lsdpriority66 \lsdlocked0 Medium List 2 Accent 6; +\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 6;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 6;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 6;\lsdpriority70 \lsdlocked0 Dark List Accent 6;\lsdpriority71 \lsdlocked0 Colorful Shading Accent 6; +\lsdpriority72 \lsdlocked0 Colorful List Accent 6;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 6;\lsdqformat1 \lsdpriority19 \lsdlocked0 Subtle Emphasis;\lsdqformat1 \lsdpriority21 \lsdlocked0 Intense Emphasis; +\lsdqformat1 \lsdpriority31 \lsdlocked0 Subtle Reference;\lsdqformat1 \lsdpriority32 \lsdlocked0 Intense Reference;\lsdqformat1 \lsdpriority33 \lsdlocked0 Book Title;\lsdsemihidden1 \lsdunhideused1 \lsdpriority37 \lsdlocked0 Bibliography; +\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority39 \lsdlocked0 TOC Heading;\lsdpriority41 \lsdlocked0 Plain Table 1;\lsdpriority42 \lsdlocked0 Plain Table 2;\lsdpriority43 \lsdlocked0 Plain Table 3;\lsdpriority44 \lsdlocked0 Plain Table 4; +\lsdpriority45 \lsdlocked0 Plain Table 5;\lsdpriority40 \lsdlocked0 Grid Table Light;\lsdpriority46 \lsdlocked0 Grid Table 1 Light;\lsdpriority47 \lsdlocked0 Grid Table 2;\lsdpriority48 \lsdlocked0 Grid Table 3;\lsdpriority49 \lsdlocked0 Grid Table 4; +\lsdpriority50 \lsdlocked0 Grid Table 5 Dark;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful;\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful;\lsdpriority46 \lsdlocked0 Grid Table 1 Light Accent 1;\lsdpriority47 \lsdlocked0 Grid Table 2 Accent 1; +\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 1;\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 1;\lsdpriority50 \lsdlocked0 Grid Table 5 Dark Accent 1;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Accent 1; +\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful Accent 1;\lsdpriority46 \lsdlocked0 Grid Table 1 Light Accent 2;\lsdpriority47 \lsdlocked0 Grid Table 2 Accent 2;\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 2; +\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 2;\lsdpriority50 \lsdlocked0 Grid Table 5 Dark Accent 2;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Accent 2;\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful Accent 2; +\lsdpriority46 \lsdlocked0 Grid Table 1 Light Accent 3;\lsdpriority47 \lsdlocked0 Grid Table 2 Accent 3;\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 3;\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 3; +\lsdpriority50 \lsdlocked0 Grid Table 5 Dark Accent 3;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Accent 3;\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful Accent 3;\lsdpriority46 \lsdlocked0 Grid Table 1 Light Accent 4; +\lsdpriority47 \lsdlocked0 Grid Table 2 Accent 4;\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 4;\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 4;\lsdpriority50 \lsdlocked0 Grid Table 5 Dark Accent 4; +\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Accent 4;\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful Accent 4;\lsdpriority46 \lsdlocked0 Grid Table 1 Light Accent 5;\lsdpriority47 \lsdlocked0 Grid Table 2 Accent 5; +\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 5;\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 5;\lsdpriority50 \lsdlocked0 Grid Table 5 Dark Accent 5;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Accent 5; +\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful Accent 5;\lsdpriority46 \lsdlocked0 Grid Table 1 Light Accent 6;\lsdpriority47 \lsdlocked0 Grid Table 2 Accent 6;\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 6; +\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 6;\lsdpriority50 \lsdlocked0 Grid Table 5 Dark Accent 6;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Accent 6;\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful Accent 6; +\lsdpriority46 \lsdlocked0 List Table 1 Light;\lsdpriority47 \lsdlocked0 List Table 2;\lsdpriority48 \lsdlocked0 List Table 3;\lsdpriority49 \lsdlocked0 List Table 4;\lsdpriority50 \lsdlocked0 List Table 5 Dark; +\lsdpriority51 \lsdlocked0 List Table 6 Colorful;\lsdpriority52 \lsdlocked0 List Table 7 Colorful;\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 1;\lsdpriority47 \lsdlocked0 List Table 2 Accent 1;\lsdpriority48 \lsdlocked0 List Table 3 Accent 1; +\lsdpriority49 \lsdlocked0 List Table 4 Accent 1;\lsdpriority50 \lsdlocked0 List Table 5 Dark Accent 1;\lsdpriority51 \lsdlocked0 List Table 6 Colorful Accent 1;\lsdpriority52 \lsdlocked0 List Table 7 Colorful Accent 1; +\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 2;\lsdpriority47 \lsdlocked0 List Table 2 Accent 2;\lsdpriority48 \lsdlocked0 List Table 3 Accent 2;\lsdpriority49 \lsdlocked0 List Table 4 Accent 2; +\lsdpriority50 \lsdlocked0 List Table 5 Dark Accent 2;\lsdpriority51 \lsdlocked0 List Table 6 Colorful Accent 2;\lsdpriority52 \lsdlocked0 List Table 7 Colorful Accent 2;\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 3; +\lsdpriority47 \lsdlocked0 List Table 2 Accent 3;\lsdpriority48 \lsdlocked0 List Table 3 Accent 3;\lsdpriority49 \lsdlocked0 List Table 4 Accent 3;\lsdpriority50 \lsdlocked0 List Table 5 Dark Accent 3; +\lsdpriority51 \lsdlocked0 List Table 6 Colorful Accent 3;\lsdpriority52 \lsdlocked0 List Table 7 Colorful Accent 3;\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 4;\lsdpriority47 \lsdlocked0 List Table 2 Accent 4; +\lsdpriority48 \lsdlocked0 List Table 3 Accent 4;\lsdpriority49 \lsdlocked0 List Table 4 Accent 4;\lsdpriority50 \lsdlocked0 List Table 5 Dark Accent 4;\lsdpriority51 \lsdlocked0 List Table 6 Colorful Accent 4; +\lsdpriority52 \lsdlocked0 List Table 7 Colorful Accent 4;\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 5;\lsdpriority47 \lsdlocked0 List Table 2 Accent 5;\lsdpriority48 \lsdlocked0 List Table 3 Accent 5; +\lsdpriority49 \lsdlocked0 List Table 4 Accent 5;\lsdpriority50 \lsdlocked0 List Table 5 Dark Accent 5;\lsdpriority51 \lsdlocked0 List Table 6 Colorful Accent 5;\lsdpriority52 \lsdlocked0 List Table 7 Colorful Accent 5; +\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 6;\lsdpriority47 \lsdlocked0 List Table 2 Accent 6;\lsdpriority48 \lsdlocked0 List Table 3 Accent 6;\lsdpriority49 \lsdlocked0 List Table 4 Accent 6; +\lsdpriority50 \lsdlocked0 List Table 5 Dark Accent 6;\lsdpriority51 \lsdlocked0 List Table 6 Colorful Accent 6;\lsdpriority52 \lsdlocked0 List Table 7 Colorful Accent 6;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Mention; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Smart Hyperlink;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Hashtag;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Unresolved Mention;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Smart Link;}}{\*\datastore 01050000 +02000000180000004d73786d6c322e534158584d4c5265616465722e362e3000000000000000000000060000 +d0cf11e0a1b11ae1000000000000000000000000000000003e000300feff090006000000000000000000000001000000010000000000000000100000feffffff00000000feffffff0000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffdfffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff52006f006f007400200045006e00740072007900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016000500ffffffffffffffffffffffff0c6ad98892f1d411a65f0040963251e500000000000000000000000080f9 +619d9b19da01feffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000105000000000000}} \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Arc.ByBestFitThroughPoints.md b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Arc.ByBestFitThroughPoints.md index 712ae48845f..1d3caabb912 100644 --- a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Arc.ByBestFitThroughPoints.md +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Arc.ByBestFitThroughPoints.md @@ -1,5 +1,8 @@ ## In Depth -Plane By Best Fit Through Points uses a set of points and finds the plane that best approximates the set. In the example, we use a series of RandomList components to generate random x,y and z coordinates. The points are created By Coordinates, and the list of points is then used as an input for ByBestFitThroughPoints. +`Arc.ByBestFitThroughPoints` draws an arc that best represents 3 or more points. + +In the example below, we create an arc that approximates a list of random points ranging from 0 to 5 in the X and Y directions. + ___ ## Example File diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Arc.ByThreePoints.md b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Arc.ByThreePoints.md index 294dbed067b..756575294b2 100644 --- a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Arc.ByThreePoints.md +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Arc.ByThreePoints.md @@ -1,5 +1,8 @@ ## In Depth -Plane by Three Points will create a plane that passes through the three input points. The points must not be co-linear. In the example below, we use three code blocks to define the three initial points, then use ByThreePoints to create a plane. +`Arc.ByThreePoints` draws an arc from three points, given the start point, end point, and a point between them. + +In the example below, we draw an arc from three randomly created points. + ___ ## Example File diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Arc.CenterPoint.md b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Arc.CenterPoint.md index 9ac00997759..698405dc5f0 100644 --- a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Arc.CenterPoint.md +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Arc.CenterPoint.md @@ -1,5 +1,8 @@ ## In Depth -Center Point will return the center of an input sphere. In the example below, we use a ByBestFit node to create a sphere based on a set of random points. We then use a CenterPoint node to determine the center of the best fit sphere. +`Arc.CenterPoint` returns a point at the center of an arc, the same point as the corresponding circle center. + +In the example below, we create an arc from 3 randomly generated points, then return its center point with an `Arc.CenterPoint` node. + ___ ## Example File diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Arc.Radius.md b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Arc.Radius.md index baac98d02f5..61a5ae38285 100644 --- a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Arc.Radius.md +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Arc.Radius.md @@ -1,5 +1,8 @@ ## In Depth -Radius will return the center of an input sphere. In the example below, we use a ByBestFit node to create a sphere based on a set of random points. We then use a Radius node to determine the size of the best fit sphere. +`Arc.Radius` returns the radius value of arc geometry. + +In the example below, we create an arc from 3 randomly generated points, then return its radius point with an `Arc.Radius` node. We can visualize the change in radius as the input points change in the Y direction. + ___ ## Example File diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.BoundingBox.ByCorners.md b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.BoundingBox.ByCorners.md index 1010232ce37..ce81b48664a 100644 --- a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.BoundingBox.ByCorners.md +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.BoundingBox.ByCorners.md @@ -1,5 +1,8 @@ ## In Depth -Cuboid By Corners creates a cuboid where the two input points are used as the opposite corners of the cuboid. In the example file, two points are randomly generated and used to create a cuboid. +`BoundingBox.ByCorners` creates a BoundingBox from two input points. + +In the example below, we use the diagonal vector to translate the start point of the box to create its end point. To visualize the box, it is converted to a PolySurface and its edge curves are extracted. + ___ ## Example File diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.BoundingBox.ByGeometry.md b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.BoundingBox.ByGeometry.md index e2d1711428b..ddf4833c2af 100644 --- a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.BoundingBox.ByGeometry.md +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.BoundingBox.ByGeometry.md @@ -1,5 +1,8 @@ ## In Depth -ByGeometry brings each input geometry into Revit as an individual Import Instance element. An Import Instance is identified as an Import Symbol in Revit. +`BoundingBox.ByGeometry` creates a BoundingBox around geometry. + +In the example below, a BoundingBox is created around a sphere. To visualize the box, it is converted to a cuboid and its edge curves are extracted. + ___ ## Example File diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Circle.ByBestFitThroughPoints.md b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Circle.ByBestFitThroughPoints.md index 59b8948bd16..a018b2ebd1b 100644 --- a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Circle.ByBestFitThroughPoints.md +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Circle.ByBestFitThroughPoints.md @@ -1,5 +1,8 @@ ## In Depth -Plane By Best Fit Through Points uses a set of points and finds the plane that best approximates the set. In the example, we use a series of RandomList components to generate random x,y and z coordinates. The points are created By Coordinates, and the list of points is then used as an input for ByBestFitThroughPoints. +`Circle.ByBestFitThroughPoints` receives point inputs and creates a best-fit circle through them. + +In the example below, a list of randomly generated points is used to generate a circle that best approximates them. We can dynamically increase and decrease the number of points with a number slider, altering the shape of the best-fit circle. + ___ ## Example File diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Circle.ByCenterPointRadius.md b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Circle.ByCenterPointRadius.md index d95240752fc..cab66404075 100644 --- a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Circle.ByCenterPointRadius.md +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Circle.ByCenterPointRadius.md @@ -1,5 +1,8 @@ ## In Depth -Sphere by Center Point Radius will create a sphere centered at the input point, and with an input radius. In the example below, we use a code block to specify the coordinates of a Point created by coordinates, and we use a number slider to determine the radius of the sphere. +`Circle.ByCenterPointRadius` creates a circle with the Z-plane normal. + +In the example below, we use a code block to create a point in three-dimensional space and locate the circle around the point. The radius is controlled dynamically with a number slider. + ___ ## Example File diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Circle.ByThreePoints.md b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Circle.ByThreePoints.md index cef9ebc47f5..2986b910f6c 100644 --- a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Circle.ByThreePoints.md +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Circle.ByThreePoints.md @@ -1,5 +1,8 @@ ## In Depth -Plane by Three Points will create a plane that passes through the three input points. The points must not be co-linear. In the example below, we use three code blocks to define the three initial points, then use ByThreePoints to create a plane. +`Circle.ByThreePoints` receives 3 point inputs and creates a circle that passes through each point. + +In the example below, we use 3 randomly generated points on the Z-plane to create a circle. + ___ ## Example File diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Circle.CenterPoint.md b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Circle.CenterPoint.md index 39e094f7656..ebe56829ec8 100644 --- a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Circle.CenterPoint.md +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Circle.CenterPoint.md @@ -1,5 +1,8 @@ ## In Depth -Center Point will return the center of an input sphere. In the example below, we use a ByBestFit node to create a sphere based on a set of random points. We then use a CenterPoint node to determine the center of the best fit sphere. +`Circle.CenterPoint` finds the center point of a given circle. + +In the example below, we create a circle using `Circle.BestFitThroughPoints` and then extract the center point of the circle. + ___ ## Example File diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Circle.Radius.md b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Circle.Radius.md index a3a3b475d01..581076de460 100644 --- a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Circle.Radius.md +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Circle.Radius.md @@ -1,5 +1,8 @@ ## In Depth -Radius will return the center of an input sphere. In the example below, we use a ByBestFit node to create a sphere based on a set of random points. We then use a Radius node to determine the size of the best fit sphere. +`Circle.Radius` finds the radius of a given circle. + +In the example below, we create a circle using `Circle.ByBestFitThroughPoints` and then extract the radius of the circle. + ___ ## Example File diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Cone.ByPointsRadius.md b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Cone.ByPointsRadius.md index 095f9174350..2ae271b0169 100644 --- a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Cone.ByPointsRadius.md +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Cone.ByPointsRadius.md @@ -1,5 +1,8 @@ ## In Depth -ByPointsRadius will return a Cylinder from a start Point, end Point, and radius value. In the example below, adjusting the number sliders will change the point positions as well as the Cylinder's radius. +`Cone.ByPointsRadius` creates a cone geometry from a start point, end point, and a radius value. + +In the example below, a dynamic cone around the World Origin is constructed with two number sliders controlling the cone’s height and radius. + ___ ## Example File diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Cone.EndPoint.md b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Cone.EndPoint.md index e597a0b8856..8d2ca4a7bfa 100644 --- a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Cone.EndPoint.md +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Cone.EndPoint.md @@ -1,5 +1,8 @@ ## In Depth -End Point will return the end point of an input curve. In the example below, we first create a Nurbs Curve using a ByControlPoints node, with a set of randomly generated points as the input. We can find the end point of this curve by using an EndPoint node. +`Cone.EndPoint` returns the apex of a cone, or the center of the top circle of a truncated cone. + +In the example below, we create a cone by specifying a Coordinate System and two radii. We then use `Cone.EndPoint` to find the center of the top circle of the cone. + ___ ## Example File diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Cone.Height.md b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Cone.Height.md index f0fe0a83776..c9cb70bb3ad 100644 --- a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Cone.Height.md +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Cone.Height.md @@ -1,5 +1,8 @@ ## In Depth -Text note height is returned as a double. The height value is relative to the view scale. +`Cone.Height` finds the height of a cone, which is equal to the distance between its start point and end point. + +In the example below, we create a cone by specifying a start and end point, as well as a start and end radius. We can then extract the height of the cone with `Cone.Height`. + ___ ## Example File diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Cone.StartPoint.md b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Cone.StartPoint.md index c0dba8ee99e..ec23da7bc33 100644 --- a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Cone.StartPoint.md +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Cone.StartPoint.md @@ -1,5 +1,8 @@ ## In Depth -Start Point will return the start point of an input curve. In the example below, we first create a Nurbs Curve using a ByControlPoints node, with a set of randomly generated points as the input. We can find the start point of this curve by using a StartPoint node. +`Cone.StartPoint` finds the center of the base of a cone. + +In the example below, we create a cone by specifying a Coordinate System and two radii. We then use `Cone.StartPoint` to find the center of the bottom circle of the cone. + ___ ## Example File diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.CoordinateSystem.ByOriginVectors(origin, xAxis, yAxis, zAxis).md b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.CoordinateSystem.ByOriginVectors(origin, xAxis, yAxis, zAxis).md index f4f39db5318..36309cc701e 100644 --- a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.CoordinateSystem.ByOriginVectors(origin, xAxis, yAxis, zAxis).md +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.CoordinateSystem.ByOriginVectors(origin, xAxis, yAxis, zAxis).md @@ -1,5 +1,8 @@ ## In Depth -Add in-depth information about ByOriginVectors (origin, xAxis, yAxis, zAxis)... +`CoordinateSystem.ByOriginVectors (origin, xAxis, yAxis, zAxis)` returns a new CoordinateSystem at an input origin point with input X, Y, and Z axes. + +In the example below, the CoordinateSystem is placed at an origin with new vectors for the X, Y, and Z axes. The result is a CoordinateSystem rotated relative to the original CoordinateSystem. + ___ ## Example File diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.CoordinateSystem.ByPlane.md b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.CoordinateSystem.ByPlane.md index b7ce9879e89..033cc67343c 100644 --- a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.CoordinateSystem.ByPlane.md +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.CoordinateSystem.ByPlane.md @@ -1,5 +1,8 @@ ## In Depth -Sketch planes are used in the creation of 2D and 3D geometry in Revit. +`CoordinateSystem.ByPlane` returns a new CoordinateSystem based on an input plane. + +In the example below, the normal of the input plane has been repositioned, resulting in a new CoordinateSystem rotated about the X axis. + ___ ## Example File diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.CoordinateSystem.Rotate(coordinateSystem, plane, degrees).dyn b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.CoordinateSystem.Rotate(coordinateSystem, plane, degrees).dyn new file mode 100644 index 00000000000..5175206f5ab --- /dev/null +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.CoordinateSystem.Rotate(coordinateSystem, plane, degrees).dyn @@ -0,0 +1,262 @@ +{ + "Uuid": "ac4af643-8e4a-4317-b683-dabd4e2674a7", + "IsCustomNode": false, + "Description": "", + "Name": "Autodesk.DesignScript.Geometry.CoordinateSystem.Rotate", + "ElementResolver": { + "ResolutionMap": {} + }, + "Inputs": [], + "Outputs": [], + "Nodes": [ + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "d83f3cdf35c346bb955ffef4109381cc", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "fb7c4cefedb74442a23d6b054022b053", + "Name": "coordinateSystem", + "Description": "Autodesk.DesignScript.Geometry.CoordinateSystem", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "c8482db7b9654c5f8d1f7eb7e41e90ae", + "Name": "plane", + "Description": "Plane to get normal from\n\nPlane", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "254041246ba743ddb926e93567a5545c", + "Name": "degrees", + "Description": "Rotation value in degrees\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "deda1902488f4cf89653cc97ef74dc94", + "Name": "CoordinateSystem", + "Description": "Rotated coordinate system", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.CoordinateSystem.Rotate@Autodesk.DesignScript.Geometry.Plane,double", + "Replication": "Auto", + "Description": "Rotates an object around the origin and normal of the given Plane by a specified degree\n\nCoordinateSystem.Rotate (plane: Plane, degrees: double = 0): CoordinateSystem" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "8ad6a2c820ea4c33acd85d6c6b9f7e42", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "bf629aa243374e4fbe7dd36624786535", + "Name": "origin", + "Description": "Point\nDefault value : Autodesk.DesignScript.Geometry.Point.ByCoordinates(0, 0, 0)", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "90957b0754744e92b25fc46d261d6471", + "Name": "CoordinateSystem", + "Description": "CoordinateSystem", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.CoordinateSystem.ByOrigin@Autodesk.DesignScript.Geometry.Point", + "Replication": "Auto", + "Description": "Create a CoordinateSystem with origin at input Point, with X and Y Axes set as WCS X and Y Axes.\n\nCoordinateSystem.ByOrigin (origin: Point = Autodesk.DesignScript.Geometry.Point.ByCoordinates(0, 0, 0)): CoordinateSystem" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "600954f1336c496497b3d78c4274732e", + "NodeType": "FunctionNode", + "Inputs": [], + "Outputs": [ + { + "Id": "abcb37feac0b4b0e8696ed2271deacdb", + "Name": "Plane", + "Description": "Plane at YZ plane of world", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Plane.YZ", + "Replication": "Auto", + "Description": "Creates a plane in the world YZ\n\nPlane.YZ ( ): Plane" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "233a9182edf24a9cb0e04918b22d5ea1", + "NodeType": "CodeBlockNode", + "Inputs": [], + "Outputs": [ + { + "Id": "6902090b147b48e69ba4898d9684a3bb", + "Name": "", + "Description": "degrees", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "degrees = 135;" + } + ], + "Connectors": [ + { + "Start": "90957b0754744e92b25fc46d261d6471", + "End": "fb7c4cefedb74442a23d6b054022b053", + "Id": "f4d6e52809c14409bc0107db90964aea", + "IsHidden": "False" + }, + { + "Start": "abcb37feac0b4b0e8696ed2271deacdb", + "End": "c8482db7b9654c5f8d1f7eb7e41e90ae", + "Id": "b6b61eb9ca1647079e31f6c182bedc03", + "IsHidden": "False" + }, + { + "Start": "6902090b147b48e69ba4898d9684a3bb", + "End": "254041246ba743ddb926e93567a5545c", + "Id": "5da7c279d3d04bbf988fa8210a569aa1", + "IsHidden": "False" + } + ], + "Dependencies": [], + "NodeLibraryDependencies": [], + "Thumbnail": "", + "GraphDocumentationURL": null, + "ExtensionWorkspaceData": [ + { + "ExtensionGuid": "28992e1d-abb9-417f-8b1b-05e053bee670", + "Name": "Properties", + "Version": "2.19", + "Data": {} + } + ], + "Author": "", + "Linting": { + "activeLinter": "None", + "activeLinterId": "7b75fb44-43fd-4631-a878-29f4d5d8399a", + "warningCount": 0, + "errorCount": 0 + }, + "Bindings": [], + "View": { + "Dynamo": { + "ScaleFactor": 100.0, + "HasRunWithoutCrash": true, + "IsVisibleInDynamoLibrary": true, + "Version": "2.19.0.5742", + "RunType": "Manual", + "RunPeriod": "1000" + }, + "Camera": { + "Name": "_Background Preview", + "EyeX": 23.126308376732588, + "EyeY": 8.7204408155608029, + "EyeZ": 7.9356554294069479, + "LookX": -23.126308376732588, + "LookY": -8.7204408155608029, + "LookZ": -7.9356554294069479, + "UpX": -0.11936696618795395, + "UpY": 0.992004930973053, + "UpZ": -0.040960114449262619 + }, + "ConnectorPins": [], + "NodeViews": [ + { + "Id": "d83f3cdf35c346bb955ffef4109381cc", + "Name": "CoordinateSystem.Rotate", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 767.0533966533327, + "Y": 433.65461316390656 + }, + { + "Id": "8ad6a2c820ea4c33acd85d6c6b9f7e42", + "Name": "CoordinateSystem.ByOrigin", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 296.5, + "Y": 322.58625 + }, + { + "Id": "600954f1336c496497b3d78c4274732e", + "Name": "Plane.YZ", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 296.5, + "Y": 470.58625 + }, + { + "Id": "233a9182edf24a9cb0e04918b22d5ea1", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 296.5, + "Y": 618.41374999999994 + } + ], + "Annotations": [ + { + "Id": "9fe06b88ed6b4cee9b66b0428de8c6f7", + "Title": "Coordinate System rotated around a base YZ plane set at the 0, 0, 0 insertion point by 135 degrees", + "DescriptionText": null, + "IsExpanded": true, + "WidthAdjustment": 0.0, + "HeightAdjustment": 0.0, + "Nodes": [], + "HasNestedGroups": false, + "Left": 789.85339665333277, + "Top": 368.85461316390666, + "Width": 0.0, + "Height": 0.0, + "FontSize": 36.0, + "GroupStyleId": "00000000-0000-0000-0000-000000000000", + "InitialTop": 0.0, + "InitialHeight": 0.0, + "TextblockHeight": 0.0, + "Background": "#FFC1D676", + "PinnedNode": "d83f3cdf35c346bb955ffef4109381cc" + } + ], + "X": -25.505249382378452, + "Y": -149.199263666317, + "Zoom": 0.85276592558149733 + } +} \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.CoordinateSystem.Rotate(coordinateSystem, plane, degrees).md b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.CoordinateSystem.Rotate(coordinateSystem, plane, degrees).md new file mode 100644 index 00000000000..9345ec9b6bb --- /dev/null +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.CoordinateSystem.Rotate(coordinateSystem, plane, degrees).md @@ -0,0 +1,9 @@ +## In Depth +`CoordinateSystem.Rotate (coordinateSystem, plane, degrees)` returns a new CoordinateSystem rotated about a plane by the given number of degrees. + +In the example below, a coordinate system is rotated around a base YZ plane set at the 0, 0, 0 insertion point by 135 degrees. + +___ +## Example File + +![CoordinateSystem.Rotate(coordinateSystem, plane, degrees)](./Autodesk.DesignScript.Geometry.CoordinateSystem.Rotate(coordinateSystem,%20plane,%20degrees)_img.jpg) \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.CoordinateSystem.Rotate(coordinateSystem, plane, degrees)_img.jpg b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.CoordinateSystem.Rotate(coordinateSystem, plane, degrees)_img.jpg new file mode 100644 index 00000000000..76fc2354f62 Binary files /dev/null and b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.CoordinateSystem.Rotate(coordinateSystem, plane, degrees)_img.jpg differ diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Cuboid.Height.md b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Cuboid.Height.md index fc794c334d6..d7a6188241c 100644 --- a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Cuboid.Height.md +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Cuboid.Height.md @@ -1,5 +1,8 @@ ## In Depth -Text note height is returned as a double. The height value is relative to the view scale. +`Cuboid.Height` returns the height of the input cuboid. Note that if the cuboid has been transformed to a different coordinate system with a scale factor, this will return the original dimensions of the cuboid, not the world space dimensions. In other words, if you create a cuboid with a width (X-axis) of 10 and transform it to a CoordinateSystem with 2 times scaling in X, the width will still be 10. + +In the example below, we generate a cuboid by corners, and then use a `Cuboid.Height` node to find its height. + ___ ## Example File diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Cuboid.Length.md b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Cuboid.Length.md index f1d5f60295b..b8cc41795bd 100644 --- a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Cuboid.Length.md +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Cuboid.Length.md @@ -1,5 +1,8 @@ ## In Depth -Length returns the length of a curtain panel's boundary as a double. This can be used even if the curtain panel is not rectangular. +`Cuboid.Length` returns the length of the input cuboid. Note that if the cuboid has been transformed to a different coordinate system with a scale factor, this will return the original dimensions of the cuboid, not the world space dimensions. + +In the example, we generate a cuboid by corners, and then use a `Cuboid.Length` node to find the length. + ___ ## Example File diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Cuboid.Width.md b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Cuboid.Width.md index 1802cfa38fd..0f341d6f593 100644 --- a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Cuboid.Width.md +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Cuboid.Width.md @@ -1,5 +1,8 @@ ## In Depth -Width returns the horizontal dimension of a rectangular curtain panel as a double. +`Cuboid.Width` returns the width of the input cuboid. + +In the example below, we generate a cuboid by corners, and then use a `Cuboid.Width` node to find its width. Note that if the cuboid has been transformed to a different coordinate system with a scale factor, this will return the original dimension of the cuboid, not the world space dimensions. + ___ ## Example File diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Curve.Extrude(curve, direction).dyn b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Curve.Extrude(curve, direction).dyn new file mode 100644 index 00000000000..3188d1e554a --- /dev/null +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Curve.Extrude(curve, direction).dyn @@ -0,0 +1,697 @@ +{ + "Uuid": "13ee3969-93ac-403d-9b3e-81b375ad025e", + "IsCustomNode": false, + "Description": "", + "Name": "Autodesk.DesignScript.Geometry.Curve.Extrude", + "ElementResolver": { + "ResolutionMap": {} + }, + "Inputs": [], + "Outputs": [], + "Nodes": [ + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "de0ae7da0ebe4f2e84d1e722593dac58", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "b653ba86d58a4ac486c72be782a2a38c", + "Name": "x", + "Description": "X coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "777b8c9a8d6d48aa8bbbda01d2313335", + "Name": "y", + "Description": "Y coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "8359aaa8941c4748857a0aedf707091d", + "Name": "z", + "Description": "Z coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "4eddf3e2f0874f2885f39dabdb9040be", + "Name": "Vector", + "Description": "Vector created by coordinates", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Vector.ByCoordinates@double,double,double", + "Replication": "Auto", + "Description": "Form a Vector by 3 Euclidean coordinates\n\nVector.ByCoordinates (x: double = 0, y: double = 0, z: double = 0): Vector" + }, + { + "ConcreteType": "CoreNodeModels.Input.DoubleInput, CoreNodeModels", + "NumberType": "Double", + "Id": "dbc6329eeca3488188c210d16065943a", + "NodeType": "NumberInputNode", + "Inputs": [], + "Outputs": [ + { + "Id": "efc890cd12d24e859c796601edd0b4aa", + "Name": "", + "Description": "Double", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Creates a number", + "InputValue": 5.0 + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "a656702ce89044ba94622b0f49ca51cc", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "3eff3d4e226240b19128201f449249ac", + "Name": "x", + "Description": "X coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "39132e8b636e4795b228802f41c3b83c", + "Name": "y", + "Description": "Y coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "063e7b7219294e61940acadd766e60cf", + "Name": "z", + "Description": "Z coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "510847d19ff7467aa4e2a11a5df448e8", + "Name": "Point", + "Description": "Point created by coordinates", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Point.ByCoordinates@double,double,double", + "Replication": "Auto", + "Description": "Form a Point given 3 cartesian coordinates\n\nPoint.ByCoordinates (x: double = 0, y: double = 0, z: double = 0): Point" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "187e9a0c104f43de8d0a297a189a0c0e", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "1332627a80264ddf87b3c1142a05ceee", + "Name": "points", + "Description": "Points for nurbs curve\n\nPoint[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "e2b114ab8a5b45e0bebd4defc2b58efa", + "Name": "NurbsCurve", + "Description": "Nurbscurve created from points", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.NurbsCurve.ByControlPoints@Autodesk.DesignScript.Geometry.Point[]", + "Replication": "Auto", + "Description": "Create a BSplineCurve by using explicit control points. NOTE 1: BSplineCurves with deg=1 have G1 discontinuities, which cause problems for extrusion, sweep, and other operations. They should be avoided. Use a PolyCurve instead. NOTE 2: If the curve is periodic (closed), then the first and last points MUST be the same.\n\nNurbsCurve.ByControlPoints (points: Point[]): NurbsCurve" + }, + { + "ConcreteType": "CoreNodeModels.Input.DoubleInput, CoreNodeModels", + "NumberType": "Double", + "Id": "ad2f464ca237444180fd0ae89e4fcf85", + "NodeType": "NumberInputNode", + "Inputs": [], + "Outputs": [ + { + "Id": "55e7ef828c6a482685ec056e646d1a0e", + "Name": "", + "Description": "Double", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Creates a number", + "InputValue": 5.0 + }, + { + "ConcreteType": "CoreNodeModels.CreateList, CoreNodeModels", + "VariableInputPorts": true, + "Id": "1f1a533a5e0c48da969b56e1c484276a", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "d1e5f0d9f433489f96e79d1033593054", + "Name": "item0", + "Description": "Item Index #0", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "50c9fba9ffa542cd9155742d2e88e8f2", + "Name": "item1", + "Description": "Item Index #1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "173c5c3a7df34a4893b69fd6648daffb", + "Name": "item2", + "Description": "Item Index #2", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "dcb0c402b01a4061a67dbde996a7b1dd", + "Name": "item3", + "Description": "Item Index #3", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "2147e19547b44307b1d908d92f399a9a", + "Name": "list", + "Description": "A list (type: var[]..[])", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Makes a new list from the given inputs" + }, + { + "ConcreteType": "CoreNodeModels.Input.DoubleInput, CoreNodeModels", + "NumberType": "Double", + "Id": "3385557dd4674357a32874515143fc38", + "NodeType": "NumberInputNode", + "Inputs": [], + "Outputs": [ + { + "Id": "e6ee27120f0c491eb6c7b0c9808a128e", + "Name": "", + "Description": "Double", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Creates a number", + "InputValue": 10.0 + }, + { + "ConcreteType": "CoreNodeModels.Input.DoubleInput, CoreNodeModels", + "NumberType": "Double", + "Id": "a3e63cf989d34553b4e991bc10343699", + "NodeType": "NumberInputNode", + "Inputs": [], + "Outputs": [ + { + "Id": "ba321273c88348c495ed66ec59a0b375", + "Name": "", + "Description": "Double", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Creates a number", + "InputValue": 15.0 + }, + { + "ConcreteType": "CoreNodeModels.CreateList, CoreNodeModels", + "VariableInputPorts": true, + "Id": "600ee636bef6499aa907ba8f88618812", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "1e0709a194e2453a88bfb974b276b67e", + "Name": "item0", + "Description": "Item Index #0", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "a73dd5f811e949b7b29b5159b6dc1be0", + "Name": "item1", + "Description": "Item Index #1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "97fd765e333f483790fb5a0254f75e07", + "Name": "item2", + "Description": "Item Index #2", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "fa796d987e464181a11206900e22cc94", + "Name": "item3", + "Description": "Item Index #3", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "6eba145469ab455099299405b43c5bb2", + "Name": "list", + "Description": "A list (type: var[]..[])", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Makes a new list from the given inputs" + }, + { + "ConcreteType": "CoreNodeModels.Input.DoubleInput, CoreNodeModels", + "NumberType": "Double", + "Id": "90886ac3f6f24e29be7c4f75338aaade", + "NodeType": "NumberInputNode", + "Inputs": [], + "Outputs": [ + { + "Id": "42544b1bf25d4eebaeff4e419b63f36f", + "Name": "", + "Description": "Double", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Creates a number", + "InputValue": 20.0 + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "87d0e65d3c0e4a069b1bafe1efc96b66", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "747981ccb59f4e11bb0e147cc2692c3f", + "Name": "curve", + "Description": "Autodesk.DesignScript.Geometry.Curve", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "d1b79951513446f8bda4a9aaf75e464b", + "Name": "direction", + "Description": "Vector to extrude along\n\nVector\nDefault value : Autodesk.DesignScript.Geometry.Vector.ByCoordinates(0, 0, 1)", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "88f49b59f1794859a1e3bf109a95dea8", + "Name": "Surface", + "Description": "The extruded Surface", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Curve.Extrude@Autodesk.DesignScript.Geometry.Vector", + "Replication": "Auto", + "Description": "Extrudes a Curve in the specified direction, by the length of the input Vector\n\nCurve.Extrude (direction: Vector = Autodesk.DesignScript.Geometry.Vector.ByCoordinates(0, 0, 1)): Surface" + }, + { + "ConcreteType": "Watch3DNodeModels.Watch3D, Watch3DNodeModels", + "WatchWidth": 200.0, + "WatchHeight": 200.0, + "WasExecuted": true, + "Camera": { + "Name": "45f2c323-35f3-4590-ada0-76c3a6f0d784 Preview", + "EyeX": -17.0, + "EyeY": 24.0, + "EyeZ": 50.0, + "LookX": 12.0, + "LookY": -13.0, + "LookZ": -58.0, + "UpX": 0.0, + "UpY": 1.0, + "UpZ": 0.0 + }, + "VariableInputPorts": true, + "Id": "45f2c32335f34590ada076c3a6f0d784", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "6b2e23deec964a34b68af22102baabe9", + "Name": "", + "Description": "Incoming geometry objects.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "e6bcb8bee8a7475b9210aa55cbef3583", + "Name": "", + "Description": "Incoming geometry objects.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Shows a dynamic preview of geometry" + } + ], + "Connectors": [ + { + "Start": "4eddf3e2f0874f2885f39dabdb9040be", + "End": "d1b79951513446f8bda4a9aaf75e464b", + "Id": "4b6e8477aced42a5aad259dc6f836cf5", + "IsHidden": "False" + }, + { + "Start": "efc890cd12d24e859c796601edd0b4aa", + "End": "8359aaa8941c4748857a0aedf707091d", + "Id": "184c9af6c3134f8097f2640d4a336a04", + "IsHidden": "False" + }, + { + "Start": "510847d19ff7467aa4e2a11a5df448e8", + "End": "1332627a80264ddf87b3c1142a05ceee", + "Id": "929b99c06b6a4efdbcf3013393f25f5d", + "IsHidden": "False" + }, + { + "Start": "e2b114ab8a5b45e0bebd4defc2b58efa", + "End": "747981ccb59f4e11bb0e147cc2692c3f", + "Id": "601cdf95765b453282740b5ac3d39359", + "IsHidden": "False" + }, + { + "Start": "55e7ef828c6a482685ec056e646d1a0e", + "End": "d1e5f0d9f433489f96e79d1033593054", + "Id": "9cb0b4ee6348455eb7cc5c7ec489dd22", + "IsHidden": "False" + }, + { + "Start": "55e7ef828c6a482685ec056e646d1a0e", + "End": "a73dd5f811e949b7b29b5159b6dc1be0", + "Id": "1ce89045745c4b42b9750094899235f6", + "IsHidden": "False" + }, + { + "Start": "2147e19547b44307b1d908d92f399a9a", + "End": "3eff3d4e226240b19128201f449249ac", + "Id": "19c5e394afcb44eaa12d5325e15b4f5a", + "IsHidden": "False" + }, + { + "Start": "e6ee27120f0c491eb6c7b0c9808a128e", + "End": "50c9fba9ffa542cd9155742d2e88e8f2", + "Id": "cb164a4be8bd44a8baf788210334ce9f", + "IsHidden": "False" + }, + { + "Start": "e6ee27120f0c491eb6c7b0c9808a128e", + "End": "97fd765e333f483790fb5a0254f75e07", + "Id": "426a886d1c6a48b48c19d5ad0f3e85f5", + "IsHidden": "False" + }, + { + "Start": "ba321273c88348c495ed66ec59a0b375", + "End": "173c5c3a7df34a4893b69fd6648daffb", + "Id": "5992784325dd432ba69029585d2606c7", + "IsHidden": "False" + }, + { + "Start": "ba321273c88348c495ed66ec59a0b375", + "End": "fa796d987e464181a11206900e22cc94", + "Id": "32eaa046b09e41899bf086d1e62e86f4", + "IsHidden": "False" + }, + { + "Start": "6eba145469ab455099299405b43c5bb2", + "End": "39132e8b636e4795b228802f41c3b83c", + "Id": "c21342f615ca4f45bae11957fb6cd15c", + "IsHidden": "False" + }, + { + "Start": "42544b1bf25d4eebaeff4e419b63f36f", + "End": "dcb0c402b01a4061a67dbde996a7b1dd", + "Id": "0dea2e79fb01473f8c61c60a80d981aa", + "IsHidden": "False" + }, + { + "Start": "42544b1bf25d4eebaeff4e419b63f36f", + "End": "1e0709a194e2453a88bfb974b276b67e", + "Id": "e4322ae89fd34d69bb8a87cc06c634a0", + "IsHidden": "False" + } + ], + "Dependencies": [], + "NodeLibraryDependencies": [], + "Thumbnail": "", + "GraphDocumentationURL": null, + "ExtensionWorkspaceData": [ + { + "ExtensionGuid": "28992e1d-abb9-417f-8b1b-05e053bee670", + "Name": "Properties", + "Version": "3.0", + "Data": {} + } + ], + "Author": "", + "Linting": { + "activeLinter": "None", + "activeLinterId": "7b75fb44-43fd-4631-a878-29f4d5d8399a", + "warningCount": 0, + "errorCount": 0 + }, + "Bindings": [], + "View": { + "Dynamo": { + "ScaleFactor": 1.0, + "HasRunWithoutCrash": true, + "IsVisibleInDynamoLibrary": true, + "Version": "2.19.0.5874", + "RunType": "Manual", + "RunPeriod": "1000" + }, + "Camera": { + "Name": "_Background Preview", + "EyeX": -17.718215942382813, + "EyeY": 22.505508422851563, + "EyeZ": 19.34986686706543, + "LookX": 12.718215942382813, + "LookY": -11.505508422851563, + "LookZ": -27.34986686706543, + "UpX": 0.062325332313776016, + "UpY": 0.98901587724685669, + "UpZ": -0.13402673602104187 + }, + "ConnectorPins": [], + "NodeViews": [ + { + "Id": "de0ae7da0ebe4f2e84d1e722593dac58", + "Name": "Vector.ByCoordinates", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 816.05897626112755, + "Y": 361.37982195845689 + }, + { + "Id": "dbc6329eeca3488188c210d16065943a", + "Name": "Number", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 491.55897626112755, + "Y": 429.37982195845689 + }, + { + "Id": "a656702ce89044ba94622b0f49ca51cc", + "Name": "Point.ByCoordinates", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 491.55897626112755, + "Y": 213.37982195845692 + }, + { + "Id": "187e9a0c104f43de8d0a297a189a0c0e", + "Name": "NurbsCurve.ByControlPoints", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 816.05897626112755, + "Y": 213.37982195845689 + }, + { + "Id": "ad2f464ca237444180fd0ae89e4fcf85", + "Name": "Number", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -0.94102373887244539, + "Y": 60.379821958456887 + }, + { + "Id": "1f1a533a5e0c48da969b56e1c484276a", + "Name": "List Create", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 231.55897626112755, + "Y": 106.37982195845689 + }, + { + "Id": "3385557dd4674357a32874515143fc38", + "Name": "Number", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -0.94102373887244539, + "Y": 354.37982195845694 + }, + { + "Id": "a3e63cf989d34553b4e991bc10343699", + "Name": "Number", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -0.94102373887244539, + "Y": 503.37982195845689 + }, + { + "Id": "600ee636bef6499aa907ba8f88618812", + "Name": "List Create", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 231.55897626112755, + "Y": 354.37982195845689 + }, + { + "Id": "90886ac3f6f24e29be7c4f75338aaade", + "Name": "Number", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -0.94102373887244539, + "Y": 207.37982195845692 + }, + { + "Id": "87d0e65d3c0e4a069b1bafe1efc96b66", + "Name": "Curve.Extrude", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1255.2848664688427, + "Y": 215.36943620178042 + }, + { + "Id": "45f2c32335f34590ada076c3a6f0d784", + "Name": "Watch 3D", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1869.5281899109793, + "Y": 539.40504451038578 + } + ], + "Annotations": [], + "X": 269.79386977689933, + "Y": 162.03399077731513, + "Zoom": 0.57937399427177749 + } +} \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Curve.Extrude(curve, direction).md b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Curve.Extrude(curve, direction).md new file mode 100644 index 00000000000..def841db649 --- /dev/null +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Curve.Extrude(curve, direction).md @@ -0,0 +1,8 @@ +## In Depth +`Curve.Extrude (curve, direction)` extrudes an input curve using an input vector to determine the direction of the extrusion. The length of the vector is used for the extrusion distance. + +In the example below, we first create a NurbsCurve using a `NurbsCurve.ByControlPoints` node, with a set of randomly generated points as the input. A code block is used to specify the X, Y, and Z components of a `Vector.ByCoordinates` node. This vector is then used as the `direction` input in a `Curve.Extrude` node. +___ +## Example File + +![Curve.Extrude(curve, direction)](./Autodesk.DesignScript.Geometry.Curve.Extrude(curve,%20direction)_img.jpg) \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Curve.Extrude(curve, direction)_img.jpg b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Curve.Extrude(curve, direction)_img.jpg new file mode 100644 index 00000000000..f5c9e2a21f0 Binary files /dev/null and b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Curve.Extrude(curve, direction)_img.jpg differ diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Curve.Extrude(curve, direction, distance).dyn b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Curve.Extrude(curve, direction, distance).dyn new file mode 100644 index 00000000000..15b471eac39 --- /dev/null +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Curve.Extrude(curve, direction, distance).dyn @@ -0,0 +1,623 @@ +{ + "Uuid": "28c43575-a578-4830-ad47-96bba177152d", + "IsCustomNode": false, + "Description": "", + "Name": "Autodesk.DesignScript.Geometry.Curve.Extrude", + "ElementResolver": { + "ResolutionMap": {} + }, + "Inputs": [], + "Outputs": [], + "Nodes": [ + { + "ConcreteType": "CoreNodeModels.Input.DoubleInput, CoreNodeModels", + "NumberType": "Double", + "Id": "774a899f07ef4aefbb678d99911818cb", + "NodeType": "NumberInputNode", + "Inputs": [], + "Outputs": [ + { + "Id": "3221298c289945ad8cac9888700c8639", + "Name": "", + "Description": "Double", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Creates a number", + "InputValue": 5.0 + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "e1125e894085469c8f3a26e50446f605", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "650e1051a10c4387a9db080925555d51", + "Name": "x", + "Description": "X coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "ccd63de4d01e47e8b4683d5bf5f0f420", + "Name": "y", + "Description": "Y coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "3d911bbbd10a48d08c76806d7556e113", + "Name": "z", + "Description": "Z coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "8dcb858f3393489297c245f99b8e2436", + "Name": "Point", + "Description": "Point created by coordinates", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Point.ByCoordinates@double,double,double", + "Replication": "Auto", + "Description": "Form a Point given 3 cartesian coordinates\n\nPoint.ByCoordinates (x: double = 0, y: double = 0, z: double = 0): Point" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "d422e3a717a948568a253d0e3c7d735b", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "070f3b8de56946feba02e3f43bc020c1", + "Name": "points", + "Description": "Points for nurbs curve\n\nPoint[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "7c3ef04e314a44c1878ca3428833c959", + "Name": "NurbsCurve", + "Description": "Nurbscurve created from points", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.NurbsCurve.ByControlPoints@Autodesk.DesignScript.Geometry.Point[]", + "Replication": "Auto", + "Description": "Create a BSplineCurve by using explicit control points. NOTE 1: BSplineCurves with deg=1 have G1 discontinuities, which cause problems for extrusion, sweep, and other operations. They should be avoided. Use a PolyCurve instead. NOTE 2: If the curve is periodic (closed), then the first and last points MUST be the same.\n\nNurbsCurve.ByControlPoints (points: Point[]): NurbsCurve" + }, + { + "ConcreteType": "CoreNodeModels.Input.DoubleInput, CoreNodeModels", + "NumberType": "Double", + "Id": "bbf2f09268a64c9d862369aff1e849c1", + "NodeType": "NumberInputNode", + "Inputs": [], + "Outputs": [ + { + "Id": "4d002a602637408cb3e4bc37434476eb", + "Name": "", + "Description": "Double", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Creates a number", + "InputValue": 5.0 + }, + { + "ConcreteType": "CoreNodeModels.CreateList, CoreNodeModels", + "VariableInputPorts": true, + "Id": "39530b19dca343f28812120ad044f8a8", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "6cf2fda0d55d4d4eac34c750c041c325", + "Name": "item0", + "Description": "Item Index #0", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "9d3b49669f4c4e8b949675683e3c7120", + "Name": "item1", + "Description": "Item Index #1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "fd36df71d60d4bfe871e4ed4fae9d225", + "Name": "item2", + "Description": "Item Index #2", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "44d5cf4320e54778b5e95ebe626456d0", + "Name": "item3", + "Description": "Item Index #3", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "b2f09c67d32740098a080183f591f871", + "Name": "list", + "Description": "A list (type: var[]..[])", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Makes a new list from the given inputs" + }, + { + "ConcreteType": "CoreNodeModels.Input.DoubleInput, CoreNodeModels", + "NumberType": "Double", + "Id": "ceb77e36710c4b50af5fcb5a8eff43e6", + "NodeType": "NumberInputNode", + "Inputs": [], + "Outputs": [ + { + "Id": "bb694775b82045d3a55666a22ba25c48", + "Name": "", + "Description": "Double", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Creates a number", + "InputValue": 10.0 + }, + { + "ConcreteType": "CoreNodeModels.Input.DoubleInput, CoreNodeModels", + "NumberType": "Double", + "Id": "ddbed6a570c44361aaa29b611fdd9e43", + "NodeType": "NumberInputNode", + "Inputs": [], + "Outputs": [ + { + "Id": "93c6c67d6e344fa886536f9e6b2e0aff", + "Name": "", + "Description": "Double", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Creates a number", + "InputValue": 15.0 + }, + { + "ConcreteType": "CoreNodeModels.CreateList, CoreNodeModels", + "VariableInputPorts": true, + "Id": "0e7bf8a00a044775a9e0b6b4339413dc", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "64e193e0ef2348c6810f619267ca752f", + "Name": "item0", + "Description": "Item Index #0", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "ddc4c83fc78146de919cbccccb74c73f", + "Name": "item1", + "Description": "Item Index #1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "1c2d3d5a71934bb6805aa9284c1e48a4", + "Name": "item2", + "Description": "Item Index #2", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "5db07c7ba44c40dfb4110b1f2c588fdd", + "Name": "item3", + "Description": "Item Index #3", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "d5cf0939e029467ab2ab4d1a6b41fee7", + "Name": "list", + "Description": "A list (type: var[]..[])", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Makes a new list from the given inputs" + }, + { + "ConcreteType": "CoreNodeModels.Input.DoubleInput, CoreNodeModels", + "NumberType": "Double", + "Id": "06a171262db840acb6d6cef745210c7a", + "NodeType": "NumberInputNode", + "Inputs": [], + "Outputs": [ + { + "Id": "a311838bc3434db5ba9306c02462a8ab", + "Name": "", + "Description": "Double", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Creates a number", + "InputValue": 20.0 + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "7f48aa6381de4526b803d4f6e4ed0400", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "a8871ad67d08434d8fbe0be1e9ceeff3", + "Name": "curve", + "Description": "Autodesk.DesignScript.Geometry.Curve", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "04ba61743d504bc3893f312399c7fef7", + "Name": "direction", + "Description": "Vector to extrude along\n\nVector\nDefault value : Autodesk.DesignScript.Geometry.Vector.ByCoordinates(0, 0, 1)", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "a4d1748f7ea24c4a91a9427576d8cae2", + "Name": "distance", + "Description": "Distance to extrude\n\ndouble\nDefault value : 1", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "54092b2e9d754927b362d40d6e548dc8", + "Name": "Surface", + "Description": "The extruded Surface", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Curve.Extrude@Autodesk.DesignScript.Geometry.Vector,double", + "Replication": "Auto", + "Description": "Extrudes a Curve in the specified direction, by the specified distance\n\nCurve.Extrude (direction: Vector = Autodesk.DesignScript.Geometry.Vector.ByCoordinates(0, 0, 1), distance: double = 1): Surface" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "4dea0161edac45798c82743cf8b11267", + "NodeType": "FunctionNode", + "Inputs": [], + "Outputs": [ + { + "Id": "fc65b203e1f34add9a584909fcd8d0d5", + "Name": "Vector", + "Description": "Vector", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Vector.ZAxis", + "Replication": "Auto", + "Description": "Get the canonical Z axis Vector (0,0,1)\n\nVector.ZAxis ( ): Vector" + } + ], + "Connectors": [ + { + "Start": "3221298c289945ad8cac9888700c8639", + "End": "a4d1748f7ea24c4a91a9427576d8cae2", + "Id": "2f764b4dc20c4eb08daee1f51e23ce80", + "IsHidden": "False" + }, + { + "Start": "8dcb858f3393489297c245f99b8e2436", + "End": "070f3b8de56946feba02e3f43bc020c1", + "Id": "e45d1146f47d44f5baa6253e80508282", + "IsHidden": "False" + }, + { + "Start": "7c3ef04e314a44c1878ca3428833c959", + "End": "a8871ad67d08434d8fbe0be1e9ceeff3", + "Id": "974952789aac427792836f209f575bef", + "IsHidden": "False" + }, + { + "Start": "4d002a602637408cb3e4bc37434476eb", + "End": "6cf2fda0d55d4d4eac34c750c041c325", + "Id": "6ada976ea165445ebfe4cdbb48d27439", + "IsHidden": "False" + }, + { + "Start": "4d002a602637408cb3e4bc37434476eb", + "End": "ddc4c83fc78146de919cbccccb74c73f", + "Id": "042e386fe1d8426cacbfd20b43f2c75d", + "IsHidden": "False" + }, + { + "Start": "b2f09c67d32740098a080183f591f871", + "End": "650e1051a10c4387a9db080925555d51", + "Id": "108bc94cacc545a98dea795425579e34", + "IsHidden": "False" + }, + { + "Start": "bb694775b82045d3a55666a22ba25c48", + "End": "9d3b49669f4c4e8b949675683e3c7120", + "Id": "5b3049bbf2c94bd58aaa1b08f038eed4", + "IsHidden": "False" + }, + { + "Start": "bb694775b82045d3a55666a22ba25c48", + "End": "1c2d3d5a71934bb6805aa9284c1e48a4", + "Id": "b7926835c3ee49ae8bad8592a31f1264", + "IsHidden": "False" + }, + { + "Start": "93c6c67d6e344fa886536f9e6b2e0aff", + "End": "fd36df71d60d4bfe871e4ed4fae9d225", + "Id": "28ccd473bb504fa8958319db8a415358", + "IsHidden": "False" + }, + { + "Start": "93c6c67d6e344fa886536f9e6b2e0aff", + "End": "5db07c7ba44c40dfb4110b1f2c588fdd", + "Id": "6e1828880f714ea69d3b831058928f21", + "IsHidden": "False" + }, + { + "Start": "d5cf0939e029467ab2ab4d1a6b41fee7", + "End": "ccd63de4d01e47e8b4683d5bf5f0f420", + "Id": "bebca5ad1aea4313a237f1a271c50aad", + "IsHidden": "False" + }, + { + "Start": "a311838bc3434db5ba9306c02462a8ab", + "End": "44d5cf4320e54778b5e95ebe626456d0", + "Id": "73215385dd6d41ca9cd8e6f1201d1e26", + "IsHidden": "False" + }, + { + "Start": "a311838bc3434db5ba9306c02462a8ab", + "End": "64e193e0ef2348c6810f619267ca752f", + "Id": "b77b54693ada457e8ea14df0d4f7953b", + "IsHidden": "False" + }, + { + "Start": "fc65b203e1f34add9a584909fcd8d0d5", + "End": "04ba61743d504bc3893f312399c7fef7", + "Id": "42eee64fc6334a94920db0ec7b73287d", + "IsHidden": "False" + } + ], + "Dependencies": [], + "NodeLibraryDependencies": [], + "Thumbnail": "", + "GraphDocumentationURL": null, + "ExtensionWorkspaceData": [ + { + "ExtensionGuid": "28992e1d-abb9-417f-8b1b-05e053bee670", + "Name": "Properties", + "Version": "3.0", + "Data": {} + } + ], + "Author": "", + "Linting": { + "activeLinter": "None", + "activeLinterId": "7b75fb44-43fd-4631-a878-29f4d5d8399a", + "warningCount": 0, + "errorCount": 0 + }, + "Bindings": [], + "View": { + "Dynamo": { + "ScaleFactor": 1.0, + "HasRunWithoutCrash": true, + "IsVisibleInDynamoLibrary": true, + "Version": "2.19.0.5874", + "RunType": "Manual", + "RunPeriod": "1000" + }, + "Camera": { + "Name": "_Background Preview", + "EyeX": -17.718215942382813, + "EyeY": 22.505508422851563, + "EyeZ": 19.34986686706543, + "LookX": 12.718215942382813, + "LookY": -11.505508422851563, + "LookZ": -27.34986686706543, + "UpX": 0.062325332313776016, + "UpY": 0.98901587724685669, + "UpZ": -0.13402673602104187 + }, + "ConnectorPins": [], + "NodeViews": [ + { + "Id": "774a899f07ef4aefbb678d99911818cb", + "Name": "Number", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 980.10116839762622, + "Y": 550.03783382789322 + }, + { + "Id": "e1125e894085469c8f3a26e50446f605", + "Name": "Point.ByCoordinates", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 655.60116839762622, + "Y": 256.03783382789322 + }, + { + "Id": "d422e3a717a948568a253d0e3c7d735b", + "Name": "NurbsCurve.ByControlPoints", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 980.10116839762622, + "Y": 256.03783382789322 + }, + { + "Id": "bbf2f09268a64c9d862369aff1e849c1", + "Name": "Number", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 163.10116839762622, + "Y": 103.03783382789322 + }, + { + "Id": "39530b19dca343f28812120ad044f8a8", + "Name": "List Create", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 395.60116839762622, + "Y": 149.03783382789319 + }, + { + "Id": "ceb77e36710c4b50af5fcb5a8eff43e6", + "Name": "Number", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 163.10116839762622, + "Y": 250.03783382789322 + }, + { + "Id": "ddbed6a570c44361aaa29b611fdd9e43", + "Name": "Number", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 163.10116839762622, + "Y": 545.03783382789334 + }, + { + "Id": "0e7bf8a00a044775a9e0b6b4339413dc", + "Name": "List Create", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 395.60116839762622, + "Y": 397.03783382789322 + }, + { + "Id": "06a171262db840acb6d6cef745210c7a", + "Name": "Number", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 163.10116839762622, + "Y": 398.03783382789322 + }, + { + "Id": "7f48aa6381de4526b803d4f6e4ed0400", + "Name": "Curve.Extrude", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1365.6011683976262, + "Y": 369.03783382789322 + }, + { + "Id": "4dea0161edac45798c82743cf8b11267", + "Name": "Vector.ZAxis", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 980.10116839762622, + "Y": 403.03783382789322 + } + ], + "Annotations": [], + "X": -54.486267154012694, + "Y": -60.487132490180585, + "Zoom": 0.76582939285155194 + } +} \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Curve.Extrude(curve, direction, distance).md b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Curve.Extrude(curve, direction, distance).md new file mode 100644 index 00000000000..4ac0c2828e7 --- /dev/null +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Curve.Extrude(curve, direction, distance).md @@ -0,0 +1,8 @@ +## In Depth +`Curve.Extrude (curve, direction, distance)` extrudes an input curve using an input vector to determine the direction of the extrusion. A separate `distance` input is used for the extrusion distance. + +In the example below, we first create a NurbsCurve using a `NurbsCurve.ByControlPoints` node, with a set of randomly generated points as the input. A code block is used to specify the X, Y, and Z components of a `Vector.ByCoordinates` node. This vector is then used as the direction input in an `Curve.Extrude` node while a `number slider` is used to control the `distance` input. +___ +## Example File + +![Curve.Extrude(curve, direction, distance)](./Autodesk.DesignScript.Geometry.Curve.Extrude(curve,%20direction,%20distance)_img.jpg) \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Curve.Extrude(curve, direction, distance)_img.jpg b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Curve.Extrude(curve, direction, distance)_img.jpg new file mode 100644 index 00000000000..fe6eb98d751 Binary files /dev/null and b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Curve.Extrude(curve, direction, distance)_img.jpg differ diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Curve.Extrude(curve, distance).dyn b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Curve.Extrude(curve, distance).dyn new file mode 100644 index 00000000000..8e1571f520a --- /dev/null +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Curve.Extrude(curve, distance).dyn @@ -0,0 +1,578 @@ +{ + "Uuid": "ca215674-7c3d-44ca-adbe-b65991b66b19", + "IsCustomNode": false, + "Description": "", + "Name": "Autodesk.DesignScript.Geometry.Curve.Extrude", + "ElementResolver": { + "ResolutionMap": {} + }, + "Inputs": [], + "Outputs": [], + "Nodes": [ + { + "ConcreteType": "CoreNodeModels.Input.DoubleInput, CoreNodeModels", + "NumberType": "Double", + "Id": "7d113d23afb54822bd422381dabab849", + "NodeType": "NumberInputNode", + "Inputs": [], + "Outputs": [ + { + "Id": "a893068488684662b5ee7af26bae9c42", + "Name": "", + "Description": "Double", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Creates a number", + "InputValue": 5.0 + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "10ecc4a2ae844daf9e4303966ec718c9", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "f128f6db21f44ea8b52516dfd2929334", + "Name": "x", + "Description": "X coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "529d233f94394935b4e335951defb4ed", + "Name": "y", + "Description": "Y coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "1d714bedb7844fdfad3d115163adb8e1", + "Name": "z", + "Description": "Z coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "3d9ca9356a624be283b1d96a746a0a07", + "Name": "Point", + "Description": "Point created by coordinates", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Point.ByCoordinates@double,double,double", + "Replication": "Auto", + "Description": "Form a Point given 3 cartesian coordinates\n\nPoint.ByCoordinates (x: double = 0, y: double = 0, z: double = 0): Point" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "2833e80082f94259899f7a7323830c4b", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "ad4b24a5de574948817ef8239b87068c", + "Name": "points", + "Description": "Points for nurbs curve\n\nPoint[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "7893aa81515b4894a28e2217a884a824", + "Name": "NurbsCurve", + "Description": "Nurbscurve created from points", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.NurbsCurve.ByControlPoints@Autodesk.DesignScript.Geometry.Point[]", + "Replication": "Auto", + "Description": "Create a BSplineCurve by using explicit control points. NOTE 1: BSplineCurves with deg=1 have G1 discontinuities, which cause problems for extrusion, sweep, and other operations. They should be avoided. Use a PolyCurve instead. NOTE 2: If the curve is periodic (closed), then the first and last points MUST be the same.\n\nNurbsCurve.ByControlPoints (points: Point[]): NurbsCurve" + }, + { + "ConcreteType": "CoreNodeModels.Input.DoubleInput, CoreNodeModels", + "NumberType": "Double", + "Id": "af67f81ad6b341808aef32162ae19ef8", + "NodeType": "NumberInputNode", + "Inputs": [], + "Outputs": [ + { + "Id": "b5a44e42f15d48ff928c1ad066aa84f0", + "Name": "", + "Description": "Double", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Creates a number", + "InputValue": 5.0 + }, + { + "ConcreteType": "CoreNodeModels.CreateList, CoreNodeModels", + "VariableInputPorts": true, + "Id": "ef993fef7c464f45911f301c9d37d17b", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "da2478f8414847cbaa64e7ada1f96310", + "Name": "item0", + "Description": "Item Index #0", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "3fb9ae71f183403d941df3a48bafb44b", + "Name": "item1", + "Description": "Item Index #1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "82ae98cc99164538bef97349c862f452", + "Name": "item2", + "Description": "Item Index #2", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "ed1e0da9cd9b4db6858656fa280606fd", + "Name": "item3", + "Description": "Item Index #3", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "bcecbeb50ddb4b158145386dd388e635", + "Name": "list", + "Description": "A list (type: var[]..[])", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Makes a new list from the given inputs" + }, + { + "ConcreteType": "CoreNodeModels.Input.DoubleInput, CoreNodeModels", + "NumberType": "Double", + "Id": "1bad47b3ef5a45e9b8496668ca3b49e6", + "NodeType": "NumberInputNode", + "Inputs": [], + "Outputs": [ + { + "Id": "8fc8deda86f84dd98fa427550384a873", + "Name": "", + "Description": "Double", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Creates a number", + "InputValue": 10.0 + }, + { + "ConcreteType": "CoreNodeModels.Input.DoubleInput, CoreNodeModels", + "NumberType": "Double", + "Id": "dff3e3a0b6ad49f6bee079c279f64216", + "NodeType": "NumberInputNode", + "Inputs": [], + "Outputs": [ + { + "Id": "67cc2a231f264de99f2a38539ef32907", + "Name": "", + "Description": "Double", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Creates a number", + "InputValue": 15.0 + }, + { + "ConcreteType": "CoreNodeModels.CreateList, CoreNodeModels", + "VariableInputPorts": true, + "Id": "27636f9e08bf4c859037e8dbc4912629", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "7d67ba72dcea45d4ad454406cf150868", + "Name": "item0", + "Description": "Item Index #0", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "c66f25593cd942a38b30a961fa45c635", + "Name": "item1", + "Description": "Item Index #1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "1969bc1e60e94ac697018254f99cf00d", + "Name": "item2", + "Description": "Item Index #2", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "aab689e2fe5147358518ebe4921de3b8", + "Name": "item3", + "Description": "Item Index #3", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "e4eb6cc3b5d44a91b3de7df4b3583138", + "Name": "list", + "Description": "A list (type: var[]..[])", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Makes a new list from the given inputs" + }, + { + "ConcreteType": "CoreNodeModels.Input.DoubleInput, CoreNodeModels", + "NumberType": "Double", + "Id": "968b8a50101045d5822288abe8cca8f9", + "NodeType": "NumberInputNode", + "Inputs": [], + "Outputs": [ + { + "Id": "f388a75c083e425cb29c30a455e0f347", + "Name": "", + "Description": "Double", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Creates a number", + "InputValue": 20.0 + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "92218af415a54ff296b1f8284254d252", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "10d405422bbf4ae8aa75477cd484699b", + "Name": "curve", + "Description": "Autodesk.DesignScript.Geometry.Curve", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "a7dc7d39d47a4c44981c57629dd9d3c5", + "Name": "distance", + "Description": "The distance to extrude the curve\n\ndouble\nDefault value : 1", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "868c622742cd4759b61347f1df3cea13", + "Name": "Surface", + "Description": "The extruded Surface", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Curve.Extrude@double", + "Replication": "Auto", + "Description": "Extrudes a Curve in the normal Vector direction\n\nCurve.Extrude (distance: double = 1): Surface" + } + ], + "Connectors": [ + { + "Start": "a893068488684662b5ee7af26bae9c42", + "End": "a7dc7d39d47a4c44981c57629dd9d3c5", + "Id": "3cd109ebc7ef4ef98492d99c05a419b0", + "IsHidden": "False" + }, + { + "Start": "3d9ca9356a624be283b1d96a746a0a07", + "End": "ad4b24a5de574948817ef8239b87068c", + "Id": "f0aaf200802c4148b4f847f6bf98c88d", + "IsHidden": "False" + }, + { + "Start": "7893aa81515b4894a28e2217a884a824", + "End": "10d405422bbf4ae8aa75477cd484699b", + "Id": "87ded8640af249b9a3f52a3a536c8547", + "IsHidden": "False" + }, + { + "Start": "b5a44e42f15d48ff928c1ad066aa84f0", + "End": "da2478f8414847cbaa64e7ada1f96310", + "Id": "e7ea401b552947e8b103834918907b6d", + "IsHidden": "False" + }, + { + "Start": "b5a44e42f15d48ff928c1ad066aa84f0", + "End": "c66f25593cd942a38b30a961fa45c635", + "Id": "f1282c6e79544ce6b52c575fe633418b", + "IsHidden": "False" + }, + { + "Start": "bcecbeb50ddb4b158145386dd388e635", + "End": "f128f6db21f44ea8b52516dfd2929334", + "Id": "34d4f40435264f3bb878c681779c1795", + "IsHidden": "False" + }, + { + "Start": "8fc8deda86f84dd98fa427550384a873", + "End": "3fb9ae71f183403d941df3a48bafb44b", + "Id": "bb062e396a154d5492874973bfab41c5", + "IsHidden": "False" + }, + { + "Start": "8fc8deda86f84dd98fa427550384a873", + "End": "1969bc1e60e94ac697018254f99cf00d", + "Id": "6365b54fb9244cba9e3967a3b82213b6", + "IsHidden": "False" + }, + { + "Start": "67cc2a231f264de99f2a38539ef32907", + "End": "82ae98cc99164538bef97349c862f452", + "Id": "44ed550c6dfa41e8ac82a392c6e9f0f4", + "IsHidden": "False" + }, + { + "Start": "67cc2a231f264de99f2a38539ef32907", + "End": "aab689e2fe5147358518ebe4921de3b8", + "Id": "8f0c0370e6014a439a566f01596c35ef", + "IsHidden": "False" + }, + { + "Start": "e4eb6cc3b5d44a91b3de7df4b3583138", + "End": "529d233f94394935b4e335951defb4ed", + "Id": "a9b79be7b16248f2913b7dafbe2eeaaa", + "IsHidden": "False" + }, + { + "Start": "f388a75c083e425cb29c30a455e0f347", + "End": "ed1e0da9cd9b4db6858656fa280606fd", + "Id": "41138fabd273400988e06e72c50fe5a4", + "IsHidden": "False" + }, + { + "Start": "f388a75c083e425cb29c30a455e0f347", + "End": "7d67ba72dcea45d4ad454406cf150868", + "Id": "fdd809167acd48eba0d2ff470b57602f", + "IsHidden": "False" + } + ], + "Dependencies": [], + "NodeLibraryDependencies": [], + "Thumbnail": "", + "GraphDocumentationURL": null, + "ExtensionWorkspaceData": [ + { + "ExtensionGuid": "28992e1d-abb9-417f-8b1b-05e053bee670", + "Name": "Properties", + "Version": "3.0", + "Data": {} + } + ], + "Author": "", + "Linting": { + "activeLinter": "None", + "activeLinterId": "7b75fb44-43fd-4631-a878-29f4d5d8399a", + "warningCount": 0, + "errorCount": 0 + }, + "Bindings": [], + "View": { + "Dynamo": { + "ScaleFactor": 1.0, + "HasRunWithoutCrash": true, + "IsVisibleInDynamoLibrary": true, + "Version": "2.19.0.5874", + "RunType": "Manual", + "RunPeriod": "1000" + }, + "Camera": { + "Name": "_Background Preview", + "EyeX": -17.718215942382813, + "EyeY": 22.505508422851563, + "EyeZ": 19.34986686706543, + "LookX": 12.718215942382813, + "LookY": -11.505508422851563, + "LookZ": -27.34986686706543, + "UpX": 0.062325332313776016, + "UpY": 0.98901587724685669, + "UpZ": -0.13402673602104187 + }, + "ConnectorPins": [], + "NodeViews": [ + { + "Id": "7d113d23afb54822bd422381dabab849", + "Name": "Number", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 937.30174332344222, + "Y": 403.03783382789317 + }, + { + "Id": "10ecc4a2ae844daf9e4303966ec718c9", + "Name": "Point.ByCoordinates", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 612.80174332344222, + "Y": 255.03783382789322 + }, + { + "Id": "2833e80082f94259899f7a7323830c4b", + "Name": "NurbsCurve.ByControlPoints", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 937.30174332344222, + "Y": 255.03783382789319 + }, + { + "Id": "af67f81ad6b341808aef32162ae19ef8", + "Name": "Number", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 120.30174332344222, + "Y": 102.03783382789317 + }, + { + "Id": "ef993fef7c464f45911f301c9d37d17b", + "Name": "List Create", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 352.80174332344222, + "Y": 148.03783382789317 + }, + { + "Id": "1bad47b3ef5a45e9b8496668ca3b49e6", + "Name": "Number", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 120.30174332344222, + "Y": 249.03783382789319 + }, + { + "Id": "dff3e3a0b6ad49f6bee079c279f64216", + "Name": "Number", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 120.30174332344222, + "Y": 544.03783382789311 + }, + { + "Id": "27636f9e08bf4c859037e8dbc4912629", + "Name": "List Create", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 352.80174332344222, + "Y": 396.03783382789317 + }, + { + "Id": "968b8a50101045d5822288abe8cca8f9", + "Name": "Number", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 120.30174332344222, + "Y": 397.03783382789322 + }, + { + "Id": "92218af415a54ff296b1f8284254d252", + "Name": "Curve.Extrude", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1322.8017433234422, + "Y": 312.03783382789322 + } + ], + "Annotations": [], + "X": -11.654948242121804, + "Y": 62.251722825624, + "Zoom": 0.76582939285155194 + } +} \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Curve.Extrude(curve, distance).md b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Curve.Extrude(curve, distance).md new file mode 100644 index 00000000000..fd07215110b --- /dev/null +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Curve.Extrude(curve, distance).md @@ -0,0 +1,8 @@ +## In Depth +`Curve.Extrude (curve, distance)` extrudes an input curve using an input number to determine the distance of the extrusion. The direction of the normal vector along the curve is used for the extrusion direction. + +In the example below, we first create a NurbsCurve by using a `NurbsCurve.ByControlPoints` node, with a set of randomly generated points as the input. Then, we use a `Curve.Extrude` node to extrude the curve. A number slider is used as the `distance` input in the `Curve.Extrude` node. +___ +## Example File + +![Curve.Extrude(curve, distance)](./Autodesk.DesignScript.Geometry.Curve.Extrude(curve,%20distance)_img.jpg) \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Curve.Extrude(curve, distance)_img.jpg b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Curve.Extrude(curve, distance)_img.jpg new file mode 100644 index 00000000000..e5193da8e33 Binary files /dev/null and b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Curve.Extrude(curve, distance)_img.jpg differ diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Curve.ExtrudeAsSolid(curve, direction).dyn b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Curve.ExtrudeAsSolid(curve, direction).dyn new file mode 100644 index 00000000000..20effd6aab6 --- /dev/null +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Curve.ExtrudeAsSolid(curve, direction).dyn @@ -0,0 +1,614 @@ +{ + "Uuid": "011cb917-361e-42bd-9a41-b2011d847a69", + "IsCustomNode": false, + "Description": "", + "Name": "Autodesk.DesignScript.Geometry.Curve.ExtrudeAsSolid", + "ElementResolver": { + "ResolutionMap": {} + }, + "Inputs": [ + { + "Id": "9524180d28934338815d3cfa2e25eb11", + "Name": "Number Slider", + "Type": "number", + "Type2": "number", + "Value": "5", + "MaximumValue": 10.0, + "MinimumValue": 3.0, + "StepValue": 1.0, + "NumberType": "Double", + "Description": "Produces numeric values", + "SelectedIndex": 0 + }, + { + "Id": "36547c2470ae4c23bbfa5c3801acbfe2", + "Name": "Boolean", + "Type": "boolean", + "Type2": "boolean", + "Value": "true", + "Description": "Enables selection between True and False", + "SelectedIndex": 0 + } + ], + "Outputs": [], + "Nodes": [ + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "dc37b524c963416282cb38015c5ef93b", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "26f53f47c1d64a578adaa44bfe27b2cf", + "Name": "amount", + "Description": "Amount of random numbers the result list will contain.\n\nint", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "892b7c54c61149afb99f917f74fa2ce5", + "Name": "number", + "Description": "List of random numbers between 0 and 1.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Math.RandomList@int", + "Replication": "Auto", + "Description": "Produces a list containing the given amount of random doubles in the range of [0, 1).\n\nMath.RandomList (amount: int): var[]..[]" + }, + { + "ConcreteType": "CoreNodeModels.Input.DoubleSlider, CoreNodeModels", + "NumberType": "Double", + "MaximumValue": 10.0, + "MinimumValue": 3.0, + "StepValue": 1.0, + "Id": "9524180d28934338815d3cfa2e25eb11", + "NodeType": "NumberInputNode", + "Inputs": [], + "Outputs": [ + { + "Id": "1cc27d196f204ae2976dbe15d289bbea", + "Name": "", + "Description": "Double", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Produces numeric values", + "InputValue": 5.0 + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "5ba25128ff164e9089c118824cd12864", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "a6d2055755f0423ba5053e4133493321", + "Name": "coordinateSystem", + "Description": "Coordinate system to build the point in\n\nCoordinateSystem\nDefault value : Autodesk.DesignScript.Geometry.CoordinateSystem.ByOrigin(0, 0, 0)", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "38fd3d2667074291bdc5f7e1199b1cd7", + "Name": "angle", + "Description": "The angle is the rotation from the X axis in the coordinate system around the Z axis in degrees\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "4619425399cb40e9a8348034f4009c3d", + "Name": "elevation", + "Description": "The elevation of the point above the XY plane\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "e2ca0bd5af74440395c056728df29232", + "Name": "radius", + "Description": "The distance from the origin of the coordinate system\n\ndouble\nDefault value : 1", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "dc22d4c5ddc046b7825aa65142020dc2", + "Name": "Point", + "Description": "Point at cylindrical coordinates", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Point.ByCylindricalCoordinates@Autodesk.DesignScript.Geometry.CoordinateSystem,double,double,double", + "Replication": "Auto", + "Description": "Form a Point in the given coordinate system given its position in cylindrical coordinates.\n\nPoint.ByCylindricalCoordinates (coordinateSystem: CoordinateSystem = Autodesk.DesignScript.Geometry.CoordinateSystem.ByOrigin(0, 0, 0), angle: double = 0, elevation: double = 0, radius: double = 1): Point" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "41315d48213648a6a80f2c0c3f5511b9", + "NodeType": "CodeBlockNode", + "Inputs": [ + { + "Id": "9498335ed1a74b6585ebcb378fcf5bf2", + "Name": "x", + "Description": "x", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "64be9fc6e2c84dd1b8428f941482b47a", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "x*5;" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "02ec31d08f904e13b906b52755b62b5d", + "NodeType": "CodeBlockNode", + "Inputs": [ + { + "Id": "485be0318144437a94496cdbfa75cde4", + "Name": "a", + "Description": "a", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "285c263e8d2247f59a263f6c3204a3c7", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "0..360..360/(a-1);" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "d26b8392f3514d80a96aa0776587478e", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "fe636b6c332c4a17a8d71507b1a4aece", + "Name": "points", + "Description": "Points for nurbs curve\n\nPoint[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "45ae31a15da944fa859cea31f40f8c13", + "Name": "closeCurve", + "Description": "bool\nDefault value : false", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "5c7e7d06c15d4167babf6321804acb3c", + "Name": "NurbsCurve", + "Description": "Nurbscurve created from points", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.NurbsCurve.ByPoints@Autodesk.DesignScript.Geometry.Point[],bool", + "Replication": "Auto", + "Description": "Create a BSplineCurve by interpolating between points.\n\nNurbsCurve.ByPoints (points: Point[], closeCurve: bool = false): NurbsCurve" + }, + { + "ConcreteType": "CoreNodeModels.Input.BoolSelector, CoreNodeModels", + "Id": "36547c2470ae4c23bbfa5c3801acbfe2", + "NodeType": "BooleanInputNode", + "Inputs": [], + "Outputs": [ + { + "Id": "a528f5c7becd463d8d26d2bd289019ba", + "Name": "", + "Description": "Boolean", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Enables selection between True and False", + "InputValue": true + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "4ee4a60954aa483db3f6e218c544892b", + "NodeType": "CodeBlockNode", + "Inputs": [], + "Outputs": [ + { + "Id": "04312cfaebf64c3e81b0f6da0ada1bd4", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "39a221ceeb1b426ab9a1fd3a70a0de79", + "Name": "", + "Description": "Value of expression at line 2", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "bbd70d4bc50142faba3fc6a3f94870cb", + "Name": "", + "Description": "Value of expression at line 3", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "3;\n-2;\n1;" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "3a9b58e14e0f4277b46132b65454b265", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "0a2352a2de6f4fc4b823e9a63bd2dd2b", + "Name": "x", + "Description": "X coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "049b9f9d2641476b886ca2bbfaf9ac3f", + "Name": "y", + "Description": "Y coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "4088dbbde833410491db19cdc8cdcd94", + "Name": "z", + "Description": "Z coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "cfbb511fa47e42a596aafd33fabdc546", + "Name": "Vector", + "Description": "Vector created by coordinates", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Vector.ByCoordinates@double,double,double", + "Replication": "Auto", + "Description": "Form a Vector by 3 Euclidean coordinates\n\nVector.ByCoordinates (x: double = 0, y: double = 0, z: double = 0): Vector" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "b8c8bf808d7b4c44804a5af124d0da10", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "bb2b7b2c64904f7bb5152b5ffbd18f16", + "Name": "curve", + "Description": "Autodesk.DesignScript.Geometry.Curve", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "e680cf53587c43869be6ce8f5800e01b", + "Name": "direction", + "Description": "Vector to extrude along\n\nVector\nDefault value : Autodesk.DesignScript.Geometry.Vector.ByCoordinates(0, 0, 1)", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "a347750f4afb4ab29b74f31059cf26cd", + "Name": "Solid", + "Description": "The extruded Solid", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Curve.ExtrudeAsSolid@Autodesk.DesignScript.Geometry.Vector", + "Replication": "Auto", + "Description": "Extrudes a Curve in the specified direction, by the length of the input Vector. Curve must be closed.\n\nCurve.ExtrudeAsSolid (direction: Vector = Autodesk.DesignScript.Geometry.Vector.ByCoordinates(0, 0, 1)): Solid" + } + ], + "Connectors": [ + { + "Start": "892b7c54c61149afb99f917f74fa2ce5", + "End": "9498335ed1a74b6585ebcb378fcf5bf2", + "Id": "ba8b3dbb11c049178994262673e671dc", + "IsHidden": "False" + }, + { + "Start": "1cc27d196f204ae2976dbe15d289bbea", + "End": "26f53f47c1d64a578adaa44bfe27b2cf", + "Id": "6d754441cb444a4a8b88dcbc3af8f8cd", + "IsHidden": "False" + }, + { + "Start": "1cc27d196f204ae2976dbe15d289bbea", + "End": "485be0318144437a94496cdbfa75cde4", + "Id": "aa7a7579eeed4f1cb5e426c444eb356e", + "IsHidden": "False" + }, + { + "Start": "dc22d4c5ddc046b7825aa65142020dc2", + "End": "fe636b6c332c4a17a8d71507b1a4aece", + "Id": "7df3b32dd2514d8cb4f9047f271fc4ef", + "IsHidden": "False" + }, + { + "Start": "64be9fc6e2c84dd1b8428f941482b47a", + "End": "e2ca0bd5af74440395c056728df29232", + "Id": "7d4f6f32869c4f3aa9f7f09655d9a39d", + "IsHidden": "False" + }, + { + "Start": "285c263e8d2247f59a263f6c3204a3c7", + "End": "38fd3d2667074291bdc5f7e1199b1cd7", + "Id": "3ca59d20b62f4c75b6420c507e22fb78", + "IsHidden": "False" + }, + { + "Start": "5c7e7d06c15d4167babf6321804acb3c", + "End": "bb2b7b2c64904f7bb5152b5ffbd18f16", + "Id": "421f6c8b5f62467498aa4304611d00dc", + "IsHidden": "False" + }, + { + "Start": "a528f5c7becd463d8d26d2bd289019ba", + "End": "45ae31a15da944fa859cea31f40f8c13", + "Id": "e60c2782ef6b4fd381a6c380726ce4cc", + "IsHidden": "False" + }, + { + "Start": "04312cfaebf64c3e81b0f6da0ada1bd4", + "End": "0a2352a2de6f4fc4b823e9a63bd2dd2b", + "Id": "d0e84d8dcc2b4cbcb4eb822f1b3b21fe", + "IsHidden": "False" + }, + { + "Start": "39a221ceeb1b426ab9a1fd3a70a0de79", + "End": "049b9f9d2641476b886ca2bbfaf9ac3f", + "Id": "b2ff171964df4af89e07be072e808ce5", + "IsHidden": "False" + }, + { + "Start": "bbd70d4bc50142faba3fc6a3f94870cb", + "End": "4088dbbde833410491db19cdc8cdcd94", + "Id": "975910ac6ec84dc58a1d2c78a8d4abf5", + "IsHidden": "False" + }, + { + "Start": "cfbb511fa47e42a596aafd33fabdc546", + "End": "e680cf53587c43869be6ce8f5800e01b", + "Id": "8657c4d874944ac1820a685b55eb297f", + "IsHidden": "False" + } + ], + "Dependencies": [], + "NodeLibraryDependencies": [], + "Thumbnail": "", + "GraphDocumentationURL": null, + "ExtensionWorkspaceData": [ + { + "ExtensionGuid": "28992e1d-abb9-417f-8b1b-05e053bee670", + "Name": "Properties", + "Version": "2.19", + "Data": {} + } + ], + "Author": "None provided", + "Linting": { + "activeLinter": "None", + "activeLinterId": "7b75fb44-43fd-4631-a878-29f4d5d8399a", + "warningCount": 0, + "errorCount": 0 + }, + "Bindings": [], + "View": { + "Dynamo": { + "ScaleFactor": 1.0, + "HasRunWithoutCrash": true, + "IsVisibleInDynamoLibrary": true, + "Version": "2.19.0.5874", + "RunType": "Automatic", + "RunPeriod": "1000" + }, + "Camera": { + "Name": "_Background Preview", + "EyeX": -14.798925399780273, + "EyeY": 12.959871292114258, + "EyeZ": 2.1644556522369385, + "LookX": 19.251585006713867, + "LookY": -9.0115299224853516, + "LookZ": -2.6407701969146729, + "UpX": 0.21443183720111847, + "UpY": 0.97629588842391968, + "UpZ": -0.02941388264298439 + }, + "ConnectorPins": [], + "NodeViews": [ + { + "Id": "dc37b524c963416282cb38015c5ef93b", + "Name": "Math.RandomList", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -470.28518325032405, + "Y": 151.1223811865971 + }, + { + "Id": "9524180d28934338815d3cfa2e25eb11", + "Name": "Number Slider", + "IsSetAsInput": true, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -918.285183250324, + "Y": 77.122381186597039 + }, + { + "Id": "5ba25128ff164e9089c118824cd12864", + "Name": "Point.ByCylindricalCoordinates", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 204.71481674967595, + "Y": 9.2948811865970242 + }, + { + "Id": "41315d48213648a6a80f2c0c3f5511b9", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -149.28518325032405, + "Y": 151.1223811865971 + }, + { + "Id": "02ec31d08f904e13b906b52755b62b5d", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -149.28518325032405, + "Y": 3.1223811865970106 + }, + { + "Id": "d26b8392f3514d80a96aa0776587478e", + "Name": "NurbsCurve.ByPoints", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 608.714816749676, + "Y": 147.29488118659702 + }, + { + "Id": "36547c2470ae4c23bbfa5c3801acbfe2", + "Name": "Boolean", + "IsSetAsInput": true, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 204.71481674967595, + "Y": 257.294881186597 + }, + { + "Id": "4ee4a60954aa483db3f6e218c544892b", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 204.71481674967595, + "Y": 404.777381186597 + }, + { + "Id": "3a9b58e14e0f4277b46132b65454b265", + "Name": "Vector.ByCoordinates", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 608.714816749676, + "Y": 325.294881186597 + }, + { + "Id": "b8c8bf808d7b4c44804a5af124d0da10", + "Name": "Curve.ExtrudeAsSolid", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 968.714816749676, + "Y": 219.29488118659702 + } + ], + "Annotations": [], + "X": 533.3771123367012, + "Y": 161.54313568424323, + "Zoom": 0.601517368536526 + } +} \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Curve.ExtrudeAsSolid(curve, direction).md b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Curve.ExtrudeAsSolid(curve, direction).md new file mode 100644 index 00000000000..56ebff09bbe --- /dev/null +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Curve.ExtrudeAsSolid(curve, direction).md @@ -0,0 +1,8 @@ +## In Depth +`Curve.ExtrudeAsSolid (curve, direction)` extrudes an input closed, planar curve using an input vector to determine the direction of the extrusion. The length of the vector is used for the extrusion distance. This node caps the ends of the extrusion to create a solid. + +In the example below, we first create a NurbsCurve by using a `NurbsCurve.ByPoints` node, with a set of randomly generated points as the input. A code block is used to specify the X, Y, and Z components of a `Vector.ByCoordinates` node. This vector is then used as the direction input in an `Curve.ExtrudeAsSolid` node. +___ +## Example File + +![Curve.ExtrudeAsSolid(curve, direction)](./Autodesk.DesignScript.Geometry.Curve.ExtrudeAsSolid(curve,%20direction)_img.jpg) \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Curve.ExtrudeAsSolid(curve, direction)_img.jpg b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Curve.ExtrudeAsSolid(curve, direction)_img.jpg new file mode 100644 index 00000000000..7112b572018 Binary files /dev/null and b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Curve.ExtrudeAsSolid(curve, direction)_img.jpg differ diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Curve.ExtrudeAsSolid(direction, distance).dyn b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Curve.ExtrudeAsSolid(curve, direction, distance).dyn similarity index 64% rename from doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Curve.ExtrudeAsSolid(direction, distance).dyn rename to doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Curve.ExtrudeAsSolid(curve, direction, distance).dyn index 1c3496fab20..f011593d557 100644 --- a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Curve.ExtrudeAsSolid(direction, distance).dyn +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Curve.ExtrudeAsSolid(curve, direction, distance).dyn @@ -1,52 +1,57 @@ { - "Uuid": "3c9d0464-8643-5ffe-96e5-ab1769818209", + "Uuid": "4e4ad5e7-fc72-4da6-ad1c-38ed1df31502", "IsCustomNode": false, "Description": "", - "Name": "ExtrudeAsSolid", + "Name": "Autodesk.DesignScript.Geometry.Curve.ExtrudeAsSolid", "ElementResolver": { "ResolutionMap": {} }, "Inputs": [ { - "Id": "4fd25c7abb42406eb64183323b390da8", + "Id": "be6e2ec9ca5a4e1da9d3c3290dc14962", "Name": "Number Slider", "Type": "number", + "Type2": "number", "Value": "5", "MaximumValue": 10.0, "MinimumValue": 3.0, "StepValue": 1.0, "NumberType": "Double", - "Description": "A slider that produces numeric values." + "Description": "Produces numeric values", + "SelectedIndex": 0 }, { - "Id": "5b4d90107c974168b1d6053bc480a259", + "Id": "c95def157d304157aaa6fb0d671482a4", "Name": "Boolean", "Type": "boolean", + "Type2": "boolean", "Value": "true", - "Description": "Selection between a true and false." + "Description": "Enables selection between True and False", + "SelectedIndex": 0 }, { - "Id": "4f3b2521746a4a8c8e5c2e438dacf042", + "Id": "baf4c9cc2a084023b7955b1bf387d5c2", "Name": "Number Slider", "Type": "number", + "Type2": "number", "Value": "2", "MaximumValue": 10.0, "MinimumValue": -10.0, "StepValue": 0.1, "NumberType": "Double", - "Description": "A slider that produces numeric values." + "Description": "Produces numeric values", + "SelectedIndex": 0 } ], "Outputs": [], "Nodes": [ { "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "9d0ab23019c44c5db1d96f2d0ed1d7fc", "NodeType": "FunctionNode", - "FunctionSignature": "DSCore.Math.RandomList@int", - "Id": "7d7435f4dcd14a1bb0693f701ecda485", "Inputs": [ { - "Id": "1075de1f95ac45fba07ec59697e33f72", + "Id": "9bdc70964b134d31a83500e7dbddd355", "Name": "amount", "Description": "Amount of random numbers the result list will contain.\n\nint", "UsingDefaultValue": false, @@ -57,7 +62,7 @@ ], "Outputs": [ { - "Id": "3639a2322ae041a4847242aa85530edc", + "Id": "f8c002e9cd524ad7bdedf1d40abe4aba", "Name": "number", "Description": "List of random numbers between 0 and 1.", "UsingDefaultValue": false, @@ -66,22 +71,22 @@ "KeepListStructure": false } ], + "FunctionSignature": "DSCore.Math.RandomList@int", "Replication": "Auto", "Description": "Produces a list containing the given amount of random doubles in the range of [0, 1).\n\nMath.RandomList (amount: int): var[]..[]" }, { "ConcreteType": "CoreNodeModels.Input.DoubleSlider, CoreNodeModels", - "NodeType": "NumberInputNode", "NumberType": "Double", "MaximumValue": 10.0, "MinimumValue": 3.0, "StepValue": 1.0, - "InputValue": 5.0, - "Id": "4fd25c7abb42406eb64183323b390da8", + "Id": "be6e2ec9ca5a4e1da9d3c3290dc14962", + "NodeType": "NumberInputNode", "Inputs": [], "Outputs": [ { - "Id": "de5a5572a9f24a40be11dce39fe4cc66", + "Id": "4f8d1b18aa30486db73f27f90a3db527", "Name": "", "Description": "Double", "UsingDefaultValue": false, @@ -91,25 +96,25 @@ } ], "Replication": "Disabled", - "Description": "A slider that produces numeric values." + "Description": "Produces numeric values", + "InputValue": 5.0 }, { "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "12bc0b9330c042f89151dca283f52527", "NodeType": "FunctionNode", - "FunctionSignature": "Autodesk.DesignScript.Geometry.Point.ByCylindricalCoordinates@Autodesk.DesignScript.Geometry.CoordinateSystem,double,double,double", - "Id": "11d18d7068564c249a8beb42837e0216", "Inputs": [ { - "Id": "a3dc374f705e47f285651d4cccae0d23", - "Name": "cs", - "Description": "The coordinate system to build the point in\n\nCoordinateSystem\nDefault value : Autodesk.DesignScript.Geometry.CoordinateSystem.ByOrigin(0, 0, 0)", + "Id": "6b392df1929444119df9dba1f827e25c", + "Name": "coordinateSystem", + "Description": "Coordinate system to build the point in\n\nCoordinateSystem\nDefault value : Autodesk.DesignScript.Geometry.CoordinateSystem.ByOrigin(0, 0, 0)", "UsingDefaultValue": true, "Level": 2, "UseLevels": false, "KeepListStructure": false }, { - "Id": "0ec92e3c3d6e41328ffb4708da49da0b", + "Id": "4613711d92ca4090b1a162b31bf36cf2", "Name": "angle", "Description": "The angle is the rotation from the X axis in the coordinate system around the Z axis in degrees\n\ndouble\nDefault value : 0", "UsingDefaultValue": true, @@ -118,7 +123,7 @@ "KeepListStructure": false }, { - "Id": "bfc136db65fd44d6ba33a88114c73ea8", + "Id": "aa0431026fef407d9a3844cdd6d53744", "Name": "elevation", "Description": "The elevation of the point above the XY plane\n\ndouble\nDefault value : 0", "UsingDefaultValue": true, @@ -127,7 +132,7 @@ "KeepListStructure": false }, { - "Id": "245b859a0a544c3a9f0cf94513e1c6d4", + "Id": "cafcc71e52c145498c1d99eb7b429dac", "Name": "radius", "Description": "The distance from the origin of the coordinate system\n\ndouble\nDefault value : 1", "UsingDefaultValue": true, @@ -138,26 +143,26 @@ ], "Outputs": [ { - "Id": "fda144f18fd24f5b8e6b3a6927e2e1e7", + "Id": "ba2b2985d15d4e9e93c2fa359844e2fd", "Name": "Point", - "Description": "A new Point", + "Description": "Point at cylindrical coordinates", "UsingDefaultValue": false, "Level": 2, "UseLevels": false, "KeepListStructure": false } ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Point.ByCylindricalCoordinates@Autodesk.DesignScript.Geometry.CoordinateSystem,double,double,double", "Replication": "Auto", - "Description": "Form a Point in the given coordinate system given its position in cylindrical coordinates.\n\nPoint.ByCylindricalCoordinates (cs: CoordinateSystem = Autodesk.DesignScript.Geometry.CoordinateSystem.ByOrigin(0, 0, 0), angle: double = 0, elevation: double = 0, radius: double = 1): Point" + "Description": "Form a Point in the given coordinate system given its position in cylindrical coordinates.\n\nPoint.ByCylindricalCoordinates (coordinateSystem: CoordinateSystem = Autodesk.DesignScript.Geometry.CoordinateSystem.ByOrigin(0, 0, 0), angle: double = 0, elevation: double = 0, radius: double = 1): Point" }, { "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "ce85d6604aac4a84a831506af37eef21", "NodeType": "CodeBlockNode", - "Code": "x*5;", - "Id": "7ba7b96cdf3e43f2a51ba6620e80f8e9", "Inputs": [ { - "Id": "38d2004a5a6740b88f799a831251eb74", + "Id": "c00be9b45c8246f888b9b19fbb36f74f", "Name": "x", "Description": "x", "UsingDefaultValue": false, @@ -168,7 +173,7 @@ ], "Outputs": [ { - "Id": "e23e9d989e7c4aea8ab98a273cee6ff3", + "Id": "e4981fcbc22a4624834259b67e4ad6c4", "Name": "", "Description": "Value of expression at line 1", "UsingDefaultValue": false, @@ -178,16 +183,16 @@ } ], "Replication": "Disabled", - "Description": "Allows for DesignScript code to be authored directly" + "Description": "Allows for DesignScript code to be authored directly", + "Code": "x*5;" }, { "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "01642a610f204b62a0f2bb411f3ee7d4", "NodeType": "CodeBlockNode", - "Code": "0..360..360/(a-1);", - "Id": "2946ae2a7ef446f2bdb3bc8fb1fdd096", "Inputs": [ { - "Id": "fbc2f5dd39924478a68e28333e71f925", + "Id": "12373893f65b49f6b60aaec3e8d37055", "Name": "a", "Description": "a", "UsingDefaultValue": false, @@ -198,7 +203,7 @@ ], "Outputs": [ { - "Id": "9cba8324f06a45dca0d132a866c01fc1", + "Id": "a7c4fe5902f04f059d73385c24ce1ee7", "Name": "", "Description": "Value of expression at line 1", "UsingDefaultValue": false, @@ -208,25 +213,25 @@ } ], "Replication": "Disabled", - "Description": "Allows for DesignScript code to be authored directly" + "Description": "Allows for DesignScript code to be authored directly", + "Code": "0..360..360/(a-1);" }, { "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "9849fd9d729f4cccb0512ec38628b794", "NodeType": "FunctionNode", - "FunctionSignature": "Autodesk.DesignScript.Geometry.NurbsCurve.ByPoints@Autodesk.DesignScript.Geometry.Point[],bool", - "Id": "ca5657b3d8fa40a4a4a1338d2cb535f4", "Inputs": [ { - "Id": "c5f79c3a34da43028dff176fa1f7cf35", + "Id": "502a62c39a5e4f83951429561b1dc567", "Name": "points", - "Description": "Point[]", + "Description": "Points for nurbs curve\n\nPoint[]", "UsingDefaultValue": false, "Level": 2, "UseLevels": false, "KeepListStructure": false }, { - "Id": "f0be1961c3374eb9bf8d0cfdc48f6e5f", + "Id": "0dfad09955164a02b5397a77d3aa5889", "Name": "closeCurve", "Description": "bool\nDefault value : false", "UsingDefaultValue": true, @@ -237,27 +242,27 @@ ], "Outputs": [ { - "Id": "902edc90a1a9498a8564c1a768396d1b", + "Id": "f2a0ec55b5bc4da888808cabd6fdf4c8", "Name": "NurbsCurve", - "Description": "NurbsCurve", + "Description": "Nurbscurve created from points", "UsingDefaultValue": false, "Level": 2, "UseLevels": false, "KeepListStructure": false } ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.NurbsCurve.ByPoints@Autodesk.DesignScript.Geometry.Point[],bool", "Replication": "Auto", "Description": "Create a BSplineCurve by interpolating between points.\n\nNurbsCurve.ByPoints (points: Point[], closeCurve: bool = false): NurbsCurve" }, { "ConcreteType": "CoreNodeModels.Input.BoolSelector, CoreNodeModels", + "Id": "c95def157d304157aaa6fb0d671482a4", "NodeType": "BooleanInputNode", - "InputValue": true, - "Id": "5b4d90107c974168b1d6053bc480a259", "Inputs": [], "Outputs": [ { - "Id": "0fff36a3da824151aa8963808d57bbab", + "Id": "cb48a71bcff34f6db607549ac9dde85b", "Name": "", "Description": "Boolean", "UsingDefaultValue": false, @@ -267,21 +272,21 @@ } ], "Replication": "Disabled", - "Description": "Selection between a true and false." + "Description": "Enables selection between True and False", + "InputValue": true }, { "ConcreteType": "CoreNodeModels.Input.DoubleSlider, CoreNodeModels", - "NodeType": "NumberInputNode", "NumberType": "Double", "MaximumValue": 10.0, "MinimumValue": -10.0, "StepValue": 0.1, - "InputValue": 2.0, - "Id": "4f3b2521746a4a8c8e5c2e438dacf042", + "Id": "baf4c9cc2a084023b7955b1bf387d5c2", + "NodeType": "NumberInputNode", "Inputs": [], "Outputs": [ { - "Id": "83f7fdf69adc4a3684595b9d40d3b5cf", + "Id": "6d2ae91576004452a4fd3f36e5f88a97", "Name": "", "Description": "Double", "UsingDefaultValue": false, @@ -291,16 +296,16 @@ } ], "Replication": "Disabled", - "Description": "A slider that produces numeric values." + "Description": "Produces numeric values", + "InputValue": 2.0 }, { "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "15bdff28ce004be394fd2209342c4e77", "NodeType": "FunctionNode", - "FunctionSignature": "Autodesk.DesignScript.Geometry.Curve.ExtrudeAsSolid@Autodesk.DesignScript.Geometry.Vector,double", - "Id": "5c9d4821335d448c867442f8e0da4265", "Inputs": [ { - "Id": "e62654a25390467db25b6b94dffb06a8", + "Id": "b1eca7d8ea374f3aae55f79bf973c872", "Name": "curve", "Description": "Autodesk.DesignScript.Geometry.Curve", "UsingDefaultValue": false, @@ -309,7 +314,7 @@ "KeepListStructure": false }, { - "Id": "5e5300c695ad431396412b342d580c6b", + "Id": "aaebf79a4eeb447bbcdefca0f19c1bf7", "Name": "direction", "Description": "Vector to extrude along\n\nVector\nDefault value : Autodesk.DesignScript.Geometry.Vector.ByCoordinates(0, 0, 1)", "UsingDefaultValue": true, @@ -318,7 +323,7 @@ "KeepListStructure": false }, { - "Id": "31aef835e66845309d4becb32a6302d7", + "Id": "9cb7c3e8b2ca4b689495ed8e26c7efab", "Name": "distance", "Description": "Distance to extrude\n\ndouble\nDefault value : 1", "UsingDefaultValue": true, @@ -329,7 +334,7 @@ ], "Outputs": [ { - "Id": "bcc24c0a3ba74a30985bcb317ac761d5", + "Id": "f1e1aad213b949489ad0e80d4aac4541", "Name": "Solid", "Description": "The extruded Solid", "UsingDefaultValue": false, @@ -338,18 +343,18 @@ "KeepListStructure": false } ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Curve.ExtrudeAsSolid@Autodesk.DesignScript.Geometry.Vector,double", "Replication": "Auto", "Description": "Extrudes a Curve in the specified direction, by the specified distance. Curve must be closed.\n\nCurve.ExtrudeAsSolid (direction: Vector = Autodesk.DesignScript.Geometry.Vector.ByCoordinates(0, 0, 1), distance: double = 1): Solid" }, { "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "4f0d2f06713342cab5550cbedef450b6", "NodeType": "CodeBlockNode", - "Code": "3;\n-2;\n1;", - "Id": "af2462c5d0e844c58f9b670ef1f2d79d", "Inputs": [], "Outputs": [ { - "Id": "6110c728ebef4bf4b1cfe7764d69479d", + "Id": "a0b10f69aa4c46cd8f3dfb2f91c00c4e", "Name": "", "Description": "Value of expression at line 1", "UsingDefaultValue": false, @@ -358,7 +363,7 @@ "KeepListStructure": false }, { - "Id": "b92331f8a5754e57a94a4ba493510ae6", + "Id": "cf7297c38c3a46ea9619228551295c6a", "Name": "", "Description": "Value of expression at line 2", "UsingDefaultValue": false, @@ -367,7 +372,7 @@ "KeepListStructure": false }, { - "Id": "eb1b49a4aced4389bde1dbaca05b2e66", + "Id": "c8b2faeed35148f8ba95bde2cdaf0deb", "Name": "", "Description": "Value of expression at line 3", "UsingDefaultValue": false, @@ -377,16 +382,16 @@ } ], "Replication": "Disabled", - "Description": "Allows for DesignScript code to be authored directly" + "Description": "Allows for DesignScript code to be authored directly", + "Code": "3;\n-2;\n1;" }, { "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "36c4b654fdfa447f9939f06b6fb917ca", "NodeType": "FunctionNode", - "FunctionSignature": "Autodesk.DesignScript.Geometry.Vector.ByCoordinates@double,double,double", - "Id": "af9f66f390cf47bc892e71c43fb6a6e5", "Inputs": [ { - "Id": "5853cc018f40446093c240a20debd7ec", + "Id": "a54ca4add6ca4fb992178fe863491f6b", "Name": "x", "Description": "X coordinate\n\ndouble\nDefault value : 0", "UsingDefaultValue": true, @@ -395,7 +400,7 @@ "KeepListStructure": false }, { - "Id": "4a75ce217d4842579ce0c93d4581f2cd", + "Id": "6c00d6ac120241799cc759bd1dbb801e", "Name": "y", "Description": "Y coordinate\n\ndouble\nDefault value : 0", "UsingDefaultValue": true, @@ -404,7 +409,7 @@ "KeepListStructure": false }, { - "Id": "f8bb51678983461288a69794f1a03303", + "Id": "d621a16b910f496180edbe4bc17653d9", "Name": "z", "Description": "Z coordinate\n\ndouble\nDefault value : 0", "UsingDefaultValue": true, @@ -415,99 +420,131 @@ ], "Outputs": [ { - "Id": "cfe29379c43248a8bcccce2e93aa3e47", + "Id": "51fc78719c2549ec8bf663441d8c675d", "Name": "Vector", - "Description": "Vector", + "Description": "Vector created by coordinates", "UsingDefaultValue": false, "Level": 2, "UseLevels": false, "KeepListStructure": false } ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Vector.ByCoordinates@double,double,double", "Replication": "Auto", "Description": "Form a Vector by 3 Euclidean coordinates\n\nVector.ByCoordinates (x: double = 0, y: double = 0, z: double = 0): Vector" } ], "Connectors": [ { - "Start": "3639a2322ae041a4847242aa85530edc", - "End": "38d2004a5a6740b88f799a831251eb74", - "Id": "36b2b82007e1450f8681d769cf7cf3bf" + "Start": "f8c002e9cd524ad7bdedf1d40abe4aba", + "End": "c00be9b45c8246f888b9b19fbb36f74f", + "Id": "312b1c8e986c4099992b2b1e2a2049fa", + "IsHidden": "False" }, { - "Start": "de5a5572a9f24a40be11dce39fe4cc66", - "End": "1075de1f95ac45fba07ec59697e33f72", - "Id": "40ee1ce6865a425cae0111fa9bef9931" + "Start": "4f8d1b18aa30486db73f27f90a3db527", + "End": "9bdc70964b134d31a83500e7dbddd355", + "Id": "6c9013a162f4447cb0b19113e6536497", + "IsHidden": "False" }, { - "Start": "de5a5572a9f24a40be11dce39fe4cc66", - "End": "fbc2f5dd39924478a68e28333e71f925", - "Id": "8349c5105fad4b0088bc2d685e026bb4" + "Start": "4f8d1b18aa30486db73f27f90a3db527", + "End": "12373893f65b49f6b60aaec3e8d37055", + "Id": "25360cc11fea47c6b7ea910d30fcd3bf", + "IsHidden": "False" }, { - "Start": "fda144f18fd24f5b8e6b3a6927e2e1e7", - "End": "c5f79c3a34da43028dff176fa1f7cf35", - "Id": "de7d218a4e9645ee89fdb798c6c0add8" + "Start": "ba2b2985d15d4e9e93c2fa359844e2fd", + "End": "502a62c39a5e4f83951429561b1dc567", + "Id": "abe0597d6fc14ad88334080e43e7b8c8", + "IsHidden": "False" }, { - "Start": "e23e9d989e7c4aea8ab98a273cee6ff3", - "End": "245b859a0a544c3a9f0cf94513e1c6d4", - "Id": "94feeecd94974aee9c46027779890dc4" + "Start": "e4981fcbc22a4624834259b67e4ad6c4", + "End": "cafcc71e52c145498c1d99eb7b429dac", + "Id": "b66b1e4b812e4b289804f88b73e872fc", + "IsHidden": "False" }, { - "Start": "9cba8324f06a45dca0d132a866c01fc1", - "End": "0ec92e3c3d6e41328ffb4708da49da0b", - "Id": "f91ecc0978f947218b6964d147d42a10" + "Start": "a7c4fe5902f04f059d73385c24ce1ee7", + "End": "4613711d92ca4090b1a162b31bf36cf2", + "Id": "f42cdbe3eeb24332b58889b60d5d5ef3", + "IsHidden": "False" }, { - "Start": "902edc90a1a9498a8564c1a768396d1b", - "End": "e62654a25390467db25b6b94dffb06a8", - "Id": "68581713fdf94f6bbaa9cf131e7a756b" + "Start": "f2a0ec55b5bc4da888808cabd6fdf4c8", + "End": "b1eca7d8ea374f3aae55f79bf973c872", + "Id": "fc188f0dc94f41a6b198c201e59f4270", + "IsHidden": "False" }, { - "Start": "0fff36a3da824151aa8963808d57bbab", - "End": "f0be1961c3374eb9bf8d0cfdc48f6e5f", - "Id": "8f8b4ae3f8c944a38e660d4277244d27" + "Start": "cb48a71bcff34f6db607549ac9dde85b", + "End": "0dfad09955164a02b5397a77d3aa5889", + "Id": "3fe3a0977c85408abc4f24afbd578c8d", + "IsHidden": "False" }, { - "Start": "83f7fdf69adc4a3684595b9d40d3b5cf", - "End": "31aef835e66845309d4becb32a6302d7", - "Id": "533ee5994adb4b449c0ec5db85236f04" + "Start": "6d2ae91576004452a4fd3f36e5f88a97", + "End": "9cb7c3e8b2ca4b689495ed8e26c7efab", + "Id": "1f85fe9d21214a3c828590f7c669bf50", + "IsHidden": "False" }, { - "Start": "6110c728ebef4bf4b1cfe7764d69479d", - "End": "5853cc018f40446093c240a20debd7ec", - "Id": "38ff578f14954290ad129e55aa4790cb" + "Start": "a0b10f69aa4c46cd8f3dfb2f91c00c4e", + "End": "a54ca4add6ca4fb992178fe863491f6b", + "Id": "d61ca62fc8244181bea4c2d05377be69", + "IsHidden": "False" }, { - "Start": "b92331f8a5754e57a94a4ba493510ae6", - "End": "4a75ce217d4842579ce0c93d4581f2cd", - "Id": "e6a379f66eb1496cb03c9ca7b609da6c" + "Start": "cf7297c38c3a46ea9619228551295c6a", + "End": "6c00d6ac120241799cc759bd1dbb801e", + "Id": "425b0d80adbc46849b52eee7593fd6d5", + "IsHidden": "False" }, { - "Start": "eb1b49a4aced4389bde1dbaca05b2e66", - "End": "f8bb51678983461288a69794f1a03303", - "Id": "938a4fc7edeb448e95fba19f3feb0133" + "Start": "c8b2faeed35148f8ba95bde2cdaf0deb", + "End": "d621a16b910f496180edbe4bc17653d9", + "Id": "d03c77766cda4e3388ca585afcbee784", + "IsHidden": "False" }, { - "Start": "cfe29379c43248a8bcccce2e93aa3e47", - "End": "5e5300c695ad431396412b342d580c6b", - "Id": "769613f110b74ffaad81f1b829e14b62" + "Start": "51fc78719c2549ec8bf663441d8c675d", + "End": "aaebf79a4eeb447bbcdefca0f19c1bf7", + "Id": "10397e968be54d418c2fd239b4d1c9c5", + "IsHidden": "False" } ], "Dependencies": [], + "NodeLibraryDependencies": [], + "Thumbnail": "", + "GraphDocumentationURL": null, + "ExtensionWorkspaceData": [ + { + "ExtensionGuid": "28992e1d-abb9-417f-8b1b-05e053bee670", + "Name": "Properties", + "Version": "2.19", + "Data": {} + } + ], + "Author": "None provided", + "Linting": { + "activeLinter": "None", + "activeLinterId": "7b75fb44-43fd-4631-a878-29f4d5d8399a", + "warningCount": 0, + "errorCount": 0 + }, "Bindings": [], "View": { "Dynamo": { "ScaleFactor": 1.0, "HasRunWithoutCrash": true, "IsVisibleInDynamoLibrary": true, - "Version": "2.0.1.5055", + "Version": "2.19.0.5874", "RunType": "Automatic", "RunPeriod": "1000" }, "Camera": { - "Name": "Background Preview", + "Name": "_Background Preview", "EyeX": -3.8817853927612305, "EyeY": 5.89031982421875, "EyeZ": 11.482416152954102, @@ -518,121 +555,122 @@ "UpY": 0.99999994039535522, "UpZ": -1.4055977715088375E-08 }, + "ConnectorPins": [], "NodeViews": [ { - "ShowGeometry": true, + "Id": "9d0ab23019c44c5db1d96f2d0ed1d7fc", "Name": "Math.RandomList", - "Id": "7d7435f4dcd14a1bb0693f701ecda485", "IsSetAsInput": false, "IsSetAsOutput": false, "Excluded": false, - "X": -432.94377794167258, - "Y": 170.791433688083 + "ShowGeometry": true, + "X": -512.94377794167258, + "Y": 140.70518368808305 }, { - "ShowGeometry": true, + "Id": "be6e2ec9ca5a4e1da9d3c3290dc14962", "Name": "Number Slider", - "Id": "4fd25c7abb42406eb64183323b390da8", "IsSetAsInput": true, "IsSetAsOutput": false, "Excluded": false, - "X": -831.94377794167258, - "Y": 116.79143368808303 + "ShowGeometry": true, + "X": -960.94377794167258, + "Y": 66.705183688083 }, { - "ShowGeometry": true, + "Id": "12bc0b9330c042f89151dca283f52527", "Name": "Point.ByCylindricalCoordinates", - "Id": "11d18d7068564c249a8beb42837e0216", "IsSetAsInput": false, "IsSetAsOutput": false, "Excluded": false, - "X": 180.05622205832742, - "Y": 64.791433688083032 + "ShowGeometry": true, + "X": 162.05622205832742, + "Y": -1.1223163119170181 }, { - "ShowGeometry": true, + "Id": "ce85d6604aac4a84a831506af37eef21", "Name": "Code Block", - "Id": "7ba7b96cdf3e43f2a51ba6620e80f8e9", "IsSetAsInput": false, "IsSetAsOutput": false, "Excluded": false, - "X": -116.94377794167258, - "Y": 175.00476702141634 + "ShowGeometry": true, + "X": -191.94377794167258, + "Y": 140.70518368808305 }, { - "ShowGeometry": true, + "Id": "01642a610f204b62a0f2bb411f3ee7d4", "Name": "Code Block", - "Id": "2946ae2a7ef446f2bdb3bc8fb1fdd096", "IsSetAsInput": false, "IsSetAsOutput": false, "Excluded": false, - "X": -116.94377794167258, - "Y": 67.004767021416342 + "ShowGeometry": true, + "X": -191.94377794167258, + "Y": -7.2948163119170317 }, { - "ShowGeometry": true, + "Id": "9849fd9d729f4cccb0512ec38628b794", "Name": "NurbsCurve.ByPoints", - "Id": "ca5657b3d8fa40a4a4a1338d2cb535f4", "IsSetAsInput": false, "IsSetAsOutput": false, "Excluded": false, - "X": 486.05622205832742, - "Y": 159.79143368808303 + "ShowGeometry": true, + "X": 566.05622205832742, + "Y": 136.87768368808298 }, { - "ShowGeometry": true, + "Id": "c95def157d304157aaa6fb0d671482a4", "Name": "Boolean", - "Id": "5b4d90107c974168b1d6053bc480a259", "IsSetAsInput": true, "IsSetAsOutput": false, "Excluded": false, - "X": 180.05622205832742, - "Y": 251.79143368808303 + "ShowGeometry": true, + "X": 162.05622205832742, + "Y": 245.87768368808298 }, { - "ShowGeometry": true, + "Id": "baf4c9cc2a084023b7955b1bf387d5c2", "Name": "Number Slider", - "Id": "4f3b2521746a4a8c8e5c2e438dacf042", "IsSetAsInput": true, "IsSetAsOutput": false, "Excluded": false, - "X": 486.05622205832742, - "Y": 454.79143368808303 + "ShowGeometry": true, + "X": 566.05622205832742, + "Y": 526.87768368808315 }, { - "ShowGeometry": true, + "Id": "15bdff28ce004be394fd2209342c4e77", "Name": "Curve.ExtrudeAsSolid", - "Id": "5c9d4821335d448c867442f8e0da4265", "IsSetAsInput": false, "IsSetAsOutput": false, "Excluded": false, - "X": 885.05622205832742, - "Y": 276.79143368808303 + "ShowGeometry": true, + "X": 1014.0562220583274, + "Y": 291.877683688083 }, { - "ShowGeometry": true, + "Id": "4f0d2f06713342cab5550cbedef450b6", "Name": "Code Block", - "Id": "af2462c5d0e844c58f9b670ef1f2d79d", "IsSetAsInput": false, "IsSetAsOutput": false, "Excluded": false, - "X": 180.05622205832742, - "Y": 335.43143368808296 + "ShowGeometry": true, + "X": 162.05622205832742, + "Y": 394.36018368808294 }, { - "ShowGeometry": true, + "Id": "36c4b654fdfa447f9939f06b6fb917ca", "Name": "Vector.ByCoordinates", - "Id": "af9f66f390cf47bc892e71c43fb6a6e5", "IsSetAsInput": false, "IsSetAsOutput": false, "Excluded": false, - "X": 486.05622205832742, - "Y": 293.79143368808303 + "ShowGeometry": true, + "X": 566.05622205832742, + "Y": 313.877683688083 } ], "Annotations": [], - "X": 530.80819589101, - "Y": -37.5149570040434, - "Zoom": 0.894584203790339 + "X": 409.58822971748771, + "Y": 217.89020596153566, + "Zoom": 0.601517368536526 } } \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Curve.ExtrudeAsSolid(curve, direction, distance).md b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Curve.ExtrudeAsSolid(curve, direction, distance).md new file mode 100644 index 00000000000..38e7e0543a5 --- /dev/null +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Curve.ExtrudeAsSolid(curve, direction, distance).md @@ -0,0 +1,8 @@ +## In Depth +Curve.ExtrudeAsSolid (direction, distance) extrudes an input closed, planar curve using an input vector to determine the direction of the extrusion. A separate `distance` input is used for the extrusion distance. This node caps the ends of the extrusion to create a solid. + +In the example below, we first create a NurbsCurve using a `NurbsCurve.ByPoints` node, with a set of randomly generated points as the input. A `code block` is used to specify the X, Y, and Z components of a `Vector.ByCoordinates` node. This vector is then used as the direction input in a `Curve.ExtrudeAsSolid` node while a number slider is used to control the `distance` input. +___ +## Example File + +![Curve.ExtrudeAsSolid(direction, distance)](./Autodesk.DesignScript.Geometry.Curve.ExtrudeAsSolid(curve,%20direction,%20distance)_img.jpg) \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Curve.ExtrudeAsSolid(curve, direction, distance)_img.jpg b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Curve.ExtrudeAsSolid(curve, direction, distance)_img.jpg new file mode 100644 index 00000000000..778edb3851f Binary files /dev/null and b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Curve.ExtrudeAsSolid(curve, direction, distance)_img.jpg differ diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Curve.ExtrudeAsSolid(curve, distance).dyn b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Curve.ExtrudeAsSolid(curve, distance).dyn new file mode 100644 index 00000000000..9a81fa9d26f --- /dev/null +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Curve.ExtrudeAsSolid(curve, distance).dyn @@ -0,0 +1,537 @@ +{ + "Uuid": "3c9d0464-8643-5ffe-96e5-ab1769818209", + "IsCustomNode": false, + "Description": "", + "Name": "Autodesk.DesignScript.Geometry.Curve.ExtrudeAsSolid", + "ElementResolver": { + "ResolutionMap": {} + }, + "Inputs": [ + { + "Id": "4fd25c7abb42406eb64183323b390da8", + "Name": "Number Slider", + "Type": "number", + "Type2": "number", + "Value": "5", + "MaximumValue": 10.0, + "MinimumValue": 3.0, + "StepValue": 1.0, + "NumberType": "Double", + "Description": "Produces numeric values", + "SelectedIndex": 0 + }, + { + "Id": "5b4d90107c974168b1d6053bc480a259", + "Name": "Boolean", + "Type": "boolean", + "Type2": "boolean", + "Value": "true", + "Description": "Enables selection between True and False", + "SelectedIndex": 0 + }, + { + "Id": "4f3b2521746a4a8c8e5c2e438dacf042", + "Name": "Number Slider", + "Type": "number", + "Type2": "number", + "Value": "2", + "MaximumValue": 10.0, + "MinimumValue": -10.0, + "StepValue": 0.1, + "NumberType": "Double", + "Description": "Produces numeric values", + "SelectedIndex": 0 + } + ], + "Outputs": [], + "Nodes": [ + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "7d7435f4dcd14a1bb0693f701ecda485", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "2d65ffe4cfe443df818d174ab092c7de", + "Name": "amount", + "Description": "Amount of random numbers the result list will contain.\n\nint", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "e42a07c299594147a3a64ac1b075a8b5", + "Name": "number", + "Description": "List of random numbers between 0 and 1.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Math.RandomList@int", + "Replication": "Auto", + "Description": "Produces a list containing the given amount of random doubles in the range of [0, 1).\n\nMath.RandomList (amount: int): var[]..[]" + }, + { + "ConcreteType": "CoreNodeModels.Input.DoubleSlider, CoreNodeModels", + "NumberType": "Double", + "MaximumValue": 10.0, + "MinimumValue": 3.0, + "StepValue": 1.0, + "Id": "4fd25c7abb42406eb64183323b390da8", + "NodeType": "NumberInputNode", + "Inputs": [], + "Outputs": [ + { + "Id": "15a6949436b446f8a8050d7047f12a85", + "Name": "", + "Description": "Double", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Produces numeric values", + "InputValue": 5.0 + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "11d18d7068564c249a8beb42837e0216", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "839139a1420a435d9914c76e55d5687e", + "Name": "coordinateSystem", + "Description": "Coordinate system to build the point in\n\nCoordinateSystem\nDefault value : Autodesk.DesignScript.Geometry.CoordinateSystem.ByOrigin(0, 0, 0)", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "bc43d77f9f6c479faaf689130f74e353", + "Name": "angle", + "Description": "The angle is the rotation from the X axis in the coordinate system around the Z axis in degrees\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "b4a379e398f542d5b2be39f22dcb982a", + "Name": "elevation", + "Description": "The elevation of the point above the XY plane\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "2897007591ee4de8a441db960083707c", + "Name": "radius", + "Description": "The distance from the origin of the coordinate system\n\ndouble\nDefault value : 1", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "9d977db65b4c4ec598d251614ba9cb2d", + "Name": "Point", + "Description": "Point at cylindrical coordinates", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Point.ByCylindricalCoordinates@Autodesk.DesignScript.Geometry.CoordinateSystem,double,double,double", + "Replication": "Auto", + "Description": "Form a Point in the given coordinate system given its position in cylindrical coordinates.\n\nPoint.ByCylindricalCoordinates (coordinateSystem: CoordinateSystem = Autodesk.DesignScript.Geometry.CoordinateSystem.ByOrigin(0, 0, 0), angle: double = 0, elevation: double = 0, radius: double = 1): Point" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "7ba7b96cdf3e43f2a51ba6620e80f8e9", + "NodeType": "CodeBlockNode", + "Inputs": [ + { + "Id": "40d7859b33a44c78a6b04321f1c0744e", + "Name": "x", + "Description": "x", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "7c09d9ef4362411a9ccf03b3bab9751b", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "x*5;" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "2946ae2a7ef446f2bdb3bc8fb1fdd096", + "NodeType": "CodeBlockNode", + "Inputs": [ + { + "Id": "2ce56b7a595a4c2bb8992652589e9bca", + "Name": "a", + "Description": "a", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "c6ee4f88894a47819b9c3a6508c93754", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "0..360..360/(a-1);" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "ca5657b3d8fa40a4a4a1338d2cb535f4", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "183f751e8a264fcb8cd929988398040e", + "Name": "points", + "Description": "Points for nurbs curve\n\nPoint[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "846ecfd9d96043cfba8085170f00814d", + "Name": "closeCurve", + "Description": "bool\nDefault value : false", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "f81be1339536455a99aabf625b6fcd14", + "Name": "NurbsCurve", + "Description": "Nurbscurve created from points", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.NurbsCurve.ByPoints@Autodesk.DesignScript.Geometry.Point[],bool", + "Replication": "Auto", + "Description": "Create a BSplineCurve by interpolating between points.\n\nNurbsCurve.ByPoints (points: Point[], closeCurve: bool = false): NurbsCurve" + }, + { + "ConcreteType": "CoreNodeModels.Input.BoolSelector, CoreNodeModels", + "Id": "5b4d90107c974168b1d6053bc480a259", + "NodeType": "BooleanInputNode", + "Inputs": [], + "Outputs": [ + { + "Id": "8a50121983da40bca3993de89bb9126b", + "Name": "", + "Description": "Boolean", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Enables selection between True and False", + "InputValue": true + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "f4b295e3381544ff8f84e24cad41c730", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "20cf24f98a2e47578afce6135f42cc6d", + "Name": "curve", + "Description": "Autodesk.DesignScript.Geometry.Curve", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "4ded32f84243478dba82831813f45397", + "Name": "distance", + "Description": "Distance to extrude\n\ndouble\nDefault value : 1", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "e705e881ea834b52ada6fb021493b596", + "Name": "Solid", + "Description": "The extruded Solid", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Curve.ExtrudeAsSolid@double", + "Replication": "Auto", + "Description": "Extrudes a Curve in the Normal direction by the specified distance. Curve must be closed.\n\nCurve.ExtrudeAsSolid (distance: double = 1): Solid" + }, + { + "ConcreteType": "CoreNodeModels.Input.DoubleSlider, CoreNodeModels", + "NumberType": "Double", + "MaximumValue": 10.0, + "MinimumValue": -10.0, + "StepValue": 0.1, + "Id": "4f3b2521746a4a8c8e5c2e438dacf042", + "NodeType": "NumberInputNode", + "Inputs": [], + "Outputs": [ + { + "Id": "117067d310c046c6ad067342f7854661", + "Name": "", + "Description": "Double", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Produces numeric values", + "InputValue": 2.0 + } + ], + "Connectors": [ + { + "Start": "e42a07c299594147a3a64ac1b075a8b5", + "End": "40d7859b33a44c78a6b04321f1c0744e", + "Id": "82e548ef0d0644d49299d3085369f318", + "IsHidden": "False" + }, + { + "Start": "15a6949436b446f8a8050d7047f12a85", + "End": "2d65ffe4cfe443df818d174ab092c7de", + "Id": "3df6eb229cb44841859aaf03978a537d", + "IsHidden": "False" + }, + { + "Start": "15a6949436b446f8a8050d7047f12a85", + "End": "2ce56b7a595a4c2bb8992652589e9bca", + "Id": "626639224a8e49a4bbb2d41ad2f6d847", + "IsHidden": "False" + }, + { + "Start": "9d977db65b4c4ec598d251614ba9cb2d", + "End": "183f751e8a264fcb8cd929988398040e", + "Id": "3196a496daa445aab507a0d16928f85e", + "IsHidden": "False" + }, + { + "Start": "7c09d9ef4362411a9ccf03b3bab9751b", + "End": "2897007591ee4de8a441db960083707c", + "Id": "e233062fe61047fd88cff3f5a789dc17", + "IsHidden": "False" + }, + { + "Start": "c6ee4f88894a47819b9c3a6508c93754", + "End": "bc43d77f9f6c479faaf689130f74e353", + "Id": "9ccbda4bff18491998e540f223c8b946", + "IsHidden": "False" + }, + { + "Start": "f81be1339536455a99aabf625b6fcd14", + "End": "20cf24f98a2e47578afce6135f42cc6d", + "Id": "b118ec25ca03453ea5d1bdec3b0ca953", + "IsHidden": "False" + }, + { + "Start": "8a50121983da40bca3993de89bb9126b", + "End": "846ecfd9d96043cfba8085170f00814d", + "Id": "b6a8a3428d5b470aa03e4055e0e492cf", + "IsHidden": "False" + }, + { + "Start": "117067d310c046c6ad067342f7854661", + "End": "4ded32f84243478dba82831813f45397", + "Id": "6e6ee1d1f80040b19db23fcb7bfb4c50", + "IsHidden": "False" + } + ], + "Dependencies": [], + "NodeLibraryDependencies": [], + "Thumbnail": "", + "GraphDocumentationURL": null, + "ExtensionWorkspaceData": [ + { + "ExtensionGuid": "28992e1d-abb9-417f-8b1b-05e053bee670", + "Name": "Properties", + "Version": "2.19", + "Data": {} + } + ], + "Author": "None provided", + "Linting": { + "activeLinter": "None", + "activeLinterId": "7b75fb44-43fd-4631-a878-29f4d5d8399a", + "warningCount": 0, + "errorCount": 0 + }, + "Bindings": [], + "View": { + "Dynamo": { + "ScaleFactor": 1.0, + "HasRunWithoutCrash": true, + "IsVisibleInDynamoLibrary": true, + "Version": "2.19.0.5742", + "RunType": "Automatic", + "RunPeriod": "1000" + }, + "Camera": { + "Name": "_Background Preview", + "EyeX": -3.62465238571167, + "EyeY": 9.2647066116333, + "EyeZ": 10.161786079406738, + "LookX": 6.6045675277709961, + "LookY": -9.2482500076293945, + "LookZ": -18.156381607055664, + "UpX": 0.078060783445835114, + "UpY": 0.9735788106918335, + "UpZ": -0.21459411084651947 + }, + "ConnectorPins": [], + "NodeViews": [ + { + "Id": "7d7435f4dcd14a1bb0693f701ecda485", + "Name": "Math.RandomList", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -529.958720393653, + "Y": 241.1898338525456 + }, + { + "Id": "4fd25c7abb42406eb64183323b390da8", + "Name": "Number Slider", + "IsSetAsInput": true, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -977.958720393653, + "Y": 167.18983385254555 + }, + { + "Id": "11d18d7068564c249a8beb42837e0216", + "Name": "Point.ByCylindricalCoordinates", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 145.04127960634696, + "Y": 99.362333852545532 + }, + { + "Id": "7ba7b96cdf3e43f2a51ba6620e80f8e9", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -208.95872039365304, + "Y": 241.1898338525456 + }, + { + "Id": "2946ae2a7ef446f2bdb3bc8fb1fdd096", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -208.95872039365304, + "Y": 93.189833852545519 + }, + { + "Id": "ca5657b3d8fa40a4a4a1338d2cb535f4", + "Name": "NurbsCurve.ByPoints", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 549.041279606347, + "Y": 206.36233385254553 + }, + { + "Id": "5b4d90107c974168b1d6053bc480a259", + "Name": "Boolean", + "IsSetAsInput": true, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 145.04127960634696, + "Y": 347.36233385254553 + }, + { + "Id": "f4b295e3381544ff8f84e24cad41c730", + "Name": "Curve.ExtrudeAsSolid", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 997.041279606347, + "Y": 278.36233385254553 + }, + { + "Id": "4f3b2521746a4a8c8e5c2e438dacf042", + "Name": "Number Slider", + "IsSetAsInput": true, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 549.041279606347, + "Y": 384.36233385254553 + } + ], + "Annotations": [], + "X": 533.15332654527322, + "Y": 31.966041969565367, + "Zoom": 0.54514375520319824 + } +} \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Curve.ExtrudeAsSolid(curve, distance).md b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Curve.ExtrudeAsSolid(curve, distance).md new file mode 100644 index 00000000000..f1661a2f645 --- /dev/null +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Curve.ExtrudeAsSolid(curve, distance).md @@ -0,0 +1,8 @@ +## In Depth +`Curve.ExtrudeAsSolid (curve, distance)` extrudes an input closed, planar curve using an input number to determine the distance of the extrusion. The direction of the extrusion is determined by the normal vector of the plane that the curve lies in. This node caps the ends of the extrusion to create a solid. + +In the example below, we first create a NurbsCurve by using a `NurbsCurve.ByPoints` node, with a set of randomly generated points as the input. Then, a `Curve.ExtrudeAsSolid` node is used to extrude the curve as a solid. A number slider is used as the `distance` input in the `Curve.ExtrudeAsSolid` node. +___ +## Example File + +![Curve.ExtrudeAsSolid(curve, distance)](./Autodesk.DesignScript.Geometry.Curve.ExtrudeAsSolid(curve, distance)_img.jpg) \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Curve.ExtrudeAsSolid(curve, distance)_img.jpg b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Curve.ExtrudeAsSolid(curve, distance)_img.jpg new file mode 100644 index 00000000000..d8668c6ff86 Binary files /dev/null and b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Curve.ExtrudeAsSolid(curve, distance)_img.jpg differ diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Curve.ExtrudeAsSolid(direction, distance).md b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Curve.ExtrudeAsSolid(direction, distance).md deleted file mode 100644 index 10a676d5164..00000000000 --- a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Curve.ExtrudeAsSolid(direction, distance).md +++ /dev/null @@ -1,7 +0,0 @@ -## In Depth -Extrudes a Curve in the specified direction, by the specified distance. Curve must be closed. -___ -## Example File - -![ExtrudeAsSolid (direction, distance)](./Autodesk.DesignScript.Geometry.Curve.ExtrudeAsSolid(direction,%20distance)_img.jpg) - diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Curve.ExtrudeAsSolid(direction, distance)_img.jpg b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Curve.ExtrudeAsSolid(direction, distance)_img.jpg deleted file mode 100644 index f59b56ea5a0..00000000000 Binary files a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Curve.ExtrudeAsSolid(direction, distance)_img.jpg and /dev/null differ diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Curve.Length.md b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Curve.Length.md index 9a45bba422b..0df8980629a 100644 --- a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Curve.Length.md +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Curve.Length.md @@ -1,5 +1,8 @@ ## In Depth -Length returns the length of a curtain panel's boundary as a double. This can be used even if the curtain panel is not rectangular. +`Curve.Length` returns the length of an input curve. + +In the example below, we first create a NurbsCurve by using a `NurbsCurve.ByControlPoints` node, with a set of randomly generated points as the input. We can find the length of this curve by using a `Curve.Length` node. + ___ ## Example File diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Curve.Normal.md b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Curve.Normal.md index 54de81654a4..b5d59c2bb0d 100644 --- a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Curve.Normal.md +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Curve.Normal.md @@ -1,5 +1,8 @@ ## In Depth -Plane Normal will find the normal vector of an input plane. This is also equal to taking the cross product of the plane XAxis and YAxis. In the example below we first use a set of random points to create a Plane by Best Fit Through Points. We can then find the normal vector of this plane. +`Curve.Normal` returns the normal vector of an input curve. The curve must be planar for this node. + +In the example below, we first create a NurbsCurve by using a `NurbsCurveByControlPoints` node, with a set of randomly generated points as the input. We find the normal of this curve by using a `Curve.Normal` node. + ___ ## Example File diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Curve.NormalAtParameter(curve, param).dyn b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Curve.NormalAtParameter(curve, param).dyn new file mode 100644 index 00000000000..2fec92b8266 --- /dev/null +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Curve.NormalAtParameter(curve, param).dyn @@ -0,0 +1,601 @@ +{ + "Uuid": "e7c1bea8-d711-49d2-87ac-463f8439a79d", + "IsCustomNode": false, + "Description": "", + "Name": "Autodesk.DesignScript.Geometry.Curve.NormalAtParameter", + "ElementResolver": { + "ResolutionMap": {} + }, + "Inputs": [ + { + "Id": "5bafc66cadac464c81202cd161ef0351", + "Name": "Number Slider", + "Type": "number", + "Type2": "number", + "Value": "0.3", + "MaximumValue": 1.0, + "MinimumValue": 0.0, + "StepValue": 0.01, + "NumberType": "Double", + "Description": "Produces numeric values", + "SelectedIndex": 0 + } + ], + "Outputs": [], + "Nodes": [ + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "a7d68c64a9264b81873ba82991eb06e8", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "f984c15204124843b703f902ee2a21a6", + "Name": "points", + "Description": "Points for nurbs curve\n\nPoint[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "f23dd6f752a34713b4f1c84d466d80fa", + "Name": "NurbsCurve", + "Description": "Nurbscurve created from points", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.NurbsCurve.ByControlPoints@Autodesk.DesignScript.Geometry.Point[]", + "Replication": "Auto", + "Description": "Create a BSplineCurve by using explicit control points. NOTE 1: BSplineCurves with deg=1 have G1 discontinuities, which cause problems for extrusion, sweep, and other operations. They should be avoided. Use a PolyCurve instead. NOTE 2: If the curve is periodic (closed), then the first and last points MUST be the same.\n\nNurbsCurve.ByControlPoints (points: Point[]): NurbsCurve" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "ad238e218fa8440aa4bce92e13793c4b", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "eb8b8c2565934609afe003de5dda4f51", + "Name": "amount", + "Description": "Amount of random numbers the result list will contain.\n\nint", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "3fa88cf3f3614fbe82bb72cc628d7cd6", + "Name": "number", + "Description": "List of random numbers between 0 and 1.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Math.RandomList@int", + "Replication": "Auto", + "Description": "Produces a list containing the given amount of random doubles in the range of [0, 1).\n\nMath.RandomList (amount: int): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "520f3bca48004d78a659fa89590e9bfa", + "NodeType": "CodeBlockNode", + "Inputs": [], + "Outputs": [ + { + "Id": "08eb3d9307574dd887cbc3f88904a30a", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "6;" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "7af4a320c7a24f138ea9e32740d56882", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "dd7cc843cee74fe0b062fb0ada98fcde", + "Name": "amount", + "Description": "Amount of random numbers the result list will contain.\n\nint", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "8232f81acf5147f6a0cb97595260c12d", + "Name": "number", + "Description": "List of random numbers between 0 and 1.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Math.RandomList@int", + "Replication": "Auto", + "Description": "Produces a list containing the given amount of random doubles in the range of [0, 1).\n\nMath.RandomList (amount: int): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "969a7350eff64e749affe2b491f358c6", + "NodeType": "CodeBlockNode", + "Inputs": [ + { + "Id": "f1287e25b183470e8eece192c57769b5", + "Name": "x", + "Description": "x", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "9749eb59b2e44d06a15170f8aeec37ac", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "x*10;" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "f428c88d6a1040919ef686701236109c", + "NodeType": "CodeBlockNode", + "Inputs": [ + { + "Id": "53cb35e01a524ff798525a2e062fe260", + "Name": "x", + "Description": "x", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "35dab245e5c142fd87b7c7de7dbda24f", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "x*10;" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "8395e71d54c6432495e946eebf9a8f4d", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "0fd7e4adf8e24440a2c7535cd6cfdd87", + "Name": "x", + "Description": "X coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "0794920554d446298ad277f0ce6a6794", + "Name": "y", + "Description": "Y coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "1f28105cb2f74b2898d2d01e379fe272", + "Name": "z", + "Description": "Z coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "06612e6cc05e47fc87a03b9e42e052ea", + "Name": "Point", + "Description": "Point created by coordinates", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Point.ByCoordinates@double,double,double", + "Replication": "Auto", + "Description": "Form a Point given 3 cartesian coordinates\n\nPoint.ByCoordinates (x: double = 0, y: double = 0, z: double = 0): Point" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "3b8e5913715341efbf1fe41357e16195", + "NodeType": "CodeBlockNode", + "Inputs": [ + { + "Id": "6947d7b3b8f74d08955f2c7d9665de83", + "Name": "x", + "Description": "x", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "5311d75561934956bce9b855d714af72", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "x*5;" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "7f0a66fc22b14f0aaf9c0fb04c226c48", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "2ea2ecee33604ed5a533ab2d8226c71d", + "Name": "amount", + "Description": "Amount of random numbers the result list will contain.\n\nint", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "cbfa120ed8b741ea906e0ff8e30b50a8", + "Name": "number", + "Description": "List of random numbers between 0 and 1.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Math.RandomList@int", + "Replication": "Auto", + "Description": "Produces a list containing the given amount of random doubles in the range of [0, 1).\n\nMath.RandomList (amount: int): var[]..[]" + }, + { + "ConcreteType": "CoreNodeModels.Input.DoubleSlider, CoreNodeModels", + "NumberType": "Double", + "MaximumValue": 1.0, + "MinimumValue": 0.0, + "StepValue": 0.01, + "Id": "5bafc66cadac464c81202cd161ef0351", + "NodeType": "NumberInputNode", + "Inputs": [], + "Outputs": [ + { + "Id": "101140458a6848639de2e97078c4a789", + "Name": "", + "Description": "Double", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Produces numeric values", + "InputValue": 0.3 + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "49ec5a1c6e1e4c7f82d190f2d0b53fb0", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "98573f71a8c24f9eb7fe1ba656555890", + "Name": "curve", + "Description": "Autodesk.DesignScript.Geometry.Curve", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "08852bf1ccdc4938acfbc0395e8b7ce3", + "Name": "param", + "Description": "The parameter at which to evaluate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "210d610d3a0245249562e32d40168780", + "Name": "Vector", + "Description": "A Vector perpendicular to the curve at param", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Curve.NormalAtParameter@double", + "Replication": "Auto", + "Description": "Get a Vector perpendicular to the curve at a specified parameter between StartParameter() and EndParameter()\n\nCurve.NormalAtParameter (param: double = 0): Vector" + } + ], + "Connectors": [ + { + "Start": "f23dd6f752a34713b4f1c84d466d80fa", + "End": "98573f71a8c24f9eb7fe1ba656555890", + "Id": "8c1b55ad239d4d82a47d76ba4615c980", + "IsHidden": "False" + }, + { + "Start": "3fa88cf3f3614fbe82bb72cc628d7cd6", + "End": "f1287e25b183470e8eece192c57769b5", + "Id": "90af014434994f0bbd83303aae2bf7bb", + "IsHidden": "False" + }, + { + "Start": "08eb3d9307574dd887cbc3f88904a30a", + "End": "eb8b8c2565934609afe003de5dda4f51", + "Id": "34d05af1eb584222a5bc782e81af0cde", + "IsHidden": "False" + }, + { + "Start": "08eb3d9307574dd887cbc3f88904a30a", + "End": "dd7cc843cee74fe0b062fb0ada98fcde", + "Id": "a9daa8cf1992482eb78ab663d19e045a", + "IsHidden": "False" + }, + { + "Start": "08eb3d9307574dd887cbc3f88904a30a", + "End": "2ea2ecee33604ed5a533ab2d8226c71d", + "Id": "807e44540dea457ba4e0fd590d5de222", + "IsHidden": "False" + }, + { + "Start": "8232f81acf5147f6a0cb97595260c12d", + "End": "53cb35e01a524ff798525a2e062fe260", + "Id": "cc658cc647a8430093944a0a0e43c380", + "IsHidden": "False" + }, + { + "Start": "9749eb59b2e44d06a15170f8aeec37ac", + "End": "0fd7e4adf8e24440a2c7535cd6cfdd87", + "Id": "61b3e584d8dc4eb6af14f34c2085d8cd", + "IsHidden": "False" + }, + { + "Start": "35dab245e5c142fd87b7c7de7dbda24f", + "End": "0794920554d446298ad277f0ce6a6794", + "Id": "d3c0d9b2c6b54025890b73a7bbd012fd", + "IsHidden": "False" + }, + { + "Start": "06612e6cc05e47fc87a03b9e42e052ea", + "End": "f984c15204124843b703f902ee2a21a6", + "Id": "2309ff4dac184151832c88793d513a2b", + "IsHidden": "False" + }, + { + "Start": "5311d75561934956bce9b855d714af72", + "End": "1f28105cb2f74b2898d2d01e379fe272", + "Id": "7db55e51dc90496985edd6523ffff021", + "IsHidden": "False" + }, + { + "Start": "cbfa120ed8b741ea906e0ff8e30b50a8", + "End": "6947d7b3b8f74d08955f2c7d9665de83", + "Id": "9f6588b6193842c19144c5d8014380c3", + "IsHidden": "False" + }, + { + "Start": "101140458a6848639de2e97078c4a789", + "End": "08852bf1ccdc4938acfbc0395e8b7ce3", + "Id": "c60e608609164825923764978b698144", + "IsHidden": "False" + } + ], + "Dependencies": [], + "NodeLibraryDependencies": [], + "Thumbnail": "", + "GraphDocumentationURL": null, + "ExtensionWorkspaceData": [ + { + "ExtensionGuid": "28992e1d-abb9-417f-8b1b-05e053bee670", + "Name": "Properties", + "Version": "2.19", + "Data": {} + } + ], + "Author": "None provided", + "Linting": { + "activeLinter": "None", + "activeLinterId": "7b75fb44-43fd-4631-a878-29f4d5d8399a", + "warningCount": 0, + "errorCount": 0 + }, + "Bindings": [], + "View": { + "Dynamo": { + "ScaleFactor": 1.0, + "HasRunWithoutCrash": true, + "IsVisibleInDynamoLibrary": true, + "Version": "2.19.0.5742", + "RunType": "Automatic", + "RunPeriod": "1000" + }, + "Camera": { + "Name": "_Background Preview", + "EyeX": -3.4816887378692627, + "EyeY": 9.2835006713867188, + "EyeZ": 3.9581344127655029, + "LookX": 7.4863224029541016, + "LookY": -5.3477129936218262, + "LookZ": -7.8918704986572266, + "UpX": 0.16416347026824951, + "UpY": 0.9711342453956604, + "UpZ": -0.17305652797222137 + }, + "ConnectorPins": [], + "NodeViews": [ + { + "Id": "a7d68c64a9264b81873ba82991eb06e8", + "Name": "NurbsCurve.ByControlPoints", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 366.95475847575403, + "Y": -3561.8570960863349 + }, + { + "Id": "ad238e218fa8440aa4bce92e13793c4b", + "Name": "Math.RandomList", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -533.045241524246, + "Y": -3675.029596086335 + }, + { + "Id": "520f3bca48004d78a659fa89590e9bfa", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -787.045241524246, + "Y": -3528.2020960863351 + }, + { + "Id": "7af4a320c7a24f138ea9e32740d56882", + "Name": "Math.RandomList", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -533.045241524246, + "Y": -3528.029596086335 + }, + { + "Id": "969a7350eff64e749affe2b491f358c6", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -212.04524152424597, + "Y": -3675.029596086335 + }, + { + "Id": "f428c88d6a1040919ef686701236109c", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -212.04524152424597, + "Y": -3528.029596086335 + }, + { + "Id": "8395e71d54c6432495e946eebf9a8f4d", + "Name": "Point.ByCoordinates", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 41.954758475754033, + "Y": -3561.8570960863349 + }, + { + "Id": "3b8e5913715341efbf1fe41357e16195", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -212.04524152424597, + "Y": -3381.029596086335 + }, + { + "Id": "7f0a66fc22b14f0aaf9c0fb04c226c48", + "Name": "Math.RandomList", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -533.045241524246, + "Y": -3381.029596086335 + }, + { + "Id": "5bafc66cadac464c81202cd161ef0351", + "Name": "Number Slider", + "IsSetAsInput": true, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 366.95475847575403, + "Y": -3413.8570960863349 + }, + { + "Id": "49ec5a1c6e1e4c7f82d190f2d0b53fb0", + "Name": "Curve.NormalAtParameter", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 814.954758475754, + "Y": -3504.8570960863349 + } + ], + "Annotations": [], + "X": 520.93439057734008, + "Y": 1899.6398672206337, + "Zoom": 0.47402678864922743 + } +} \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Curve.NormalAtParameter(curve, param).md b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Curve.NormalAtParameter(curve, param).md new file mode 100644 index 00000000000..2c8fece865a --- /dev/null +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Curve.NormalAtParameter(curve, param).md @@ -0,0 +1,8 @@ +## In Depth +`Curve.NormalAtParameter (curve, param)` returns a vector aligned with the normal direction at the specified parameter of a curve. The parameterization of a curve is measured in the range from 0 to 1, with 0 representing the start of the curve and 1 representing the end of the curve. + +In the example below, we first create a NurbsCurve using a `NurbsCurve.ByControlPoints` node, with a set of randomly generated points as the input. A number slider set to the range 0 to 1 is used to control the `parameter` input for a `Curve.NormalAtParameter` node. +___ +## Example File + +![Curve.NormalAtParameter(curve, param](./Autodesk.DesignScript.Geometry.Curve.NormalAtParameter(curve,%20param)_img.jpg) \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Curve.NormalAtParameter(curve, param)_img.jpg b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Curve.NormalAtParameter(curve, param)_img.jpg new file mode 100644 index 00000000000..96984d1075e Binary files /dev/null and b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Curve.NormalAtParameter(curve, param)_img.jpg differ diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Curve.NormalAtParameter(curve, param, side).dyn b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Curve.NormalAtParameter(curve, param, side).dyn new file mode 100644 index 00000000000..3fa249e4737 --- /dev/null +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Curve.NormalAtParameter(curve, param, side).dyn @@ -0,0 +1,697 @@ +{ + "Uuid": "6d09060e-b571-430f-8acb-8ac9ace0f587", + "IsCustomNode": false, + "Description": "", + "Name": "Autodesk.DesignScript.Geometry.Curve.NormalAtParameter", + "ElementResolver": { + "ResolutionMap": {} + }, + "Inputs": [], + "Outputs": [], + "Nodes": [ + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "65c516efb25342d487b79b34c54a9be3", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "a0f48305ce9043aa9ce98be4633a702a", + "Name": "curve", + "Description": "Autodesk.DesignScript.Geometry.Curve", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "0dd37d7cb93e49a3872f03a1af2ac0dd", + "Name": "param", + "Description": "The parameter at which to evaluate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "17dc809e69c343289b3a091c88b435e9", + "Name": "side", + "Description": "If 'side' is set to false, the normal will point to the right side of the curve (moving from the startpoint to the endpoint of the curve). If 'side' is true, the normal will point to the left of the curve.\n\nbool\nDefault value : false", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "66c8e1852ae84efaa713dcfa3245c9fa", + "Name": "Vector", + "Description": "A Vector perpendicular to the curve at param", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Curve.NormalAtParameter@double,bool", + "Replication": "Auto", + "Description": "Get a Vector perpendicular to the curve at a specified parameter between StartParameter() and EndParameter() The curve must be planar. The resulting normal will be consistent across the entire curvature of the curve.\n\nCurve.NormalAtParameter (param: double = 0, side: bool = false): Vector" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "55f06b1f7b5545b09cd6b33ace5d46da", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "cd90804c0055467aad39909018be6fb8", + "Name": "firstPoint", + "Description": "1st point of arc\n\nPoint", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "b0d0cdc387aa40ecbcaf27633049eed9", + "Name": "secondPoint", + "Description": "2nd point of arc\n\nPoint", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "892581848edd427abcd2209c7a201724", + "Name": "thirdPoint", + "Description": "3rd point of arc\n\nPoint", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "f8a0b76cb66748a5ac1b3b1421fb4891", + "Name": "Arc", + "Description": "Arc created from three points", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Arc.ByThreePoints@Autodesk.DesignScript.Geometry.Point,Autodesk.DesignScript.Geometry.Point,Autodesk.DesignScript.Geometry.Point", + "Replication": "Auto", + "Description": "Create an arc by providing three sequential points along its circumference.\n\nArc.ByThreePoints (firstPoint: Point, secondPoint: Point, thirdPoint: Point): Arc" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "a775f12e2fb7456f9236475531184d62", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "521004f876b94b6098317a29b760b8c0", + "Name": "x", + "Description": "X coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "41bf66cc884f45249be8ca6bb93de244", + "Name": "y", + "Description": "Y coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "2d93367df6c3453982fd2275ad0dc44b", + "Name": "z", + "Description": "Z coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "c7fed407ffcf4961a9371d691a1bc45a", + "Name": "Point", + "Description": "Point created by coordinates", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Point.ByCoordinates@double,double,double", + "Replication": "Auto", + "Description": "Form a Point given 3 cartesian coordinates\n\nPoint.ByCoordinates (x: double = 0, y: double = 0, z: double = 0): Point" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "8258659027664df7a19efbe103a2757e", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "1c465b949a56464a94217eccc2b7a0b4", + "Name": "x", + "Description": "X coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "071390cdafb34310ad9114ad31c512ff", + "Name": "y", + "Description": "Y coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "3aa2c94ce6f14d43b5a249017c86c6a6", + "Name": "z", + "Description": "Z coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "6006948e04e74b0b9219ab8267a9e76d", + "Name": "Point", + "Description": "Point created by coordinates", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Point.ByCoordinates@double,double,double", + "Replication": "Auto", + "Description": "Form a Point given 3 cartesian coordinates\n\nPoint.ByCoordinates (x: double = 0, y: double = 0, z: double = 0): Point" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "3d5ff3896ffd4a248eb198543d101c0c", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "7d1db9f7b1d5450db07908316e30f0f8", + "Name": "x", + "Description": "X coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "bf0fe4c4e8c84a218f901d4650b20802", + "Name": "y", + "Description": "Y coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "fd58ccde68da4289a4a0e761770456f2", + "Name": "z", + "Description": "Z coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "013848be894248daac0f9c9d5d970f33", + "Name": "Point", + "Description": "Point created by coordinates", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Point.ByCoordinates@double,double,double", + "Replication": "Auto", + "Description": "Form a Point given 3 cartesian coordinates\n\nPoint.ByCoordinates (x: double = 0, y: double = 0, z: double = 0): Point" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "afda0da3d7a14526824cc22576b10447", + "NodeType": "CodeBlockNode", + "Inputs": [], + "Outputs": [ + { + "Id": "f23b1098cb4c43eabdeedaa0badc8799", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "d94eba360718431cb113eae26a1e20ff", + "Name": "", + "Description": "Value of expression at line 2", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "3d489ac8010a424ba1d0756c955eaeb3", + "Name": "", + "Description": "Value of expression at line 3", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "1;\n2;\n3;" + }, + { + "ConcreteType": "CoreNodeModels.Input.DoubleSlider, CoreNodeModels", + "NumberType": "Double", + "MaximumValue": 1.0, + "MinimumValue": 0.0, + "StepValue": 0.1, + "Id": "8a746e2ace7043e48f5d6f86acf3705b", + "NodeType": "NumberInputNode", + "Inputs": [], + "Outputs": [ + { + "Id": "7ba64554498d4455b9222b72d58b2f63", + "Name": "", + "Description": "Double", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Produces numeric values", + "InputValue": 0.6 + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "724c88d5835b447ca7f573cef6642f2f", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "eab19885159b4a1892b1620d335227c4", + "Name": "startPoint", + "Description": "Line start point\n\nPoint", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "cc466d17ef074eefb7158d3c22a0d127", + "Name": "direction", + "Description": "Direction vector\n\nVector", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "94dc20ffe7dc4c1a8226c672e9905a4b", + "Name": "length", + "Description": "Length of line\n\ndouble\nDefault value : 1", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "7df15be324bf4f729c096d625d11cd61", + "Name": "Line", + "Description": "Line from start direction and length", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Line.ByStartPointDirectionLength@Autodesk.DesignScript.Geometry.Point,Autodesk.DesignScript.Geometry.Vector,double", + "Replication": "Auto", + "Description": "Create a straight Line starting at start Point, extending in Vector direction by specified length.\n\nLine.ByStartPointDirectionLength (startPoint: Point, direction: Vector, length: double = 1): Line" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "a5003e234d3a47b09de21bd6c6dc013d", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "aa1b88fd854d4c369a88518dc2b26fcb", + "Name": "curve", + "Description": "Autodesk.DesignScript.Geometry.Curve", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "8961e9f15d704d2fa31b76077dca8eed", + "Name": "param", + "Description": "The parameter at which to evaluate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "f68742a07f604339bbbd02ea8542526f", + "Name": "Point", + "Description": "Point", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Curve.PointAtParameter@double", + "Replication": "Auto", + "Description": "Get a Point on the Curve at a specified parameter between StartParameter() and EndParameter()\n\nCurve.PointAtParameter (param: double = 0): Point" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "56e53392f2864b7587026ac4331ef43a", + "NodeType": "CodeBlockNode", + "Inputs": [], + "Outputs": [ + { + "Id": "3163dcade7b34060bd304ddb7545099d", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "5;" + } + ], + "Connectors": [ + { + "Start": "66c8e1852ae84efaa713dcfa3245c9fa", + "End": "cc466d17ef074eefb7158d3c22a0d127", + "Id": "4a607ab787374215bcb4f354b807c3fd", + "IsHidden": "False" + }, + { + "Start": "f8a0b76cb66748a5ac1b3b1421fb4891", + "End": "a0f48305ce9043aa9ce98be4633a702a", + "Id": "857173067d814f3ca605df7899b984e0", + "IsHidden": "False" + }, + { + "Start": "f8a0b76cb66748a5ac1b3b1421fb4891", + "End": "aa1b88fd854d4c369a88518dc2b26fcb", + "Id": "165e5561b9524684867897149a9e4ac3", + "IsHidden": "False" + }, + { + "Start": "c7fed407ffcf4961a9371d691a1bc45a", + "End": "cd90804c0055467aad39909018be6fb8", + "Id": "6d05d658b1d7419986dd944e44fb4087", + "IsHidden": "False" + }, + { + "Start": "6006948e04e74b0b9219ab8267a9e76d", + "End": "b0d0cdc387aa40ecbcaf27633049eed9", + "Id": "659dc53f881746e689d86aa64bde0fe3", + "IsHidden": "False" + }, + { + "Start": "013848be894248daac0f9c9d5d970f33", + "End": "892581848edd427abcd2209c7a201724", + "Id": "536ee28ab546474db7338bd1b9bf8147", + "IsHidden": "False" + }, + { + "Start": "f23b1098cb4c43eabdeedaa0badc8799", + "End": "521004f876b94b6098317a29b760b8c0", + "Id": "0467b95d937b4ddd98d8fffc5f92868c", + "IsHidden": "False" + }, + { + "Start": "d94eba360718431cb113eae26a1e20ff", + "End": "071390cdafb34310ad9114ad31c512ff", + "Id": "971262cd01734f6b9982e92946470b9b", + "IsHidden": "False" + }, + { + "Start": "3d489ac8010a424ba1d0756c955eaeb3", + "End": "7d1db9f7b1d5450db07908316e30f0f8", + "Id": "057c6a7eb8a44b3d8ac54d9a0c748a08", + "IsHidden": "False" + }, + { + "Start": "7ba64554498d4455b9222b72d58b2f63", + "End": "0dd37d7cb93e49a3872f03a1af2ac0dd", + "Id": "beee680fe7b94833a7be1a54db769984", + "IsHidden": "False" + }, + { + "Start": "7ba64554498d4455b9222b72d58b2f63", + "End": "8961e9f15d704d2fa31b76077dca8eed", + "Id": "0e8d46ce3ddd40ce8075962c6bdf06ad", + "IsHidden": "False" + }, + { + "Start": "f68742a07f604339bbbd02ea8542526f", + "End": "eab19885159b4a1892b1620d335227c4", + "Id": "61d05624d83f49699cc2b827351ad779", + "IsHidden": "False" + }, + { + "Start": "3163dcade7b34060bd304ddb7545099d", + "End": "94dc20ffe7dc4c1a8226c672e9905a4b", + "Id": "92761846419c4c6899078021cf310ebe", + "IsHidden": "False" + } + ], + "Dependencies": [], + "NodeLibraryDependencies": [], + "Thumbnail": "", + "GraphDocumentationURL": null, + "ExtensionWorkspaceData": [ + { + "ExtensionGuid": "28992e1d-abb9-417f-8b1b-05e053bee670", + "Name": "Properties", + "Version": "2.19", + "Data": {} + } + ], + "Author": "", + "Linting": { + "activeLinter": "None", + "activeLinterId": "7b75fb44-43fd-4631-a878-29f4d5d8399a", + "warningCount": 0, + "errorCount": 0 + }, + "Bindings": [], + "View": { + "Dynamo": { + "ScaleFactor": 100.0, + "HasRunWithoutCrash": true, + "IsVisibleInDynamoLibrary": true, + "Version": "2.19.0.5874", + "RunType": "Automatic", + "RunPeriod": "1000" + }, + "Camera": { + "Name": "_Background Preview", + "EyeX": -17.0, + "EyeY": 24.0, + "EyeZ": 50.0, + "LookX": 12.0, + "LookY": -13.0, + "LookZ": -58.0, + "UpX": 0.0, + "UpY": 1.0, + "UpZ": 0.0 + }, + "ConnectorPins": [], + "NodeViews": [ + { + "Id": "65c516efb25342d487b79b34c54a9be3", + "Name": "Curve.NormalAtParameter", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 826.29098435284709, + "Y": 173.109567548725 + }, + { + "Id": "55f06b1f7b5545b09cd6b33ace5d46da", + "Name": "Arc.ByThreePoints", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 332.600542059933, + "Y": 173.109567548725 + }, + { + "Id": "a775f12e2fb7456f9236475531184d62", + "Name": "Point.ByCoordinates", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 8.10054205993254, + "Y": -5.89043245127493 + }, + { + "Id": "8258659027664df7a19efbe103a2757e", + "Name": "Point.ByCoordinates", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 8.10054205993254, + "Y": 207.109567548725 + }, + { + "Id": "3d5ff3896ffd4a248eb198543d101c0c", + "Name": "Point.ByCoordinates", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 8.10054205993254, + "Y": 420.10956754872495 + }, + { + "Id": "afda0da3d7a14526824cc22576b10447", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -245.899457940067, + "Y": 224.592067548725 + }, + { + "Id": "8a746e2ace7043e48f5d6f86acf3705b", + "Name": "Normal location", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 332.600542059933, + "Y": 485.10956754872495 + }, + { + "Id": "724c88d5835b447ca7f573cef6642f2f", + "Name": "Line.ByStartPointDirectionLength", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1477.3328427940044, + "Y": 546.48269432262 + }, + { + "Id": "a5003e234d3a47b09de21bd6c6dc013d", + "Name": "Curve.PointAtParameter", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1125.3328427940044, + "Y": 491.48269432261992 + }, + { + "Id": "56e53392f2864b7587026ac4331ef43a", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1125.3328427940044, + "Y": 669.31019432261985 + } + ], + "Annotations": [ + { + "Id": "b78516169144421ab012217e98353268", + "Title": "Normal visualization", + "DescriptionText": " ", + "IsExpanded": true, + "WidthAdjustment": 0.0, + "HeightAdjustment": 0.0, + "Nodes": [ + "724c88d5835b447ca7f573cef6642f2f", + "56e53392f2864b7587026ac4331ef43a", + "a5003e234d3a47b09de21bd6c6dc013d" + ], + "HasNestedGroups": false, + "Left": 1115.3328427940044, + "Top": 418.48269432261992, + "Width": 696.0, + "Height": 382.82749999999993, + "FontSize": 36.0, + "GroupStyleId": "bc688959-ce34-4bf5-90f8-6ddd23f80989", + "InitialTop": 491.48269432261992, + "InitialHeight": 322.82749999999993, + "TextblockHeight": 63.0, + "Background": "#FFA4E1FF" + }, + { + "Id": "343cc605e71d41cfaf2a9b1170dda544", + "Title": "Normal location on curve; 0 is the start point, 1 is the endpoint of the curve", + "DescriptionText": null, + "IsExpanded": true, + "WidthAdjustment": 0.0, + "HeightAdjustment": 0.0, + "Nodes": [], + "HasNestedGroups": false, + "Left": 364.600542059933, + "Top": 420.10956754872495, + "Width": 0.0, + "Height": 0.0, + "FontSize": 36.0, + "GroupStyleId": "00000000-0000-0000-0000-000000000000", + "InitialTop": 0.0, + "InitialHeight": 0.0, + "TextblockHeight": 0.0, + "Background": "#FFC1D676", + "PinnedNode": "8a746e2ace7043e48f5d6f86acf3705b" + } + ], + "X": 346.67893073896835, + "Y": 83.382374609072428, + "Zoom": 0.46338709529386984 + } +} \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Curve.NormalAtParameter(curve, param, side).md b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Curve.NormalAtParameter(curve, param, side).md new file mode 100644 index 00000000000..268b4284cff --- /dev/null +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Curve.NormalAtParameter(curve, param, side).md @@ -0,0 +1,6 @@ +## In Depth +`Curve.NormalAtParameter (curve, param, side)` +___ +## Example File + +![Curve.NormalAtParameter(curve, param, side)](./Autodesk.DesignScript.Geometry.Curve.NormalAtParameter(curve,%20param,%20side)_img.jpg) \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Curve.NormalAtParameter(curve, param, side)_img.jpg b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Curve.NormalAtParameter(curve, param, side)_img.jpg new file mode 100644 index 00000000000..89cbc538b3b Binary files /dev/null and b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Curve.NormalAtParameter(curve, param, side)_img.jpg differ diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Curve.OffsetMany.dyn b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Curve.OffsetMany.dyn new file mode 100644 index 00000000000..b3cd6fafe45 --- /dev/null +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Curve.OffsetMany.dyn @@ -0,0 +1,312 @@ +{ + "Uuid": "a5bcef2c-d50a-43f2-8d22-6fb0fa718b26", + "IsCustomNode": false, + "Description": "", + "Name": "Autodesk.DesignScript.Geometry.Curve.OffsetMany", + "ElementResolver": { + "ResolutionMap": { + "Point": { + "Key": "Autodesk.DesignScript.Geometry.Point", + "Value": "ProtoGeometry.dll" + } + } + }, + "Inputs": [], + "Outputs": [], + "Nodes": [ + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "481bcc0f58724f20a72bd6d5fb3f8b23", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "7ed2c1ce289d43028b7ee6edbfd8479d", + "Name": "curve", + "Description": "Autodesk.DesignScript.Geometry.Curve", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "75b7fb62042f44ab9863ac3e2fe27bf4", + "Name": "signedDistance", + "Description": "A positive offset distance applies in the direction of the cross product between the curve's tangent and the plane's normal vector, while a negative offset applies in the opposite direction.\n\ndouble\nDefault value : 1", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "a8636b7375424ee8a7fe96ef5ef9d40b", + "Name": "planeNormal", + "Description": "The curve's plane normal. Defaults to the input curve's plane normal\n\nVector\nDefault value : null", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "72de6c44789b4292887153d6b5a0a1a4", + "Name": "Curve[]..[]", + "Description": "One or more offset curves", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Curve.OffsetMany@double,Autodesk.DesignScript.Geometry.Vector", + "Replication": "Auto", + "Description": "Create one or more curves by offsetting a planar curve by the given distance in a plane defined by the plane normal. If there are gaps between the offset component curves then, they are filled by extending the offset curves. The \"planeNormal\" input argument defaults to the normal of the plane containing the curve but an explicit normal parallel to the original curve normal can be provided to better control the direction of the offset. For example, if a consistent offset direction is required for multiple curves sharing the same plane, the \"planeNormal\" can be used to override individual curve normals and force all curves to be offset in the same direction. Reversing the normal reverses the direction of the offset.\n\nCurve.OffsetMany (signedDistance: double = 1, planeNormal: Vector = null): Curve[]..[]" + }, + { + "ConcreteType": "CoreNodeModels.Input.BoolSelector, CoreNodeModels", + "Id": "37c0e74e028842dd9f1598e3a167a37b", + "NodeType": "BooleanInputNode", + "Inputs": [], + "Outputs": [ + { + "Id": "f6a0458ed5c640f28d6f7af213e6f788", + "Name": "", + "Description": "Boolean", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Enables selection between True and False", + "InputValue": true + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "2aead4d47098431a993640e6f9092d4c", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "912bf95a6a5445b0a1588b7e950993f3", + "Name": "points", + "Description": "Points to make polycurve\n\nPoint[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "905282a20c4b4e62a939a32150506d11", + "Name": "connectLastToFirst", + "Description": "True to connect last point to first point, false to leave open\n\nbool\nDefault value : false", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "5e94533409594146842164f27bbeec23", + "Name": "PolyCurve", + "Description": "Polycurve created by points", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.PolyCurve.ByPoints@Autodesk.DesignScript.Geometry.Point[],bool", + "Replication": "Auto", + "Description": "Make PolyCurve by connecting points. Set the 'connectLastToFirst' input to true to close the PolyCurve.\n\nPolyCurve.ByPoints (points: Point[], connectLastToFirst: bool = false): PolyCurve" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "fa6f2483b6c04650be00b9b5b208004b", + "NodeType": "CodeBlockNode", + "Inputs": [], + "Outputs": [ + { + "Id": "7e92eeff59464b87bb3ca23df9819110", + "Name": "", + "Description": "x", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "a4669ea385f244fc9dd9f1470abfc059", + "Name": "", + "Description": "y", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "a2cfbd84287149b09fcf6379912ce61f", + "Name": "", + "Description": "pnts", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "x = [-15, -14, -3, 13, 16];\ny = [-12, 8, 0, 19, -15];\npnts = Point.ByCoordinates(x,y);" + }, + { + "ConcreteType": "CoreNodeModels.Input.IntegerSlider, CoreNodeModels", + "NumberType": "Integer", + "MaximumValue": 8, + "MinimumValue": -8, + "StepValue": 2, + "Id": "8bbbb99ccbe241fc962154609b516783", + "NodeType": "NumberInputNode", + "Inputs": [], + "Outputs": [ + { + "Id": "d98f5c909c3247dd98589361d579cb5b", + "Name": "", + "Description": "Int64", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Produces integer values", + "InputValue": -6 + } + ], + "Connectors": [ + { + "Start": "f6a0458ed5c640f28d6f7af213e6f788", + "End": "905282a20c4b4e62a939a32150506d11", + "Id": "eabc62cd06374fbf95ad6bd7c9ee6bf9", + "IsHidden": "False" + }, + { + "Start": "5e94533409594146842164f27bbeec23", + "End": "7ed2c1ce289d43028b7ee6edbfd8479d", + "Id": "2cb2fd79fb0a4747b8b9dae36b43c171", + "IsHidden": "False" + }, + { + "Start": "a2cfbd84287149b09fcf6379912ce61f", + "End": "912bf95a6a5445b0a1588b7e950993f3", + "Id": "ec1b857954e849f2830792e678d860c1", + "IsHidden": "False" + }, + { + "Start": "d98f5c909c3247dd98589361d579cb5b", + "End": "75b7fb62042f44ab9863ac3e2fe27bf4", + "Id": "8ffbb9e9db3a4538af42e19ebbfce407", + "IsHidden": "False" + } + ], + "Dependencies": [], + "NodeLibraryDependencies": [], + "Thumbnail": "", + "GraphDocumentationURL": null, + "ExtensionWorkspaceData": [ + { + "ExtensionGuid": "28992e1d-abb9-417f-8b1b-05e053bee670", + "Name": "Properties", + "Version": "2.19", + "Data": {} + } + ], + "Author": "", + "Linting": { + "activeLinter": "None", + "activeLinterId": "7b75fb44-43fd-4631-a878-29f4d5d8399a", + "warningCount": 0, + "errorCount": 0 + }, + "Bindings": [], + "View": { + "Dynamo": { + "ScaleFactor": 100.0, + "HasRunWithoutCrash": true, + "IsVisibleInDynamoLibrary": true, + "Version": "2.19.0.5874", + "RunType": "Automatic", + "RunPeriod": "1000" + }, + "Camera": { + "Name": "_Background Preview", + "EyeX": 17.317041397094727, + "EyeY": 199.76025390625, + "EyeZ": 73.5179443359375, + "LookX": -22.317041397094727, + "LookY": -188.76025390625, + "LookZ": -81.5179443359375, + "UpX": -0.21225999295711517, + "UpY": 0.594822883605957, + "UpZ": -0.77532660961151123 + }, + "ConnectorPins": [], + "NodeViews": [ + { + "Id": "481bcc0f58724f20a72bd6d5fb3f8b23", + "Name": "Curve.OffsetMany", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1680.2615591829515, + "Y": 397.4224998145429 + }, + { + "Id": "37c0e74e028842dd9f1598e3a167a37b", + "Name": "Boolean", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 798.26155918295149, + "Y": 572.284999814543 + }, + { + "Id": "2aead4d47098431a993640e6f9092d4c", + "Name": "PolyCurve.ByPoints", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1232.2615591829515, + "Y": 397.4224998145429 + }, + { + "Id": "fa6f2483b6c04650be00b9b5b208004b", + "Name": "Creating Points", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 798.26155918295149, + "Y": 397.4224998145429 + }, + { + "Id": "8bbbb99ccbe241fc962154609b516783", + "Name": "Offset Distance", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1232.2615591829515, + "Y": 572.284999814543 + } + ], + "Annotations": [], + "X": -467.70093067256346, + "Y": -204.31140639322629, + "Zoom": 0.77765072223539722 + } +} \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Curve.OffsetMany.md b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Curve.OffsetMany.md index ae5db5ca0fc..3f6bb01c024 100644 --- a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Curve.OffsetMany.md +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Curve.OffsetMany.md @@ -1,5 +1,12 @@ ## In Depth -OffsetMany creates one or more curves by offsetting planar curves. The planeNormal input enables you to override the offset vector for the curve or subcurves to be offset. -___ +`Curve.OffsetMany` creates one or more curves by offsetting a planar curve by the given distance in a plane defined by the plane normal. If there are gaps between the offset component curves, they are filled by extending the offset curves. + +The `planeNormal` input defaults to the normal of the plane containing the curve, but an explicit normal parallel to the original curve normal can be provided to better control the direction of the offset. +For example, if a consistent offset direction is required for multiple curves sharing the same plane, the `planeNormal` input can be used to override individual curve normals and force all curves to be offset in the same direction. Reversing the normal reverses the direction of the offset. + +In the example below, a polycurve is offset by a negative offset distance, which applies in the opposite direction of the cross product between the curve’s tangent and the plane’s normal vector. +___ +## Example File +![Curve.OffsetMany](./Autodesk.DesignScript.Geometry.Curve.OffsetMany_img.jpg) \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Curve.OffsetMany_img.jpg b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Curve.OffsetMany_img.jpg new file mode 100644 index 00000000000..e54191c97ff Binary files /dev/null and b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Curve.OffsetMany_img.jpg differ diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Curve.SplitByParameter.md b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Curve.SplitByParameter.md index ecfb4685f8b..3f52bd823eb 100644 --- a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Curve.SplitByParameter.md +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Curve.SplitByParameter.md @@ -1,5 +1,8 @@ ## In Depth -Split the Curve into pieces given the supplide parameters. +`Curve.SplitByParameter (curve, parameters)` takes a curve and a list of parameters as inputs. It splits the curve at the specified parameters and returns a list of resulting curves. + +In the example below, we first create a NurbsCurve using a `NurbsCurve.ByControlPoints` node, with a set of randomly generated points as the input. A code block is used to create a series of numbers between 0 and 1 to use as the list of parameters at which the curve is split. + ___ ## Example File diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Curve.SweepAsSolid.dyn b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Curve.SweepAsSolid(curve, path, cutEndOff).dyn similarity index 71% rename from doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Curve.SweepAsSolid.dyn rename to doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Curve.SweepAsSolid(curve, path, cutEndOff).dyn index 8498fec863e..a49f065c839 100644 --- a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Curve.SweepAsSolid.dyn +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Curve.SweepAsSolid(curve, path, cutEndOff).dyn @@ -1,5 +1,5 @@ { - "Uuid": "3c9d0464-8643-5ffe-96e5-ab1769818209", + "Uuid": "e5b0fa4e-6552-44b2-8855-af1d80cb6bb0", "IsCustomNode": false, "Description": "", "Name": "Autodesk.DesignScript.Geometry.Curve.SweepAsSolid", @@ -16,13 +16,12 @@ "Nodes": [ { "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "32f3c5e12fc74cd4abcd8f04bffbc0cc", "NodeType": "CodeBlockNode", - "Code": "0..180..36;", - "Id": "46e9280f2cf84b88842f22ae48fb5fce", "Inputs": [], "Outputs": [ { - "Id": "f4069c3f094c4aafbfad76330a0c20d1", + "Id": "00b6f749726c4c7e89ab1bfa07e23c08", "Name": "", "Description": "Value of expression at line 1", "UsingDefaultValue": false, @@ -32,16 +31,16 @@ } ], "Replication": "Disabled", - "Description": "Allows for DesignScript code to be authored directly" + "Description": "Allows for DesignScript code to be authored directly", + "Code": "0..180..36;" }, { "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "1e50b068eb85475aab075d6babde972b", "NodeType": "FunctionNode", - "FunctionSignature": "Autodesk.DesignScript.Geometry.Point.ByCoordinates@double,double,double", - "Id": "de50a8e3de5541a88428f9da60515e1a", "Inputs": [ { - "Id": "2d861276ee9f466dab5e386945f5be02", + "Id": "9621b44fe0744c3da3e5f3f0ac413db6", "Name": "x", "Description": "X coordinate\n\ndouble\nDefault value : 0", "UsingDefaultValue": true, @@ -50,7 +49,7 @@ "KeepListStructure": false }, { - "Id": "9a07f7670df4407f8ba251f260e0c1a7", + "Id": "7c5bb15ddf884979986d7a2603d78ce0", "Name": "y", "Description": "Y coordinate\n\ndouble\nDefault value : 0", "UsingDefaultValue": true, @@ -59,7 +58,7 @@ "KeepListStructure": false }, { - "Id": "512866259cba440bb681be5e22d207d0", + "Id": "a43d9e8b6275407a9f3f35c5f64c4e01", "Name": "z", "Description": "Z coordinate\n\ndouble\nDefault value : 0", "UsingDefaultValue": true, @@ -70,7 +69,7 @@ ], "Outputs": [ { - "Id": "3bc42500ae72433397068df4e1e8d773", + "Id": "acbc90dbc1ac4ebd9f932d3a3658834d", "Name": "Point", "Description": "Point created by coordinates", "UsingDefaultValue": false, @@ -79,18 +78,18 @@ "KeepListStructure": false } ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Point.ByCoordinates@double,double,double", "Replication": "Auto", "Description": "Form a Point given 3 cartesian coordinates\n\nPoint.ByCoordinates (x: double = 0, y: double = 0, z: double = 0): Point" }, { "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "e85cbb0b89fe46b4baaa8e209ef9117b", "NodeType": "CodeBlockNode", - "Code": "0..5..1;", - "Id": "1e47f83f107a45a285aa21437c1fbc1c", "Inputs": [], "Outputs": [ { - "Id": "81d93da6cff74533af77b7e8cbcedff4", + "Id": "1bea4242775d461e8e3d39f10e944f46", "Name": "", "Description": "Value of expression at line 1", "UsingDefaultValue": false, @@ -100,16 +99,16 @@ } ], "Replication": "Disabled", - "Description": "Allows for DesignScript code to be authored directly" + "Description": "Allows for DesignScript code to be authored directly", + "Code": "0..5..1;" }, { "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "48cde1c1e42442c393a4f550eb1d4dd4", "NodeType": "FunctionNode", - "FunctionSignature": "DSCore.Math.Cos@double", - "Id": "46a8d2063011486e91f0607dc215fe0d", "Inputs": [ { - "Id": "ebd62c8a98f2486d9fddde1c56c5ee2c", + "Id": "4330f968ec064f83a0bd1f5a41451d6a", "Name": "angle", "Description": "Angle in degrees to take the cosine of.\n\ndouble", "UsingDefaultValue": false, @@ -120,7 +119,7 @@ ], "Outputs": [ { - "Id": "0b4a0e5c28b5429d98f89c99f323b1e9", + "Id": "948c8913646242de97d5ce72d0d96f7d", "Name": "double", "Description": "Cosine of the angle", "UsingDefaultValue": false, @@ -129,17 +128,17 @@ "KeepListStructure": false } ], + "FunctionSignature": "DSCore.Math.Cos@double", "Replication": "Auto", "Description": "Finds the cosine of an angle.\n\nMath.Cos (angle: double): double" }, { "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "7522689d9a5b4e7286df88e8c6ab9a37", "NodeType": "FunctionNode", - "FunctionSignature": "Autodesk.DesignScript.Geometry.NurbsCurve.ByPoints@Autodesk.DesignScript.Geometry.Point[]", - "Id": "ead95318805a4a978c334b11db7b52a1", "Inputs": [ { - "Id": "df8130b4bd0443cbbf01a28e10723a4b", + "Id": "c4b9cbe7a0b3426ca0c823cbc680854d", "Name": "points", "Description": "Points for nurbs curve\n\nPoint[]", "UsingDefaultValue": false, @@ -150,7 +149,7 @@ ], "Outputs": [ { - "Id": "d50376efa2c8443e8baa4c65e177ddc5", + "Id": "d6e6c83cc5944577a1473d67fe28728b", "Name": "NurbsCurve", "Description": "Nurbscurve created from points", "UsingDefaultValue": false, @@ -159,17 +158,17 @@ "KeepListStructure": false } ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.NurbsCurve.ByPoints@Autodesk.DesignScript.Geometry.Point[]", "Replication": "Auto", "Description": "Create a BSplineCurve by interpolating between points.\n\nNurbsCurve.ByPoints (points: Point[]): NurbsCurve" }, { "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "34a9a091613d468497496d586ef4f79d", "NodeType": "CodeBlockNode", - "Code": "x-2;", - "Id": "1101b3b4be6343899e395a8c6f85da83", "Inputs": [ { - "Id": "8fcc8148882f4ca0b7bb8f03e4779e0d", + "Id": "1021431fe2d84726a5ff81ee8b2a4e8d", "Name": "x", "Description": "x", "UsingDefaultValue": false, @@ -180,7 +179,7 @@ ], "Outputs": [ { - "Id": "64fe2c88e68640fca357da5a768b92e4", + "Id": "824ad923cd524cb3ba8ffbeea0195c6f", "Name": "", "Description": "Value of expression at line 1", "UsingDefaultValue": false, @@ -190,16 +189,16 @@ } ], "Replication": "Disabled", - "Description": "Allows for DesignScript code to be authored directly" + "Description": "Allows for DesignScript code to be authored directly", + "Code": "x-2;" }, { "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "41a65c4200024a6dad503208ac3a2f17", "NodeType": "FunctionNode", - "FunctionSignature": "Autodesk.DesignScript.Geometry.Rectangle.ByWidthLength@double,double", - "Id": "7b6e987559c242e6b4b3d982e04583a8", "Inputs": [ { - "Id": "f819f97fb3604426a2e3d0326f04d26a", + "Id": "2723f78c39d740baa99518c17d2266ce", "Name": "width", "Description": "Width of rectangle\n\ndouble\nDefault value : 1", "UsingDefaultValue": true, @@ -208,7 +207,7 @@ "KeepListStructure": false }, { - "Id": "d1d827ad6dbb4a3e9bde527cb3a6d155", + "Id": "2fa80a56b4204610975187293f197725", "Name": "length", "Description": "Length of rectangle\n\ndouble\nDefault value : 1", "UsingDefaultValue": true, @@ -219,7 +218,7 @@ ], "Outputs": [ { - "Id": "5a93adf8d1c345569935e20946c35cf8", + "Id": "19e635b157fb49c488c1d24a359b9962", "Name": "Rectangle", "Description": "Rectangle created by width and length", "UsingDefaultValue": false, @@ -228,18 +227,18 @@ "KeepListStructure": false } ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Rectangle.ByWidthLength@double,double", "Replication": "Auto", "Description": "Create a Rectangle centered at the WCS origin in the WCS XY Plane, with specified width (X Axis length), and length (Y Axis length).\n\nRectangle.ByWidthLength (width: double = 1, length: double = 1): Rectangle" }, { "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "0393c74829c446338bebdc078fdaa202", "NodeType": "CodeBlockNode", - "Code": "2;", - "Id": "0cb269c723704daf9e8e7a94f8800a2b", "Inputs": [], "Outputs": [ { - "Id": "3f673accce824be39eec1318ae84ddf4", + "Id": "808ca571522742dd88ecd49cfd5fa972", "Name": "", "Description": "Value of expression at line 1", "UsingDefaultValue": false, @@ -249,16 +248,16 @@ } ], "Replication": "Disabled", - "Description": "Allows for DesignScript code to be authored directly" + "Description": "Allows for DesignScript code to be authored directly", + "Code": "2;" }, { "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "0f3be53c354e49a09a08736f02399916", "NodeType": "FunctionNode", - "FunctionSignature": "Autodesk.DesignScript.Geometry.Curve.SweepAsSolid@Autodesk.DesignScript.Geometry.Curve,bool", - "Id": "f0c8209b026949dca4251b1227482edf", "Inputs": [ { - "Id": "58b7f426d940488599fd761478fa0dea", + "Id": "9499b990ee154eb0a39ab8f6f93020d4", "Name": "curve", "Description": "Autodesk.DesignScript.Geometry.Curve", "UsingDefaultValue": false, @@ -267,7 +266,7 @@ "KeepListStructure": false }, { - "Id": "d935696726b74ebab0dbc9121054bb7e", + "Id": "156bdd34ebd248518c27491213de3235", "Name": "path", "Description": "The path that represent the sweep path\n\nCurve", "UsingDefaultValue": false, @@ -276,7 +275,7 @@ "KeepListStructure": false }, { - "Id": "51273deeefec45859abe2a253f35de21", + "Id": "efe852ccba474864a8e99b37b4fd7573", "Name": "cutEndOff", "Description": "Cut the end of the sweep and make it normal to the path\n\nbool\nDefault value : false", "UsingDefaultValue": true, @@ -287,7 +286,7 @@ ], "Outputs": [ { - "Id": "3e2cdf4bbf324c90a1f0ae3036f758bd", + "Id": "7e70a2d93a514386bc7f4b16b379e18e", "Name": "Solid", "Description": "A solid that sweeps this closed Curve along the path Curve", "UsingDefaultValue": false, @@ -296,69 +295,70 @@ "KeepListStructure": false } ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Curve.SweepAsSolid@Autodesk.DesignScript.Geometry.Curve,bool", "Replication": "Auto", "Description": "Sweeps this closed Curve along the path Curve, creating a Solid\n\nCurve.SweepAsSolid (path: Curve, cutEndOff: bool = false): Solid" } ], "Connectors": [ { - "Start": "f4069c3f094c4aafbfad76330a0c20d1", - "End": "ebd62c8a98f2486d9fddde1c56c5ee2c", - "Id": "38f4c43017ce465791f63ab8c4a0c1dc", + "Start": "00b6f749726c4c7e89ab1bfa07e23c08", + "End": "4330f968ec064f83a0bd1f5a41451d6a", + "Id": "7db6dc6aa50b4810a8cd1f0e50d48af0", "IsHidden": "False" }, { - "Start": "3bc42500ae72433397068df4e1e8d773", - "End": "df8130b4bd0443cbbf01a28e10723a4b", - "Id": "83d8312ae14747d086f16e199562ff6c", + "Start": "acbc90dbc1ac4ebd9f932d3a3658834d", + "End": "c4b9cbe7a0b3426ca0c823cbc680854d", + "Id": "05fa3494401f4ef18f31f4b31d5123a7", "IsHidden": "False" }, { - "Start": "81d93da6cff74533af77b7e8cbcedff4", - "End": "512866259cba440bb681be5e22d207d0", - "Id": "bffae81024d048218b1acafb8b60bcfa", + "Start": "1bea4242775d461e8e3d39f10e944f46", + "End": "a43d9e8b6275407a9f3f35c5f64c4e01", + "Id": "bb92390c41994ac683f02ead9412a5b4", "IsHidden": "False" }, { - "Start": "0b4a0e5c28b5429d98f89c99f323b1e9", - "End": "8fcc8148882f4ca0b7bb8f03e4779e0d", - "Id": "d47b90c11fdb49fd98ddef2fe1cc51e2", + "Start": "948c8913646242de97d5ce72d0d96f7d", + "End": "1021431fe2d84726a5ff81ee8b2a4e8d", + "Id": "dfbbd4056cf0476b9f832d6b25dfc566", "IsHidden": "False" }, { - "Start": "d50376efa2c8443e8baa4c65e177ddc5", - "End": "d935696726b74ebab0dbc9121054bb7e", - "Id": "0a39ce3092664be6a951b5fef68412d5", + "Start": "d6e6c83cc5944577a1473d67fe28728b", + "End": "156bdd34ebd248518c27491213de3235", + "Id": "19574850cd144a309d21de1f4ce465a6", "IsHidden": "False" }, { - "Start": "64fe2c88e68640fca357da5a768b92e4", - "End": "2d861276ee9f466dab5e386945f5be02", - "Id": "67b2f9a3283f41b8a7020ba0e85585b0", + "Start": "824ad923cd524cb3ba8ffbeea0195c6f", + "End": "9621b44fe0744c3da3e5f3f0ac413db6", + "Id": "2a4c95cbabbb47a58d0c32f5f3580e78", "IsHidden": "False" }, { - "Start": "5a93adf8d1c345569935e20946c35cf8", - "End": "58b7f426d940488599fd761478fa0dea", - "Id": "002406dfc07f4146a1e362ec4b0ad4fb", + "Start": "19e635b157fb49c488c1d24a359b9962", + "End": "9499b990ee154eb0a39ab8f6f93020d4", + "Id": "e0d3508a78bb40ac9ea1141697ff20e4", "IsHidden": "False" }, { - "Start": "3f673accce824be39eec1318ae84ddf4", - "End": "f819f97fb3604426a2e3d0326f04d26a", - "Id": "1f830a81c8c84ffe8971183b0253b4cf", + "Start": "808ca571522742dd88ecd49cfd5fa972", + "End": "2723f78c39d740baa99518c17d2266ce", + "Id": "9fc5d35b6f8f4ca7a61a9085db8b3066", "IsHidden": "False" } ], "Dependencies": [], "NodeLibraryDependencies": [], - "Thumbnail": null, + "Thumbnail": "", "GraphDocumentationURL": null, "ExtensionWorkspaceData": [ { "ExtensionGuid": "28992e1d-abb9-417f-8b1b-05e053bee670", "Name": "Properties", - "Version": "2.17", + "Version": "2.19", "Data": {} } ], @@ -375,118 +375,118 @@ "ScaleFactor": 1.0, "HasRunWithoutCrash": true, "IsVisibleInDynamoLibrary": true, - "Version": "2.17.0.3255", - "RunType": "Manual", + "Version": "2.19.0.5742", + "RunType": "Automatic", "RunPeriod": "1000" }, "Camera": { "Name": "_Background Preview", - "EyeX": -10.819255828857422, - "EyeY": 4.1498737335205078, - "EyeZ": 7.4183993339538574, - "LookX": 10.980081558227539, - "LookY": -0.21393844485282898, - "LookZ": -8.58186149597168, - "UpX": -0.15708129107952118, - "UpY": 0.97992467880249023, - "UpZ": 0.12277230620384216 + "EyeX": -9.7833023071289063, + "EyeY": 6.161107063293457, + "EyeZ": 10.048727989196777, + "LookX": 6.2058191299438477, + "LookY": -0.82160615921020508, + "LookZ": -12.452702522277832, + "UpX": -0.06977478414773941, + "UpY": 0.98768836259841919, + "UpZ": 0.14001153409481049 }, "ConnectorPins": [], "NodeViews": [ { + "Id": "32f3c5e12fc74cd4abcd8f04bffbc0cc", "Name": "Code Block", - "ShowGeometry": true, - "Id": "46e9280f2cf84b88842f22ae48fb5fce", "IsSetAsInput": false, "IsSetAsOutput": false, "Excluded": false, - "X": -982.77434718964014, - "Y": 188.05819007606192 + "ShowGeometry": true, + "X": -1023.7198597657745, + "Y": 186.55819007606192 }, { + "Id": "1e50b068eb85475aab075d6babde972b", "Name": "Point.ByCoordinates", - "ShowGeometry": true, - "Id": "de50a8e3de5541a88428f9da60515e1a", "IsSetAsInput": false, "IsSetAsOutput": false, "Excluded": false, - "X": -154.77434718964025, - "Y": 227.40319007606197 + "ShowGeometry": true, + "X": -195.71985976577446, + "Y": 226.90319007606195 }, { + "Id": "e85cbb0b89fe46b4baaa8e209ef9117b", "Name": "Code Block", - "ShowGeometry": true, - "Id": "1e47f83f107a45a285aa21437c1fbc1c", "IsSetAsInput": false, "IsSetAsOutput": false, "Excluded": false, - "X": -409.17434718964023, - "Y": 334.23069007606193 + "ShowGeometry": true, + "X": -449.71985976577446, + "Y": 334.73069007606193 }, { + "Id": "48cde1c1e42442c393a4f550eb1d4dd4", "Name": "Math.Cos", - "ShowGeometry": true, - "Id": "46a8d2063011486e91f0607dc215fe0d", "IsSetAsInput": false, "IsSetAsOutput": false, "Excluded": false, - "X": -712.37434718964016, - "Y": 188.23069007606193 + "ShowGeometry": true, + "X": -752.71985976577446, + "Y": 186.73069007606193 }, { + "Id": "7522689d9a5b4e7286df88e8c6ab9a37", "Name": "NurbsCurve.ByPoints", - "ShowGeometry": true, - "Id": "ead95318805a4a978c334b11db7b52a1", "IsSetAsInput": false, "IsSetAsOutput": false, "Excluded": false, - "X": 170.02565281035982, - "Y": 227.40319007606197 + "ShowGeometry": true, + "X": 129.28014023422554, + "Y": 226.90319007606195 }, { + "Id": "34a9a091613d468497496d586ef4f79d", "Name": "Code Block", - "ShowGeometry": true, - "Id": "1101b3b4be6343899e395a8c6f85da83", "IsSetAsInput": false, "IsSetAsOutput": false, "Excluded": false, - "X": -409.17434718964023, - "Y": 188.23069007606193 + "ShowGeometry": true, + "X": -449.71985976577446, + "Y": 186.73069007606193 }, { + "Id": "41a65c4200024a6dad503208ac3a2f17", "Name": "Rectangle.ByWidthLength", - "ShowGeometry": true, - "Id": "7b6e987559c242e6b4b3d982e04583a8", "IsSetAsInput": false, "IsSetAsOutput": false, "Excluded": false, - "X": 170.02565281035982, - "Y": 49.403190076061918 + "ShowGeometry": true, + "X": 129.28014023422554, + "Y": 48.903190076061946 }, { + "Id": "0393c74829c446338bebdc078fdaa202", "Name": "Code Block", - "ShowGeometry": true, - "Id": "0cb269c723704daf9e8e7a94f8800a2b", "IsSetAsInput": false, "IsSetAsOutput": false, "Excluded": false, - "X": -154.77434718964025, - "Y": 49.230690076061933 + "ShowGeometry": true, + "X": -195.71985976577446, + "Y": 48.730690076061933 }, { + "Id": "0f3be53c354e49a09a08736f02399916", "Name": "Curve.SweepAsSolid", - "ShowGeometry": true, - "Id": "f0c8209b026949dca4251b1227482edf", "IsSetAsInput": false, "IsSetAsOutput": false, "Excluded": false, - "X": 536.42565281035968, - "Y": 121.40319007606192 + "ShowGeometry": true, + "X": 476.34475235663513, + "Y": 113.66016328142138 } ], "Annotations": [], - "X": 744.00064532525028, - "Y": 54.140530852501257, - "Zoom": 0.73302752293578 + "X": 715.77047668236651, + "Y": 70.574999695881047, + "Zoom": 0.65243989526115775 } } \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Curve.SweepAsSolid(curve, path, cutEndOff).md b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Curve.SweepAsSolid(curve, path, cutEndOff).md new file mode 100644 index 00000000000..dc06e1e905d --- /dev/null +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Curve.SweepAsSolid(curve, path, cutEndOff).md @@ -0,0 +1,8 @@ +## In Depth +`Curve.SweepAsSolid` creates a solid by sweeping an input closed profile curve along a specified path. + +In the example below, we use a rectangle as the base profile curve. The path is created by using a cosine function with a sequence of angles to vary the x-coordinates of a set of points. The points are used as the input to a `NurbsCurve.ByPoints` node. We then create a solid by sweeping the rectangle along the created cosine curve with a `Curve.SweepAsSolid` node. +___ +## Example File + +![Curve.SweepAsSolid(curve, path, cutEndOff)](./Autodesk.DesignScript.Geometry.Curve.SweepAsSolid(curve,%20path,%20cutEndOff)_img.jpg) \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Curve.SweepAsSolid(curve, path, cutEndOff)_img.jpg b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Curve.SweepAsSolid(curve, path, cutEndOff)_img.jpg new file mode 100644 index 00000000000..877a9eeab07 Binary files /dev/null and b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Curve.SweepAsSolid(curve, path, cutEndOff)_img.jpg differ diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Curve.SweepAsSolid.md b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Curve.SweepAsSolid.md deleted file mode 100644 index 2ba95017c52..00000000000 --- a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Curve.SweepAsSolid.md +++ /dev/null @@ -1,7 +0,0 @@ -## In Depth -Sweep As Solid will create a solid by sweeping an input closed profile curve along a specified path. In the example below, we use a rectangle as the base profile curve. The path is created by using a cosine function with a sequence of angles to vary the x-coordinates of a set of points. The points are used as the input to a NurbsCurve.ByPoints node. We then create a solid by sweeping the rectangle along the created cosine curve. -___ -## Example File - -![SweepAsSolid](./Autodesk.DesignScript.Geometry.Curve.SweepAsSolid_img.jpg) - diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Curve.SweepAsSolid_img.jpg b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Curve.SweepAsSolid_img.jpg deleted file mode 100644 index 2d4a9d406aa..00000000000 Binary files a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Curve.SweepAsSolid_img.jpg and /dev/null differ diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Curve.TrimSegmentsByParameter(curve, parameters, discardEvenSegments).dyn b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Curve.TrimSegmentsByParameter(curve, parameters, discardEvenSegments).dyn new file mode 100644 index 00000000000..479e8459e10 --- /dev/null +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Curve.TrimSegmentsByParameter(curve, parameters, discardEvenSegments).dyn @@ -0,0 +1,531 @@ +{ + "Uuid": "96f916f3-a9b1-4f51-9a06-733d40453219", + "IsCustomNode": false, + "Description": "", + "Name": "Autodesk.DesignScript.Geometry.Curve.TrimSegmentsByParameter", + "ElementResolver": { + "ResolutionMap": {} + }, + "Inputs": [ + { + "Id": "09c75540cdf3432b85776509754c999f", + "Name": "Boolean", + "Type": "boolean", + "Type2": "boolean", + "Value": "false", + "Description": "Enables selection between True and False", + "SelectedIndex": 0 + } + ], + "Outputs": [], + "Nodes": [ + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "4d077c5aac734df3851ba7c4f19c925a", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "f363c0bf7ca245ecae355258f1839a71", + "Name": "points", + "Description": "Points for nurbs curve\n\nPoint[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "d91d55edecce436da17ea0bb72b23e62", + "Name": "NurbsCurve", + "Description": "Nurbscurve created from points", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.NurbsCurve.ByControlPoints@Autodesk.DesignScript.Geometry.Point[]", + "Replication": "Auto", + "Description": "Create a BSplineCurve by using explicit control points. NOTE 1: BSplineCurves with deg=1 have G1 discontinuities, which cause problems for extrusion, sweep, and other operations. They should be avoided. Use a PolyCurve instead. NOTE 2: If the curve is periodic (closed), then the first and last points MUST be the same.\n\nNurbsCurve.ByControlPoints (points: Point[]): NurbsCurve" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "d34e58b7192849beb48bda9dfa2ca60b", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "7b6ebbaf6cc24100b8d3e99a7ceaf9c8", + "Name": "amount", + "Description": "Amount of random numbers the result list will contain.\n\nint", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "8fc36e4944394971a327a0a4e08cd451", + "Name": "number", + "Description": "List of random numbers between 0 and 1.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Math.RandomList@int", + "Replication": "Auto", + "Description": "Produces a list containing the given amount of random doubles in the range of [0, 1).\n\nMath.RandomList (amount: int): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "28ae21fe880047838fb1d56a016049a6", + "NodeType": "CodeBlockNode", + "Inputs": [], + "Outputs": [ + { + "Id": "64a7c766aadf40b29256fc35feea8ad5", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "6;" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "75a9a2fa4e0046c1ab514c1c64f44ac7", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "4be644416719428094b8470fac074569", + "Name": "amount", + "Description": "Amount of random numbers the result list will contain.\n\nint", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "1296f6f8f1ff485694e950d955f2fa91", + "Name": "number", + "Description": "List of random numbers between 0 and 1.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Math.RandomList@int", + "Replication": "Auto", + "Description": "Produces a list containing the given amount of random doubles in the range of [0, 1).\n\nMath.RandomList (amount: int): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "e9350dcdfdbc4458a2744160a6021125", + "NodeType": "CodeBlockNode", + "Inputs": [ + { + "Id": "2f54b021fece407eb041427f24183942", + "Name": "x", + "Description": "x", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "782d4191082240f6bf77aab8ca3ee42e", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "x*10;" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "744712f278d947119bbbbe5a8f9b8d6c", + "NodeType": "CodeBlockNode", + "Inputs": [ + { + "Id": "13c77b604c5245778f31cc9c0b76b241", + "Name": "x", + "Description": "x", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "e82b1b1bf9724e90a949e7346c2a73b2", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "x*10;" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "1148770d5d374f86bc78bc6f1e768cbd", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "b2413be508bd43f990b6de42febca429", + "Name": "x", + "Description": "X coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "015858deec874d55852248c335a3254e", + "Name": "y", + "Description": "Y coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "8bee2bc6579847818ecec7df5f2fe614", + "Name": "Point", + "Description": "Point created by coordinates", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Point.ByCoordinates@double,double", + "Replication": "Auto", + "Description": "Form a Point in the XY plane given two 2 cartesian coordinates. The Z component is 0.\n\nPoint.ByCoordinates (x: double = 0, y: double = 0): Point" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "d8c0b45b0b26455a89e74cddedca572f", + "NodeType": "CodeBlockNode", + "Inputs": [], + "Outputs": [ + { + "Id": "cb01149035464371a91d89b62b40fceb", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "0..1..0.1;" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "7301eacd22d74fba8437393b6dc7c93c", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "04cfd28f80984d24aca45e34b343fa51", + "Name": "curve", + "Description": "Autodesk.DesignScript.Geometry.Curve", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "f558f4c7b5e441b2840934a57fb6cd05", + "Name": "parameters", + "Description": "A list of parameters at which to split the curve\n\ndouble[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "d71577d511af45f1bde21b22d49612ef", + "Name": "discardEvenSegments", + "Description": "Toggle to discard even segments\n\nbool\nDefault value : true", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "62bb713f8b714e0bba8d3712f264e4e3", + "Name": "Curve[]", + "Description": "List of curves remaining after discarding the even or odd curve segments.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Curve.TrimSegmentsByParameter@double[],bool", + "Replication": "Auto", + "Description": "Removes even or odd segments of the Curve split at the given parameters depending on whether the 'discardEvenSegments' flag is true or false respectively.\n\nCurve.TrimSegmentsByParameter (parameters: double[], discardEvenSegments: bool = true): Curve[]" + }, + { + "ConcreteType": "CoreNodeModels.Input.BoolSelector, CoreNodeModels", + "Id": "09c75540cdf3432b85776509754c999f", + "NodeType": "BooleanInputNode", + "Inputs": [], + "Outputs": [ + { + "Id": "38009163995b416a819858a1280d5469", + "Name": "", + "Description": "Boolean", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Enables selection between True and False", + "InputValue": false + } + ], + "Connectors": [ + { + "Start": "d91d55edecce436da17ea0bb72b23e62", + "End": "04cfd28f80984d24aca45e34b343fa51", + "Id": "0501c377140948c888d5dd43c1f1be79", + "IsHidden": "False" + }, + { + "Start": "8fc36e4944394971a327a0a4e08cd451", + "End": "2f54b021fece407eb041427f24183942", + "Id": "f693420936654a4ab0ec8fa27b3fb194", + "IsHidden": "False" + }, + { + "Start": "64a7c766aadf40b29256fc35feea8ad5", + "End": "7b6ebbaf6cc24100b8d3e99a7ceaf9c8", + "Id": "ddba6d7affa84250a4d97a6d1e3ee2bb", + "IsHidden": "False" + }, + { + "Start": "64a7c766aadf40b29256fc35feea8ad5", + "End": "4be644416719428094b8470fac074569", + "Id": "52b1a64d2f9f4f43b9501479ec16aaf7", + "IsHidden": "False" + }, + { + "Start": "1296f6f8f1ff485694e950d955f2fa91", + "End": "13c77b604c5245778f31cc9c0b76b241", + "Id": "7df7c49780064f939ed375571eb7c17f", + "IsHidden": "False" + }, + { + "Start": "782d4191082240f6bf77aab8ca3ee42e", + "End": "b2413be508bd43f990b6de42febca429", + "Id": "af22cac7e6bd4536b61f7ce00be2d829", + "IsHidden": "False" + }, + { + "Start": "e82b1b1bf9724e90a949e7346c2a73b2", + "End": "015858deec874d55852248c335a3254e", + "Id": "bb4dabac25734447862a10861c3ff5e5", + "IsHidden": "False" + }, + { + "Start": "8bee2bc6579847818ecec7df5f2fe614", + "End": "f363c0bf7ca245ecae355258f1839a71", + "Id": "6e36e61b46e8400a8589e8da86fb35b4", + "IsHidden": "False" + }, + { + "Start": "cb01149035464371a91d89b62b40fceb", + "End": "f558f4c7b5e441b2840934a57fb6cd05", + "Id": "1889bd2118db42b6abf27466343feb31", + "IsHidden": "False" + }, + { + "Start": "38009163995b416a819858a1280d5469", + "End": "d71577d511af45f1bde21b22d49612ef", + "Id": "dc9496e34049450790258cf50ce20909", + "IsHidden": "False" + } + ], + "Dependencies": [], + "NodeLibraryDependencies": [], + "Thumbnail": "", + "GraphDocumentationURL": null, + "ExtensionWorkspaceData": [ + { + "ExtensionGuid": "28992e1d-abb9-417f-8b1b-05e053bee670", + "Name": "Properties", + "Version": "2.19", + "Data": {} + } + ], + "Author": "None provided", + "Linting": { + "activeLinter": "None", + "activeLinterId": "7b75fb44-43fd-4631-a878-29f4d5d8399a", + "warningCount": 0, + "errorCount": 0 + }, + "Bindings": [], + "View": { + "Dynamo": { + "ScaleFactor": 1.0, + "HasRunWithoutCrash": true, + "IsVisibleInDynamoLibrary": true, + "Version": "2.19.0.5874", + "RunType": "Automatic", + "RunPeriod": "1000" + }, + "Camera": { + "Name": "_Background Preview", + "EyeX": 2.6029868125915527, + "EyeY": 4.4077701568603516, + "EyeZ": 1.1365127563476563, + "LookX": 2.0568084716796875, + "LookY": -2.6562516689300537, + "LookZ": -3.7429630756378174, + "UpX": 0.16075842082500458, + "UpY": 0.94264155626297, + "UpZ": -0.29254710674285889 + }, + "ConnectorPins": [], + "NodeViews": [ + { + "Id": "4d077c5aac734df3851ba7c4f19c925a", + "Name": "NurbsCurve.ByControlPoints", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": false, + "X": 418.877748105216, + "Y": -3656.5322328371 + }, + { + "Id": "d34e58b7192849beb48bda9dfa2ca60b", + "Name": "Math.RandomList", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -481.122251894784, + "Y": -3713.7047328371 + }, + { + "Id": "28ae21fe880047838fb1d56a016049a6", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -735.122251894784, + "Y": -3639.8772328371 + }, + { + "Id": "75a9a2fa4e0046c1ab514c1c64f44ac7", + "Name": "Math.RandomList", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -481.122251894784, + "Y": -3565.7047328371 + }, + { + "Id": "e9350dcdfdbc4458a2744160a6021125", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -160.12225189478397, + "Y": -3713.7047328371 + }, + { + "Id": "744712f278d947119bbbbe5a8f9b8d6c", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -160.12225189478397, + "Y": -3565.7047328371 + }, + { + "Id": "1148770d5d374f86bc78bc6f1e768cbd", + "Name": "Point.ByCoordinates", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": false, + "X": 93.877748105216028, + "Y": -3656.5322328371 + }, + { + "Id": "d8c0b45b0b26455a89e74cddedca572f", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 418.877748105216, + "Y": -3496.7047328371 + }, + { + "Id": "7301eacd22d74fba8437393b6dc7c93c", + "Name": "Curve.TrimSegmentsByParameter", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 804.877748105216, + "Y": -3534.5322328371 + }, + { + "Id": "09c75540cdf3432b85776509754c999f", + "Name": "Boolean", + "IsSetAsInput": true, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 418.877748105216, + "Y": -3348.5322328371 + } + ], + "Annotations": [], + "X": 537.10528482769246, + "Y": 2603.7027161136702, + "Zoom": 0.66406570309069013 + } +} \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Curve.TrimSegmentsByParameter(curve, parameters, discardEvenSegments).md b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Curve.TrimSegmentsByParameter(curve, parameters, discardEvenSegments).md new file mode 100644 index 00000000000..369a30ef770 --- /dev/null +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Curve.TrimSegmentsByParameter(curve, parameters, discardEvenSegments).md @@ -0,0 +1,8 @@ +## In Depth +`Curve.TrimSegmentsByParameter (parameters, discardEvenSegments)` first splits a curve at points determined by an input list of parameters. It then returns either the odd numbered segments or the even numbered segments, as determined by the Boolean value of the `discardEvenSegments` input. + +In the example below, we first create a NurbsCurve using a `NurbsCurve.ByControlPoints` node, with a set of randomly generated points as the input. A `code block` is used to create a range of numbers between 0 and 1, stepping by 0.1. Using this as the input parameters for a `Curve.TrimSegmentsByParameter` node results in a list of curves that are effectively a dashed-line version of the original curve. +___ +## Example File + +![Curve.TrimSegmentsByParameter(parameters, discardEvenSegments)](./Autodesk.DesignScript.Geometry.Curve.TrimSegmentsByParameter(curve,%20parameters,%20discardEvenSegments)_img.jpg) \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Curve.TrimSegmentsByParameter(curve, parameters, discardEvenSegments)_img.jpg b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Curve.TrimSegmentsByParameter(curve, parameters, discardEvenSegments)_img.jpg new file mode 100644 index 00000000000..df17151a20a Binary files /dev/null and b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Curve.TrimSegmentsByParameter(curve, parameters, discardEvenSegments)_img.jpg differ diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Cylinder.Height.md b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Cylinder.Height.md index c4b77e3c660..30c4e72e2ff 100644 --- a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Cylinder.Height.md +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Cylinder.Height.md @@ -1,5 +1,8 @@ ## In Depth -Text note height is returned as a double. The height value is relative to the view scale. +`Cylinder.Height` returns the height of the input cylinder. The height value is relative to the view scale. + +In the example below, we generate a cylinder by start point, end point, and radius, and then use a `Cylinder.Height` node to find the height. + ___ ## Example File diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Cylinder.Radius.md b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Cylinder.Radius.md index 21a82359a0b..3fbe0a06626 100644 --- a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Cylinder.Radius.md +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Cylinder.Radius.md @@ -1,5 +1,8 @@ ## In Depth -Radius will return the center of an input sphere. In the example below, we use a ByBestFit node to create a sphere based on a set of random points. We then use a Radius node to determine the size of the best fit sphere. +`Cylinder.Radius` returns the radius of a cylinder as a double. + +In the example below, adjusting the number slider will change the cylinder's radius. + ___ ## Example File diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Ellipse.CenterPoint.md b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Ellipse.CenterPoint.md index f9dcce60db5..a7e740d7bdd 100644 --- a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Ellipse.CenterPoint.md +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Ellipse.CenterPoint.md @@ -1,5 +1,8 @@ ## In Depth -Center Point will return the center of an input sphere. In the example below, we use a ByBestFit node to create a sphere based on a set of random points. We then use a CenterPoint node to determine the center of the best fit sphere. +`Ellipse.CenterPoint` returns the center point of an input ellipse. Note that this point does not contain any information about the orientation or plane of the ellipse. + +In the example below, we first create an ellipse by using `Ellipse.ByPlaneRadii`, then find the center point. + ___ ## Example File diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.EllipseArc.CenterPoint.md b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.EllipseArc.CenterPoint.md index 1489e6cdb29..d8ea96bb243 100644 --- a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.EllipseArc.CenterPoint.md +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.EllipseArc.CenterPoint.md @@ -1,5 +1,8 @@ ## In Depth -Center Point will return the center of an input sphere. In the example below, we use a ByBestFit node to create a sphere based on a set of random points. We then use a CenterPoint node to determine the center of the best fit sphere. +`EllipseArc.CenterPoint` finds the center point of an ellipse arc, which is the same as the center point of the completed ellipse. + +In the example below, we first create an ellipse arc by using the XY plane and a series of number sliders. We then use `EllipseArc.CenterPoint` to extract the center of the ellipse. + ___ ## Example File diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.EllipseArc.Plane.md b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.EllipseArc.Plane.md index 9804777ee38..9bc172160f6 100644 --- a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.EllipseArc.Plane.md +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.EllipseArc.Plane.md @@ -1,5 +1,8 @@ ## In Depth -Sketch planes are used in the creation of 2D and 3D geometry in Revit. +`EllipseArc.Plane` finds the plane of an ellipse arc, which is the same as the plane of the completed ellipse. + +In the example below, we first create an ellipse arc by using the XY plane and a series of number sliders. We then use `EllipseArc.Plane` to extract the plane of the ellipse. + ___ ## Example File diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.BoundingBox.md b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.BoundingBox.md index 54c59907fac..ff613d7b445 100644 --- a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.BoundingBox.md +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.BoundingBox.md @@ -1,5 +1,8 @@ ## In Depth -BoundingBox will create a bounding box in Dynamo around a Revit element. +`Geometry.BoundingBox` returns a box defined by the geometry it contains. A BoundingBox is not displayed, but it can be returned as a PolySurface by using the `BoundingBox.ToPolySurface` node. + +In the example below, a BoundingBox is created for a unioned solid and represented as a PolySurface. + ___ ## Example File diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.ExportToSAT(geometry, filePath).dyn b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.ExportToSAT(geometry, filePath).dyn new file mode 100644 index 00000000000..f519d210b6e --- /dev/null +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.ExportToSAT(geometry, filePath).dyn @@ -0,0 +1,874 @@ +{ + "Uuid": "baaf6052-9b49-488f-8f01-a28a858d23d7", + "IsCustomNode": false, + "Description": "", + "Name": "Autodesk.DesignScript.Geometry.Geometry.ExportToSAT", + "ElementResolver": { + "ResolutionMap": {} + }, + "Inputs": [ + { + "Id": "97b319c8678b4ba9935d0355a77b4c9c", + "Name": "File Path", + "Type": "string", + "Type2": "string", + "Value": "No file selected.", + "Description": "Allows you to select a file on the system and returns its file path", + "SelectedIndex": 0 + } + ], + "Outputs": [], + "Nodes": [ + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "6dcb0b06e6d147b98f817235d27b203f", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "453098e6695e403b919668b2814d9965", + "Name": "x", + "Description": "X coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "5c15552cea374af0bcde68715da646fa", + "Name": "y", + "Description": "Y coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "6fa0e8be0e394f818fadea607b4a6a58", + "Name": "z", + "Description": "Z coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "212ac2af3033489d8eaab39dd46d11a8", + "Name": "Point", + "Description": "Point created by coordinates", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Point.ByCoordinates@double,double,double", + "Replication": "Auto", + "Description": "Form a Point given 3 cartesian coordinates\n\nPoint.ByCoordinates (x: double = 0, y: double = 0, z: double = 0): Point" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "3da18c1927f7469e8307da74ca1d2685", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "dec16edf3fbb4adeb55ac8dcea284ec9", + "Name": "x", + "Description": "X coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "506bd0af4ba0447b8a4755edcf4ed257", + "Name": "y", + "Description": "Y coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "85c9a649c2224c3ca181bc1a252b9eee", + "Name": "z", + "Description": "Z coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "12d3ff9e2e6846a2a63236fff4edf5e3", + "Name": "Point", + "Description": "Point created by coordinates", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Point.ByCoordinates@double,double,double", + "Replication": "Auto", + "Description": "Form a Point given 3 cartesian coordinates\n\nPoint.ByCoordinates (x: double = 0, y: double = 0, z: double = 0): Point" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "20f4e6550d704f80b7c61775938f91ef", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "b090dceb2ea34be4b4f04c14379847dd", + "Name": "centerPoint", + "Description": "Point\nDefault value : Autodesk.DesignScript.Geometry.Point.ByCoordinates(0, 0, 0)", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "fdf4cdf3fe964cfdae3a3d1407f55645", + "Name": "radius", + "Description": "double\nDefault value : 1", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "55b94f530e1147f0aab4219467eb986e", + "Name": "Sphere", + "Description": "Sphere", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Sphere.ByCenterPointRadius@Autodesk.DesignScript.Geometry.Point,double", + "Replication": "Auto", + "Description": "Create a Solid Sphere cetered at the input Point, with given radius.\n\nSphere.ByCenterPointRadius (centerPoint: Point = Autodesk.DesignScript.Geometry.Point.ByCoordinates(0, 0, 0), radius: double = 1): Sphere" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "70b7b2032a0346e2a3ef4a33b75b16d6", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "77597bf8991641f0b4aa11b85002fe68", + "Name": "centerPoint", + "Description": "Point\nDefault value : Autodesk.DesignScript.Geometry.Point.ByCoordinates(0, 0, 0)", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "a4359564ed2a44929f35b07ae33eeb1b", + "Name": "radius", + "Description": "double\nDefault value : 1", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "9b50edbd0ebf46baa9e256bb81a1e805", + "Name": "Sphere", + "Description": "Sphere", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Sphere.ByCenterPointRadius@Autodesk.DesignScript.Geometry.Point,double", + "Replication": "Auto", + "Description": "Create a Solid Sphere cetered at the input Point, with given radius.\n\nSphere.ByCenterPointRadius (centerPoint: Point = Autodesk.DesignScript.Geometry.Point.ByCoordinates(0, 0, 0), radius: double = 1): Sphere" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "75a6566341c940b7951ce28a90b873dc", + "NodeType": "CodeBlockNode", + "Inputs": [], + "Outputs": [ + { + "Id": "6f7ceb79118c4c4890e412f40e8b0443", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "5;" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "c66e3330feba4c43aea0b47910584c5b", + "NodeType": "CodeBlockNode", + "Inputs": [], + "Outputs": [ + { + "Id": "a4abbd7022bf47afa77a39a4c3c1eeaf", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "9686859dd3f547038f8656797171a4c3", + "Name": "", + "Description": "Value of expression at line 2", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "fc5b80398c874bd4b28125e093dd203d", + "Name": "", + "Description": "Value of expression at line 3", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "5;\n2;\n8;" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "fdbcec629f5046a1be1a68647d5db95a", + "NodeType": "CodeBlockNode", + "Inputs": [], + "Outputs": [ + { + "Id": "90ee0223959944fc9fefa6e375e74feb", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "8b10fc55e29042528654b8e72823fe96", + "Name": "", + "Description": "Value of expression at line 2", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "ac2b35636105420cbc5172b66c49b0aa", + "Name": "", + "Description": "Value of expression at line 3", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "1;\n2;\n3;" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "1803be16255347a8bfcd31647f522eec", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "fe8e296035c141a0a0fbd670b9a9e4c5", + "Name": "x", + "Description": "X coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "3a2cbb8e0a8a44aba64a8ca0874853bd", + "Name": "y", + "Description": "Y coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "22718d87f8a747f9bc0087b819459dde", + "Name": "z", + "Description": "Z coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "8e6164a7037f42e9b18a9d8cb603627d", + "Name": "Point", + "Description": "Point created by coordinates", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Point.ByCoordinates@double,double,double", + "Replication": "Auto", + "Description": "Form a Point given 3 cartesian coordinates\n\nPoint.ByCoordinates (x: double = 0, y: double = 0, z: double = 0): Point" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "d1a25ced3c88415f8b4d34bec3b87714", + "NodeType": "CodeBlockNode", + "Inputs": [], + "Outputs": [ + { + "Id": "adb8e84bd9cf47b79c7c8635c01da1a8", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "1ea04c8206044ca4a204b6ed46496326", + "Name": "", + "Description": "Value of expression at line 2", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "5a28223ec9ab4823af5a7b74b19c3570", + "Name": "", + "Description": "Value of expression at line 3", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "5;\n1;\n4;" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "d089d566f4c747f78b026a2da6fb4f50", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "d69e399dc17e4716a58452ae56b90ace", + "Name": "centerPoint", + "Description": "Point\nDefault value : Autodesk.DesignScript.Geometry.Point.ByCoordinates(0, 0, 0)", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "43fc9f6903e645a091a9ef6b620e17e4", + "Name": "radius", + "Description": "double\nDefault value : 1", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "9764ae56d92e42cab0fd54adfb943ce6", + "Name": "Sphere", + "Description": "Sphere", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Sphere.ByCenterPointRadius@Autodesk.DesignScript.Geometry.Point,double", + "Replication": "Auto", + "Description": "Create a Solid Sphere cetered at the input Point, with given radius.\n\nSphere.ByCenterPointRadius (centerPoint: Point = Autodesk.DesignScript.Geometry.Point.ByCoordinates(0, 0, 0), radius: double = 1): Sphere" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "0eb7d5f8b7304af082683d679f29cd3b", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "fdd1139d49ab4c478fbc166dfe949b73", + "Name": "geometry", + "Description": "Autodesk.DesignScript.Geometry.Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "6e39f981e47c4d4e9fdd5c962056d73e", + "Name": "others", + "Description": "Geometry[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "c092547d04ea4c7687b99d1d8be46b03", + "Name": "Geometry[]", + "Description": "Geometry[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Geometry.IntersectAll@Autodesk.DesignScript.Geometry.Geometry[]", + "Replication": "Auto", + "Description": "Get the intersection of Geometry for this object and a collection of other Geometries. Finds common geometry of all participants.\n\nGeometry.IntersectAll (others: Geometry[]): Geometry[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSVarArgFunction, DynamoCore", + "FunctionSignature": "DSCore.List.Join@var[]..[]", + "FunctionType": "VariableArgument", + "Id": "2b117b50cc3a4861a10b902f573d4a54", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "09e2f1e8c40744c48d4ca30c7a4d778f", + "Name": "list0", + "Description": "Lists to join into one.\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "9e10e8b3e68a469a9cf9f850e0ea8471", + "Name": "list1", + "Description": "var[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "25d517060806422787ff04366e4025d6", + "Name": "list", + "Description": "Joined list.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Auto", + "Description": "Concatenates all given lists into a single list.\n\nList.Join (lists: var[]..[]): var[]..[]" + }, + { + "ConcreteType": "CoreNodeModels.Input.Filename, CoreNodeModels", + "Id": "97b319c8678b4ba9935d0355a77b4c9c", + "NodeType": "ExtensionNode", + "Inputs": [], + "Outputs": [ + { + "Id": "c6273b6c301249e8ba053a3c6e531a7b", + "Name": "", + "Description": "File Path", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows you to select a file on the system and returns its file path", + "HintPath": "C:\\Users\\tellro\\Downloads\\UpdatedDynamoSampleGraphs\\No file selected", + "InputValue": "No file selected." + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "d3be2ac8f0844986ad7b2ae9a6fa0c7b", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "2d12b5977f374fecbf6deef0ea7136a9", + "Name": "geometry", + "Description": "Geometry[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "0b19a7d4c5ef43b59617a2762b6dbd3f", + "Name": "filePath", + "Description": "The name of the file to export the geometry to\n\nstring", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "d4b4f247365143f890598fedc21b37ae", + "Name": "string", + "Description": "string", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Geometry.ExportToSAT@Autodesk.DesignScript.Geometry.Geometry[],string", + "Replication": "Auto", + "Description": "Exports the specified geometry to the given SAT file path\n\nGeometry.ExportToSAT (geometry: Geometry[], filePath: string): string" + } + ], + "Connectors": [ + { + "Start": "212ac2af3033489d8eaab39dd46d11a8", + "End": "77597bf8991641f0b4aa11b85002fe68", + "Id": "3bd4f307d77648ae8cfb16da7b695091", + "IsHidden": "False" + }, + { + "Start": "12d3ff9e2e6846a2a63236fff4edf5e3", + "End": "b090dceb2ea34be4b4f04c14379847dd", + "Id": "525ff18b33594b15bccd1f54f1592ec5", + "IsHidden": "False" + }, + { + "Start": "55b94f530e1147f0aab4219467eb986e", + "End": "09e2f1e8c40744c48d4ca30c7a4d778f", + "Id": "1d7709a99fb54944b2df0f3ef8ec30cd", + "IsHidden": "False" + }, + { + "Start": "9b50edbd0ebf46baa9e256bb81a1e805", + "End": "fdd1139d49ab4c478fbc166dfe949b73", + "Id": "12e3bec8cf9c43488eecb524035bcdeb", + "IsHidden": "False" + }, + { + "Start": "6f7ceb79118c4c4890e412f40e8b0443", + "End": "a4359564ed2a44929f35b07ae33eeb1b", + "Id": "e17cfcc2f99445768cef7194dbf05e3d", + "IsHidden": "False" + }, + { + "Start": "6f7ceb79118c4c4890e412f40e8b0443", + "End": "fdf4cdf3fe964cfdae3a3d1407f55645", + "Id": "63efbf90326b4d168fc868911428aea1", + "IsHidden": "False" + }, + { + "Start": "6f7ceb79118c4c4890e412f40e8b0443", + "End": "43fc9f6903e645a091a9ef6b620e17e4", + "Id": "d7ed46a49d21400bb019ae60099df93b", + "IsHidden": "False" + }, + { + "Start": "a4abbd7022bf47afa77a39a4c3c1eeaf", + "End": "453098e6695e403b919668b2814d9965", + "Id": "f5cd3fe68e844db6933991ec53cd61c6", + "IsHidden": "False" + }, + { + "Start": "9686859dd3f547038f8656797171a4c3", + "End": "5c15552cea374af0bcde68715da646fa", + "Id": "c7abb8cbf08f47deb5f386612316194e", + "IsHidden": "False" + }, + { + "Start": "fc5b80398c874bd4b28125e093dd203d", + "End": "6fa0e8be0e394f818fadea607b4a6a58", + "Id": "fd0a9d086889460f9071730fe2538744", + "IsHidden": "False" + }, + { + "Start": "90ee0223959944fc9fefa6e375e74feb", + "End": "dec16edf3fbb4adeb55ac8dcea284ec9", + "Id": "09b5c741040d4ec0be2584c648cf71dc", + "IsHidden": "False" + }, + { + "Start": "8b10fc55e29042528654b8e72823fe96", + "End": "506bd0af4ba0447b8a4755edcf4ed257", + "Id": "e8ffb8de86684d89b81d57a152ae78f4", + "IsHidden": "False" + }, + { + "Start": "ac2b35636105420cbc5172b66c49b0aa", + "End": "85c9a649c2224c3ca181bc1a252b9eee", + "Id": "789df2645ffb401aba2dd2abfc40be1c", + "IsHidden": "False" + }, + { + "Start": "8e6164a7037f42e9b18a9d8cb603627d", + "End": "d69e399dc17e4716a58452ae56b90ace", + "Id": "aca9f301ca7f4d4d8b347e0b92ee3a3e", + "IsHidden": "False" + }, + { + "Start": "adb8e84bd9cf47b79c7c8635c01da1a8", + "End": "fe8e296035c141a0a0fbd670b9a9e4c5", + "Id": "c080e2cc851a45d993b3e17d9d4f684b", + "IsHidden": "False" + }, + { + "Start": "1ea04c8206044ca4a204b6ed46496326", + "End": "3a2cbb8e0a8a44aba64a8ca0874853bd", + "Id": "9d629d79be8d42068ff1114a76270262", + "IsHidden": "False" + }, + { + "Start": "5a28223ec9ab4823af5a7b74b19c3570", + "End": "22718d87f8a747f9bc0087b819459dde", + "Id": "7c7fd0d6583f48ac93f548ee29c152c4", + "IsHidden": "False" + }, + { + "Start": "9764ae56d92e42cab0fd54adfb943ce6", + "End": "9e10e8b3e68a469a9cf9f850e0ea8471", + "Id": "0e0a38b5569548a6ad8bb00593a23de0", + "IsHidden": "False" + }, + { + "Start": "c092547d04ea4c7687b99d1d8be46b03", + "End": "2d12b5977f374fecbf6deef0ea7136a9", + "Id": "d89d52ace7b4411e9a1968efb31ccec8", + "IsHidden": "False" + }, + { + "Start": "25d517060806422787ff04366e4025d6", + "End": "6e39f981e47c4d4e9fdd5c962056d73e", + "Id": "391274aacda2450097ec141a64b8d0ab", + "IsHidden": "False" + }, + { + "Start": "c6273b6c301249e8ba053a3c6e531a7b", + "End": "0b19a7d4c5ef43b59617a2762b6dbd3f", + "Id": "e12a22bc3c86441f89a38dc35fd3d4e6", + "IsHidden": "False" + } + ], + "Dependencies": [], + "NodeLibraryDependencies": [], + "Thumbnail": "", + "GraphDocumentationURL": null, + "ExtensionWorkspaceData": [ + { + "ExtensionGuid": "28992e1d-abb9-417f-8b1b-05e053bee670", + "Name": "Properties", + "Version": "2.19", + "Data": {} + } + ], + "Author": "None provided", + "Linting": { + "activeLinter": "None", + "activeLinterId": "7b75fb44-43fd-4631-a878-29f4d5d8399a", + "warningCount": 0, + "errorCount": 0 + }, + "Bindings": [], + "View": { + "Dynamo": { + "ScaleFactor": 1.0, + "HasRunWithoutCrash": true, + "IsVisibleInDynamoLibrary": true, + "Version": "2.19.4.6632", + "RunType": "Automatic", + "RunPeriod": "1000" + }, + "Camera": { + "Name": "_Background Preview", + "EyeX": -15.944196701049805, + "EyeY": 11.278770446777344, + "EyeZ": 16.994457244873047, + "LookX": 20.185733795166016, + "LookY": -3.4630277156829834, + "LookZ": -20.405805587768555, + "UpX": -0.067404754459857941, + "UpY": 0.9953961968421936, + "UpZ": 0.068139612674713135 + }, + "ConnectorPins": [], + "NodeViews": [ + { + "Id": "6dcb0b06e6d147b98f817235d27b203f", + "Name": "Point.ByCoordinates", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": false, + "X": 536.564451465025, + "Y": 342.60147997032647 + }, + { + "Id": "3da18c1927f7469e8307da74ca1d2685", + "Name": "Point.ByCoordinates", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": false, + "X": 211.56445146502494, + "Y": 462.60147997032647 + }, + { + "Id": "20f4e6550d704f80b7c61775938f91ef", + "Name": "Sphere.ByCenterPointRadius", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": false, + "X": 536.564451465025, + "Y": 567.60147997032641 + }, + { + "Id": "70b7b2032a0346e2a3ef4a33b75b16d6", + "Name": "Sphere.ByCenterPointRadius", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": false, + "X": 924.564451465025, + "Y": 417.60147997032647 + }, + { + "Id": "75a6566341c940b7951ce28a90b873dc", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": false, + "X": 211.56445146502494, + "Y": 687.42897997032651 + }, + { + "Id": "c66e3330feba4c43aea0b47910584c5b", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 211.56445146502494, + "Y": 289.08397997032642 + }, + { + "Id": "fdbcec629f5046a1be1a68647d5db95a", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -42.435548534975055, + "Y": 480.08397997032642 + }, + { + "Id": "1803be16255347a8bfcd31647f522eec", + "Name": "Point.ByCoordinates", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": false, + "X": 211.56445146502494, + "Y": 846.60147997032641 + }, + { + "Id": "d1a25ced3c88415f8b4d34bec3b87714", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -42.435548534975055, + "Y": 864.08397997032648 + }, + { + "Id": "d089d566f4c747f78b026a2da6fb4f50", + "Name": "Sphere.ByCenterPointRadius", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": false, + "X": 536.564451465025, + "Y": 756.60147997032641 + }, + { + "Id": "0eb7d5f8b7304af082683d679f29cd3b", + "Name": "Geometry.IntersectAll", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1312.5644514650248, + "Y": 495.60147997032647 + }, + { + "Id": "2b117b50cc3a4861a10b902f573d4a54", + "Name": "List.Join", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": false, + "X": 925.6376298593849, + "Y": 612.96737194212653 + }, + { + "Id": "97b319c8678b4ba9935d0355a77b4c9c", + "Name": "File Path", + "IsSetAsInput": true, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1312.5644514650248, + "Y": 673.60147997032641 + }, + { + "Id": "d3be2ac8f0844986ad7b2ae9a6fa0c7b", + "Name": "Geometry.ExportToSAT", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1703.3411377062012, + "Y": 585.61589345167783 + } + ], + "Annotations": [], + "X": 84.8489843399085, + "Y": -148.87835110848562, + "Zoom": 0.62740812659763479 + } +} \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.ExportToSAT(geometry, filePath).md b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.ExportToSAT(geometry, filePath).md new file mode 100644 index 00000000000..0e7f855cc30 --- /dev/null +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.ExportToSAT(geometry, filePath).md @@ -0,0 +1,9 @@ +## In Depth +`Geometry.ExportToSAT` exports geometry from Dynamo to a SAT file type. This node is unitless; to specify a unit, use `ExportToSAT`. + +In the example below, a PolySurface from the intersection of three spheres can be exported to a SAT file once a file path is selected. + +___ +## Example File + +![Geometry.ExportToSAT](./Autodesk.DesignScript.Geometry.Geometry.ExportToSAT(geometry,%20filePath)_img.jpg) \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.ExportToSAT(geometry, filePath)_img.jpg b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.ExportToSAT(geometry, filePath)_img.jpg new file mode 100644 index 00000000000..4c32038551b Binary files /dev/null and b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.ExportToSAT(geometry, filePath)_img.jpg differ diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.FromSolidDef.dyn b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.FromSolidDef.dyn new file mode 100644 index 00000000000..72ef529ae9c --- /dev/null +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.FromSolidDef.dyn @@ -0,0 +1,140 @@ +{ + "Uuid": "46c56552-d6e5-453f-962f-e13cb5ee7a22", + "IsCustomNode": false, + "Description": "", + "Name": "Autodesk.DesignScript.Geometry.Geometry.FromSolidDef", + "ElementResolver": { + "ResolutionMap": {} + }, + "Inputs": [], + "Outputs": [], + "Nodes": [ + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "d2763e7c66b64a4da6fc57db4350dcb7", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "145928029cec47da84518850dd19d050", + "Name": "solidDefJson", + "Description": "Json string containg solid def formated geometry\n\nstring", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "1e52dd4269c945d8b7e442f86e9bc660", + "Name": "Geometry[]..[]", + "Description": "List of converted geometries", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Geometry.FromSolidDef@string", + "Replication": "Auto", + "Description": "Imports a JSON string and returns an array of imported geometries\n\nGeometry.FromSolidDef (solidDefJson: string): Geometry[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "f8c8e85f673143e78215b590a379ee76", + "NodeType": "CodeBlockNode", + "Inputs": [], + "Outputs": [ + { + "Id": "411c4ada8d2041778b7c64af5f68c926", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "[\n \"{\\\"typeid\\\": \\\"autodesk.soliddef:model-1.0.0\\\",\\\"map\\\": {\\\"geometries\\\": {\\\"insert\\\": {\\\"autodesk.soliddef:point-1.0.0\\\": {\\\"04276eca-a978-4fd7-9dd4-1376aac1fa17\\\": {\\\"typeid\\\": \\\"autodesk.soliddef:point-1.0.0\\\",\\\"autodesk.math:point3d-1.0.0\\\": {\\\"position\\\": {\\\"Float64\\\": {\\\"x\\\": -0.5,\\\"y\\\": -0.5,\\\"z\\\": -0.5}}}},\\\"34b772b3-c681-4bb3-afc0-90642d1a2697\\\": {\\\"typeid\\\": \\\"autodesk.soliddef:point-1.0.0\\\",\\\"autodesk.math:point3d-1.0.0\\\": {\\\"position\\\": {\\\"Float64\\\": {\\\"x\\\": 0.5,\\\"y\\\": -0.5,\\\"z\\\": -0.5}}}},\\\"37667204-7c64-4549-bfb0-495855da49bf\\\": {\\\"typeid\\\": \\\"autodesk.soliddef:point-1.0.0\\\",\\\"autodesk.math:point3d-1.0.0\\\": {\\\"position\\\": {\\\"Float64\\\": {\\\"x\\\": -0.5,\\\"y\\\": 0.5,\\\"z\\\": -0.5}}}},\\\"4bf8b73c-c42c-4021-9722-2cff93c664b7\\\": {\\\"typeid\\\": \\\"autodesk.soliddef:point-1.0.0\\\",\\\"autodesk.math:point3d-1.0.0\\\": {\\\"position\\\": {\\\"Float64\\\": {\\\"x\\\": 0.5,\\\"y\\\": 0.5,\\\"z\\\": 0.5}}}},\\\"9a1bd4f5-ddfd-41f3-917b-e4f02e32b1a4\\\": {\\\"typeid\\\": \\\"autodesk.soliddef:point-1.0.0\\\",\\\"autodesk.math:point3d-1.0.0\\\": {\\\"position\\\": {\\\"Float64\\\": {\\\"x\\\": 0.5,\\\"y\\\": 0.5,\\\"z\\\": -0.5}}}},\\\"d4251fdb-0dc0-4591-932e-9a91a8a921a0\\\": {\\\"typeid\\\": \\\"autodesk.soliddef:point-1.0.0\\\",\\\"autodesk.math:point3d-1.0.0\\\": {\\\"position\\\": {\\\"Float64\\\": {\\\"x\\\": -0.5,\\\"y\\\": 0.5,\\\"z\\\": 0.5}}}},\\\"d5e5cc9b-2cab-47a0-8bc0-d2b40b7a8484\\\": {\\\"typeid\\\": \\\"autodesk.soliddef:point-1.0.0\\\",\\\"autodesk.math:point3d-1.0.0\\\": {\\\"position\\\": {\\\"Float64\\\": {\\\"x\\\": 0.5,\\\"y\\\": -0.5,\\\"z\\\": 0.5}}}},\\\"f8386db2-3165-4712-80df-671c44c36b48\\\": {\\\"typeid\\\": \\\"autodesk.soliddef:point-1.0.0\\\",\\\"autodesk.math:point3d-1.0.0\\\": {\\\"position\\\": {\\\"Float64\\\": {\\\"x\\\": -0.5,\\\"y\\\": -0.5,\\\"z\\\": 0.5}}}}},\\\"autodesk.soliddef:line-1.0.0\\\": {\\\"0a393595-fed1-49e7-8191-522f0d771580\\\": {\\\"typeid\\\": \\\"autodesk.soliddef:line-1.0.0\\\",\\\"autodesk.math:vector3d-1.0.0\\\": {\\\"direction\\\": {\\\"Float64\\\": {\\\"x\\\": 1,\\\"y\\\": 0,\\\"z\\\": 0}}},\\\"autodesk.math:point3d-1.0.0\\\": {\\\"position\\\": {\\\"Float64\\\": {\\\"x\\\": 0,\\\"y\\\": -0.5,\\\"z\\\": 0.5}}},\\\"autodesk.soliddef:paramrange-1.0.0\\\": {\\\"range\\\": {\\\"Float64\\\": {\\\"low\\\": 1,\\\"high\\\": 0},\\\"enum\\\": {\\\"type\\\": 0}}}} ,\\\"1d082bf2-b71f-4a97-af35-0276554ac5ec\\\": {\\\"typeid\\\": \\\"autodesk.soliddef:line-1.0.0\\\",\\\"autodesk.math:vector3d-1.0.0\\\": {\\\"direction\\\": {\\\"Float64\\\": {\\\"x\\\": 1,\\\"y\\\": 0,\\\"z\\\": 0}}},\\\"autodesk.math:point3d-1.0.0\\\": {\\\"position\\\": {\\\"Float64\\\": {\\\"x\\\": 0,\\\"y\\\": 0.5,\\\"z\\\": -0.5}}},\\\"autodesk.soliddef:paramrange-1.0.0\\\": {\\\"range\\\": {\\\"Float64\\\": {\\\"low\\\": 1,\\\"high\\\": 0},\\\"enum\\\": {\\\"type\\\": 0}}}} ,\\\"2dd5d4bb-d8e3-4d65-9a74-0157c42b95c1\\\": {\\\"typeid\\\": \\\"autodesk.soliddef:line-1.0.0\\\",\\\"autodesk.math:vector3d-1.0.0\\\": {\\\"direction\\\": {\\\"Float64\\\": {\\\"x\\\": 0,\\\"y\\\": 0,\\\"z\\\": -1}}},\\\"autodesk.math:point3d-1.0.0\\\": {\\\"position\\\": {\\\"Float64\\\": {\\\"x\\\": -0.5,\\\"y\\\": 0.5,\\\"z\\\": 0}}},\\\"autodesk.soliddef:paramrange-1.0.0\\\": {\\\"range\\\": {\\\"Float64\\\": {\\\"low\\\": 1,\\\"high\\\": 0},\\\"enum\\\": {\\\"type\\\": 0}}}} ,\\\"4851f344-8fca-4d05-9520-5ee0363e12f0\\\": {\\\"typeid\\\": \\\"autodesk.soliddef:line-1.0.0\\\",\\\"autodesk.math:vector3d-1.0.0\\\": {\\\"direction\\\": {\\\"Float64\\\": {\\\"x\\\": -1,\\\"y\\\": 0,\\\"z\\\": 0}}},\\\"autodesk.math:point3d-1.0.0\\\": {\\\"position\\\": {\\\"Float64\\\": {\\\"x\\\": 0,\\\"y\\\": 0.5,\\\"z\\\": 0.5}}},\\\"autodesk.soliddef:paramrange-1.0.0\\\": {\\\"range\\\": {\\\"Float64\\\": {\\\"low\\\": 1,\\\"high\\\": 0},\\\"enum\\\": {\\\"type\\\": 0}}}} ,\\\"4c0aa19f-ef23-4b73-9286-d81522eb3a36\\\": {\\\"typeid\\\": \\\"autodesk.soliddef:line-1.0.0\\\",\\\"autodesk.math:vector3d-1.0.0\\\": {\\\"direction\\\": {\\\"Float64\\\": {\\\"x\\\": 0,\\\"y\\\": 1,\\\"z\\\": 0}}},\\\"autodesk.math:point3d-1.0.0\\\": {\\\"position\\\": {\\\"Float64\\\": {\\\"x\\\": 0.5,\\\"y\\\": 0,\\\"z\\\": 0.5}}},\\\"autodesk.soliddef:paramrange-1.0.0\\\": {\\\"range\\\": {\\\"Float64\\\": {\\\"low\\\": 1,\\\"high\\\": 0},\\\"enum\\\": {\\\"type\\\": 0}}}} ,\\\"522fc337-eb0c-4e24-84b1-1c497c8c437a\\\": {\\\"typeid\\\": \\\"autodesk.soliddef:line-1.0.0\\\",\\\"autodesk.math:vector3d-1.0.0\\\": {\\\"direction\\\": {\\\"Float64\\\": {\\\"x\\\": 0,\\\"y\\\": -1,\\\"z\\\": 0}}},\\\"autodesk.math:point3d-1.0.0\\\": {\\\"position\\\": {\\\"Float64\\\": {\\\"x\\\": 0.5,\\\"y\\\": 0,\\\"z\\\": -0.5}}},\\\"autodesk.soliddef:paramrange-1.0.0\\\": {\\\"range\\\": {\\\"Float64\\\": {\\\"low\\\": 1,\\\"high\\\": 0},\\\"enum\\\": {\\\"type\\\": 0}}}} ,\\\"60735f56-7f22-48ba-81f3-55f4e9ab76eb\\\": {\\\"typeid\\\": \\\"autodesk.soliddef:line-1.0.0\\\",\\\"autodesk.math:vector3d-1.0.0\\\": {\\\"direction\\\": {\\\"Float64\\\": {\\\"x\\\": 0,\\\"y\\\": 1,\\\"z\\\": 0}}},\\\"autodesk.math:point3d-1.0.0\\\": {\\\"position\\\": {\\\"Float64\\\": {\\\"x\\\": -0.5,\\\"y\\\": 0,\\\"z\\\": -0.5}}},\\\"autodesk.soliddef:paramrange-1.0.0\\\": {\\\"range\\\": {\\\"Float64\\\": {\\\"low\\\": 1,\\\"high\\\": 0},\\\"enum\\\": {\\\"type\\\": 0}}}} ,\\\"9026b399-ddd1-4cfa-a855-26db55584868\\\": {\\\"typeid\\\": \\\"autodesk.soliddef:line-1.0.0\\\",\\\"autodesk.math:vector3d-1.0.0\\\": {\\\"direction\\\": {\\\"Float64\\\": {\\\"x\\\": 0,\\\"y\\\": 0,\\\"z\\\": -1}}},\\\"autodesk.math:point3d-1.0.0\\\": {\\\"position\\\": {\\\"Float64\\\": {\\\"x\\\": -0.5,\\\"y\\\": -0.5,\\\"z\\\": 0}}},\\\"autodesk.soliddef:paramrange-1.0.0\\\": {\\\"range\\\": {\\\"Float64\\\": {\\\"low\\\": 1,\\\"high\\\": 0},\\\"enum\\\": {\\\"type\\\": 0}}}} ,\\\"afd5941b-e5a0-47f5-9a14-3a0522b06e40\\\": {\\\"typeid\\\": \\\"autodesk.soliddef:line-1.0.0\\\",\\\"autodesk.math:vector3d-1.0.0\\\": {\\\"direction\\\": {\\\"Float64\\\": {\\\"x\\\": -1,\\\"y\\\": 0,\\\"z\\\": 0}}},\\\"autodesk.math:point3d-1.0.0\\\": {\\\"position\\\": {\\\"Float64\\\": {\\\"x\\\": 0,\\\"y\\\": -0.5,\\\"z\\\": -0.5}}},\\\"autodesk.soliddef:paramrange-1.0.0\\\": {\\\"range\\\": {\\\"Float64\\\": {\\\"low\\\": 1,\\\"high\\\": 0},\\\"enum\\\": {\\\"type\\\": 0}}}} ,\\\"c951e0f4-92fb-4b81-87f1-97b6138c3f52\\\": {\\\"typeid\\\": \\\"autodesk.soliddef:line-1.0.0\\\",\\\"autodesk.math:vector3d-1.0.0\\\": {\\\"direction\\\": {\\\"Float64\\\": {\\\"x\\\": 0,\\\"y\\\": 0,\\\"z\\\": -1}}},\\\"autodesk.math:point3d-1.0.0\\\": {\\\"position\\\": {\\\"Float64\\\": {\\\"x\\\": 0.5,\\\"y\\\": 0.5,\\\"z\\\": 0}}},\\\"autodesk.soliddef:paramrange-1.0.0\\\": {\\\"range\\\": {\\\"Float64\\\": {\\\"low\\\": 1,\\\"high\\\": 0},\\\"enum\\\": {\\\"type\\\": 0}}}} ,\\\"ce800039-1faa-49ea-bd05-4d6d742961fb\\\": {\\\"typeid\\\": \\\"autodesk.soliddef:line-1.0.0\\\",\\\"autodesk.math:vector3d-1.0.0\\\": {\\\"direction\\\": {\\\"Float64\\\": {\\\"x\\\": 0,\\\"y\\\": -1,\\\"z\\\": 0}}},\\\"autodesk.math:point3d-1.0.0\\\": {\\\"position\\\": {\\\"Float64\\\": {\\\"x\\\": -0.5,\\\"y\\\": 0,\\\"z\\\": 0.5}}},\\\"autodesk.soliddef:paramrange-1.0.0\\\": {\\\"range\\\": {\\\"Float64\\\": {\\\"low\\\": 1,\\\"high\\\": 0},\\\"enum\\\": {\\\"type\\\": 0}}}} ,\\\"f60c72d2-e466-4a33-94d4-b2c15d070ad4\\\": {\\\"typeid\\\": \\\"autodesk.soliddef:line-1.0.0\\\",\\\"autodesk.math:vector3d-1.0.0\\\": {\\\"direction\\\": {\\\"Float64\\\": {\\\"x\\\": 0,\\\"y\\\": 0,\\\"z\\\": -1}}},\\\"autodesk.math:point3d-1.0.0\\\": {\\\"position\\\": {\\\"Float64\\\": {\\\"x\\\": 0.5,\\\"y\\\": -0.5,\\\"z\\\": 0}}},\\\"autodesk.soliddef:paramrange-1.0.0\\\": {\\\"range\\\": {\\\"Float64\\\": {\\\"low\\\": 1,\\\"high\\\": 0},\\\"enum\\\": {\\\"type\\\": 0}}}} },\\\"autodesk.soliddef:plane-1.0.0\\\": {\\\"053ce60d-ded6-4b60-8798-0ba891d58533\\\": {\\\"typeid\\\": \\\"autodesk.soliddef:plane-1.0.0\\\",\\\"autodesk.math:vector3d-1.0.0\\\": {\\\"normal\\\": {\\\"Float64\\\": {\\\"x\\\": 0,\\\"y\\\": 0,\\\"z\\\": 1}},\\\"uAxis\\\": {\\\"Float64\\\": {\\\"x\\\": 1,\\\"y\\\": 0,\\\"z\\\": 0}}},\\\"autodesk.math:point3d-1.0.0\\\": {\\\"origin\\\": {\\\"Float64\\\": {\\\"x\\\": 0,\\\"y\\\": 0,\\\"z\\\": 0.5}}},\\\"autodesk.soliddef:paramrange-1.0.0\\\": {\\\"uRange\\\": {\\\"Float64\\\": {\\\"low\\\": -0.5,\\\"high\\\": 0.5},\\\"enum\\\": {\\\"type\\\": 1}},\\\"vRange\\\": {\\\"Float64\\\": {\\\"low\\\": -0.5,\\\"high\\\": 0.5},\\\"enum\\\": {\\\"type\\\": 1}}}} ,\\\"9a34fdef-1928-4ffa-81ec-73aa8b16210a\\\": {\\\"typeid\\\": \\\"autodesk.soliddef:plane-1.0.0\\\",\\\"autodesk.math:vector3d-1.0.0\\\": {\\\"normal\\\": {\\\"Float64\\\": {\\\"x\\\": -1,\\\"y\\\": 0,\\\"z\\\": 0}},\\\"uAxis\\\": {\\\"Float64\\\": {\\\"x\\\": 0,\\\"y\\\": -0,\\\"z\\\": 1}}},\\\"autodesk.math:point3d-1.0.0\\\": {\\\"origin\\\": {\\\"Float64\\\": {\\\"x\\\": 0.5,\\\"y\\\": 0,\\\"z\\\": 0}}},\\\"autodesk.soliddef:paramrange-1.0.0\\\": {\\\"uRange\\\": {\\\"Float64\\\": {\\\"low\\\": -0.5,\\\"high\\\": 0.5},\\\"enum\\\": {\\\"type\\\": 1}},\\\"vRange\\\": {\\\"Float64\\\": {\\\"low\\\": -0.5,\\\"high\\\": 0.5},\\\"enum\\\": {\\\"type\\\": 1}}}} ,\\\"9fd93a20-145d-47fe-9efd-6c38e0b083d9\\\": {\\\"typeid\\\": \\\"autodesk.soliddef:plane-1.0.0\\\",\\\"autodesk.math:vector3d-1.0.0\\\": {\\\"normal\\\": {\\\"Float64\\\": {\\\"x\\\": 0,\\\"y\\\": 0,\\\"z\\\": 1}},\\\"uAxis\\\": {\\\"Float64\\\": {\\\"x\\\": 1,\\\"y\\\": 0,\\\"z\\\": 0}}},\\\"autodesk.math:point3d-1.0.0\\\": {\\\"origin\\\": {\\\"Float64\\\": {\\\"x\\\": 0,\\\"y\\\": 0,\\\"z\\\": -0.5}}},\\\"autodesk.soliddef:paramrange-1.0.0\\\": {\\\"uRange\\\": {\\\"Float64\\\": {\\\"low\\\": -0.5,\\\"high\\\": 0.5},\\\"enum\\\": {\\\"type\\\": 1}},\\\"vRange\\\": {\\\"Float64\\\": {\\\"low\\\": -0.5,\\\"high\\\": 0.5},\\\"enum\\\": {\\\"type\\\": 1}}}} ,\\\"cbaec1a4-769d-4190-a7a0-bece7df993c2\\\": {\\\"typeid\\\": \\\"autodesk.soliddef:plane-1.0.0\\\",\\\"autodesk.math:vector3d-1.0.0\\\": {\\\"normal\\\": {\\\"Float64\\\": {\\\"x\\\": 0,\\\"y\\\": -1,\\\"z\\\": 0}},\\\"uAxis\\\": {\\\"Float64\\\": {\\\"x\\\": 0,\\\"y\\\": 0,\\\"z\\\": -1}}},\\\"autodesk.math:point3d-1.0.0\\\": {\\\"origin\\\": {\\\"Float64\\\": {\\\"x\\\": 0,\\\"y\\\": 0.5,\\\"z\\\": 0}}},\\\"autodesk.soliddef:paramrange-1.0.0\\\": {\\\"uRange\\\": {\\\"Float64\\\": {\\\"low\\\": -0.5,\\\"high\\\": 0.5},\\\"enum\\\": {\\\"type\\\": 1}},\\\"vRange\\\": {\\\"Float64\\\": {\\\"low\\\": -0.5,\\\"high\\\": 0.5},\\\"enum\\\": {\\\"type\\\": 1}}}} ,\\\"e892fce7-8414-4735-8a7e-21083aafd09e\\\": {\\\"typeid\\\": \\\"autodesk.soliddef:plane-1.0.0\\\",\\\"autodesk.math:vector3d-1.0.0\\\": {\\\"normal\\\": {\\\"Float64\\\": {\\\"x\\\": 1,\\\"y\\\": 0,\\\"z\\\": 0}},\\\"uAxis\\\": {\\\"Float64\\\": {\\\"x\\\": 0,\\\"y\\\": 0,\\\"z\\\": -1}}},\\\"autodesk.math:point3d-1.0.0\\\": {\\\"origin\\\": {\\\"Float64\\\": {\\\"x\\\": -0.5,\\\"y\\\": 0,\\\"z\\\": 0}}},\\\"autodesk.soliddef:paramrange-1.0.0\\\": {\\\"uRange\\\": {\\\"Float64\\\": {\\\"low\\\": -0.5,\\\"high\\\": 0.5},\\\"enum\\\": {\\\"type\\\": 1}},\\\"vRange\\\": {\\\"Float64\\\": {\\\"low\\\": -0.5,\\\"high\\\": 0.5},\\\"enum\\\": {\\\"type\\\": 1}}}} ,\\\"f4725d61-5fc9-4c6e-8c24-c4ebfdcbb681\\\": {\\\"typeid\\\": \\\"autodesk.soliddef:plane-1.0.0\\\",\\\"autodesk.math:vector3d-1.0.0\\\": {\\\"normal\\\": {\\\"Float64\\\": {\\\"x\\\": 0,\\\"y\\\": 1,\\\"z\\\": -0}},\\\"uAxis\\\": {\\\"Float64\\\": {\\\"x\\\": -0,\\\"y\\\": 0,\\\"z\\\": 1}}},\\\"autodesk.math:point3d-1.0.0\\\": {\\\"origin\\\": {\\\"Float64\\\": {\\\"x\\\": 0,\\\"y\\\": -0.5,\\\"z\\\": 0}}},\\\"autodesk.soliddef:paramrange-1.0.0\\\": {\\\"uRange\\\": {\\\"Float64\\\": {\\\"low\\\": -0.5,\\\"high\\\": 0.5},\\\"enum\\\": {\\\"type\\\": 1}},\\\"vRange\\\": {\\\"Float64\\\": {\\\"low\\\": -0.5,\\\"high\\\": 0.5},\\\"enum\\\": {\\\"type\\\": 1}}}} }}}},\\\"map\\\": {\\\"topologies\\\": {\\\"insert\\\": {\\\"autodesk.soliddef:body-1.0.0\\\": {\\\"afa7c7ba-7546-43fe-a1ca-410c7672ca0a\\\": {\\\"typeid\\\": \\\"autodesk.soliddef:body-1.0.0\\\",\\\"array\\\": {\\\"lumps\\\": {\\\"insert\\\": [[0,[\\\"1bbc5aec-1efd-482b-9a38-59a34296470a\\\"]]]}}} },\\\"autodesk.soliddef:lump-1.0.0\\\": {\\\"1bbc5aec-1efd-482b-9a38-59a34296470a\\\": {\\\"typeid\\\": \\\"autodesk.soliddef:lump-1.0.0\\\",\\\"array\\\": {\\\"shells\\\": {\\\"insert\\\": [[0,[\\\"809c5879-81c4-433d-9bff-aa3428412ec7\\\"]]]}}} },\\\"autodesk.soliddef:shell-1.0.0\\\": {\\\"809c5879-81c4-433d-9bff-aa3428412ec7\\\": {\\\"typeid\\\": \\\"autodesk.soliddef:shell-1.0.0\\\",\\\"array\\\": {\\\"faces\\\": {\\\"insert\\\": [[0,[\\\"f3a4faf1-51ff-4083-948f-08a2cf70f173\\\",\\\"f5246c0b-37da-410a-89c2-8bd79ed2b8a6\\\",\\\"79971f5c-41e0-4940-bd42-48f5340520f3\\\",\\\"9334d5db-5698-42df-89b5-7a7be1a00a64\\\",\\\"555c744b-d571-453c-a8f4-450fcdba5238\\\",\\\"cfae10c1-8a57-426b-85a1-431c93c3f015\\\"]]]}}} },\\\"autodesk.soliddef:face-1.0.0\\\": {\\\"555c744b-d571-453c-a8f4-450fcdba5238\\\": {\\\"typeid\\\": \\\"autodesk.soliddef:face-1.0.0\\\",\\\"Bool\\\": {\\\"reversed\\\": true},\\\"String\\\": {\\\"geometry\\\": \\\"cbaec1a4-769d-4190-a7a0-bece7df993c2\\\"},\\\"array\\\": {\\\"loops\\\": {\\\"insert\\\": [[0,[\\\"ee90ca83-464b-4b24-a2e8-444932f41f02\\\"]]]}}} ,\\\"79971f5c-41e0-4940-bd42-48f5340520f3\\\": {\\\"typeid\\\": \\\"autodesk.soliddef:face-1.0.0\\\",\\\"Bool\\\": {\\\"reversed\\\": true},\\\"String\\\": {\\\"geometry\\\": \\\"f4725d61-5fc9-4c6e-8c24-c4ebfdcbb681\\\"},\\\"array\\\": {\\\"loops\\\": {\\\"insert\\\": [[0,[\\\"c6aca7d4-2753-4649-84c0-d003a5a34f41\\\"]]]}}} ,\\\"9334d5db-5698-42df-89b5-7a7be1a00a64\\\": {\\\"typeid\\\": \\\"autodesk.soliddef:face-1.0.0\\\",\\\"Bool\\\": {\\\"reversed\\\": true},\\\"String\\\": {\\\"geometry\\\": \\\"e892fce7-8414-4735-8a7e-21083aafd09e\\\"},\\\"array\\\": {\\\"loops\\\": {\\\"insert\\\": [[0,[\\\"839aa128-815a-4bab-91f2-a7fe05b7d8d8\\\"]]]}}} ,\\\"cfae10c1-8a57-426b-85a1-431c93c3f015\\\": {\\\"typeid\\\": \\\"autodesk.soliddef:face-1.0.0\\\",\\\"Bool\\\": {\\\"reversed\\\": true},\\\"String\\\": {\\\"geometry\\\": \\\"9a34fdef-1928-4ffa-81ec-73aa8b16210a\\\"},\\\"array\\\": {\\\"loops\\\": {\\\"insert\\\": [[0,[\\\"1f49a32b-b673-414c-aa9b-e5bd57189aec\\\"]]]}}} ,\\\"f3a4faf1-51ff-4083-948f-08a2cf70f173\\\": {\\\"typeid\\\": \\\"autodesk.soliddef:face-1.0.0\\\",\\\"Bool\\\": {\\\"reversed\\\": false},\\\"String\\\": {\\\"geometry\\\": \\\"053ce60d-ded6-4b60-8798-0ba891d58533\\\"},\\\"array\\\": {\\\"loops\\\": {\\\"insert\\\": [[0,[\\\"1b0faf21-c79c-4523-ba62-c432e5e87ef3\\\"]]]}}} ,\\\"f5246c0b-37da-410a-89c2-8bd79ed2b8a6\\\": {\\\"typeid\\\": \\\"autodesk.soliddef:face-1.0.0\\\",\\\"Bool\\\": {\\\"reversed\\\": true},\\\"String\\\": {\\\"geometry\\\": \\\"9fd93a20-145d-47fe-9efd-6c38e0b083d9\\\"},\\\"array\\\": {\\\"loops\\\": {\\\"insert\\\": [[0,[\\\"32f288ab-a175-44d9-9811-45cd9f355dcb\\\"]]]}}} },\\\"autodesk.soliddef:loop-1.0.0\\\": {\\\"1b0faf21-c79c-4523-ba62-c432e5e87ef3\\\": {\\\"typeid\\\": \\\"autodesk.soliddef:loop-1.0.0\\\",\\\"array\\\": {\\\"coedges\\\": {\\\"insert\\\": [[0,[\\\"8f6e2a63-a852-4b5e-a0a5-fbdc5621e888\\\",\\\"790a2cc8-d8ae-408d-9673-dcef9707b780\\\",\\\"7cf680bb-53ff-46c2-99ee-81584130261a\\\",\\\"18dbaa56-5608-4d7a-81be-bd7daf2aab8e\\\"]]]}}} ,\\\"1f49a32b-b673-414c-aa9b-e5bd57189aec\\\": {\\\"typeid\\\": \\\"autodesk.soliddef:loop-1.0.0\\\",\\\"array\\\": {\\\"coedges\\\": {\\\"insert\\\": [[0,[\\\"b85d97fe-5831-470f-bad3-e421b09c5145\\\",\\\"a5ce4ec3-1679-4d2b-85c6-3c1c5e509259\\\",\\\"70bb5cb1-239d-4891-a320-fc4ea30b3181\\\",\\\"aa3874bf-e780-4b19-af6c-cabd9fe66d67\\\"]]]}}} ,\\\"32f288ab-a175-44d9-9811-45cd9f355dcb\\\": {\\\"typeid\\\": \\\"autodesk.soliddef:loop-1.0.0\\\",\\\"array\\\": {\\\"coedges\\\": {\\\"insert\\\": [[0,[\\\"c1875340-a595-480a-8d42-6edc8c57eedc\\\",\\\"34a0b0e5-cea0-48aa-9fb4-1b322c1f10d5\\\",\\\"0c5d1468-752d-48e0-a287-106414f843c9\\\",\\\"118c7d27-514f-42af-a19e-db06f0aab09f\\\"]]]}}} ,\\\"839aa128-815a-4bab-91f2-a7fe05b7d8d8\\\": {\\\"typeid\\\": \\\"autodesk.soliddef:loop-1.0.0\\\",\\\"array\\\": {\\\"coedges\\\": {\\\"insert\\\": [[0,[\\\"16f0599a-276e-47c2-962d-7571a5e43d67\\\",\\\"2670d844-05b0-4049-91ce-63abd0cb9170\\\",\\\"6ffca90e-4cd5-4eb6-a53f-b70aa641b56d\\\",\\\"4a1fd406-ad36-4cad-8eee-a8138129630e\\\"]]]}}} ,\\\"c6aca7d4-2753-4649-84c0-d003a5a34f41\\\": {\\\"typeid\\\": \\\"autodesk.soliddef:loop-1.0.0\\\",\\\"array\\\": {\\\"coedges\\\": {\\\"insert\\\": [[0,[\\\"e785e3fb-9395-47b7-a6d2-9f54ce130236\\\",\\\"672e769f-5b42-4037-85e8-f9b729263c63\\\",\\\"9b9e960a-f626-4416-b1a4-0b9015092308\\\",\\\"5b5e286b-5730-435e-805e-6913c9022c74\\\"]]]}}} ,\\\"ee90ca83-464b-4b24-a2e8-444932f41f02\\\": {\\\"typeid\\\": \\\"autodesk.soliddef:loop-1.0.0\\\",\\\"array\\\": {\\\"coedges\\\": {\\\"insert\\\": [[0,[\\\"e10d87c3-78fc-4635-8e53-1562ab175bf8\\\",\\\"dc3dfcab-415c-43c0-9335-71d0951d5fc5\\\",\\\"48f7c932-4c4b-4379-9e99-35ffa28506c6\\\",\\\"bc965a1b-25fe-41e4-a0ab-3e4f9df2ac8f\\\"]]]}}} },\\\"autodesk.soliddef:coedge-1.0.0\\\": {\\\"0c5d1468-752d-48e0-a287-106414f843c9\\\": {\\\"typeid\\\": \\\"autodesk.soliddef:coedge-1.0.0\\\",\\\"Bool\\\": {\\\"reversed\\\": false},\\\"String\\\": {\\\"edge\\\": \\\"a023bdfe-8c46-4547-bb72-cde1ad4446a2\\\",\\\"partner\\\": \\\"2670d844-05b0-4049-91ce-63abd0cb9170\\\"}} ,\\\"118c7d27-514f-42af-a19e-db06f0aab09f\\\": {\\\"typeid\\\": \\\"autodesk.soliddef:coedge-1.0.0\\\",\\\"Bool\\\": {\\\"reversed\\\": false},\\\"String\\\": {\\\"edge\\\": \\\"1a929176-b88c-4776-be64-edebd94cc1c9\\\",\\\"partner\\\": \\\"dc3dfcab-415c-43c0-9335-71d0951d5fc5\\\"}} ,\\\"16f0599a-276e-47c2-962d-7571a5e43d67\\\": {\\\"typeid\\\": \\\"autodesk.soliddef:coedge-1.0.0\\\",\\\"Bool\\\": {\\\"reversed\\\": false},\\\"String\\\": {\\\"edge\\\": \\\"dc2a4337-38ae-4c26-8fdc-c3e2dcabed1a\\\",\\\"partner\\\": \\\"48f7c932-4c4b-4379-9e99-35ffa28506c6\\\"}} ,\\\"18dbaa56-5608-4d7a-81be-bd7daf2aab8e\\\": {\\\"typeid\\\": \\\"autodesk.soliddef:coedge-1.0.0\\\",\\\"Bool\\\": {\\\"reversed\\\": false},\\\"String\\\": {\\\"edge\\\": \\\"c9d2ad67-dd0e-4da8-9e20-537ee6c79f65\\\",\\\"partner\\\": \\\"5b5e286b-5730-435e-805e-6913c9022c74\\\"}} ,\\\"2670d844-05b0-4049-91ce-63abd0cb9170\\\": {\\\"typeid\\\": \\\"autodesk.soliddef:coedge-1.0.0\\\",\\\"Bool\\\": {\\\"reversed\\\": true},\\\"String\\\": {\\\"edge\\\": \\\"a023bdfe-8c46-4547-bb72-cde1ad4446a2\\\",\\\"partner\\\": \\\"0c5d1468-752d-48e0-a287-106414f843c9\\\"}} ,\\\"34a0b0e5-cea0-48aa-9fb4-1b322c1f10d5\\\": {\\\"typeid\\\": \\\"autodesk.soliddef:coedge-1.0.0\\\",\\\"Bool\\\": {\\\"reversed\\\": false},\\\"String\\\": {\\\"edge\\\": \\\"0fd15f64-0744-4b59-b32c-128085239188\\\",\\\"partner\\\": \\\"672e769f-5b42-4037-85e8-f9b729263c63\\\"}} ,\\\"48f7c932-4c4b-4379-9e99-35ffa28506c6\\\": {\\\"typeid\\\": \\\"autodesk.soliddef:coedge-1.0.0\\\",\\\"Bool\\\": {\\\"reversed\\\": true},\\\"String\\\": {\\\"edge\\\": \\\"dc2a4337-38ae-4c26-8fdc-c3e2dcabed1a\\\",\\\"partner\\\": \\\"16f0599a-276e-47c2-962d-7571a5e43d67\\\"}} ,\\\"4a1fd406-ad36-4cad-8eee-a8138129630e\\\": {\\\"typeid\\\": \\\"autodesk.soliddef:coedge-1.0.0\\\",\\\"Bool\\\": {\\\"reversed\\\": true},\\\"String\\\": {\\\"edge\\\": \\\"cf90735c-1eea-4fe8-a53a-947399d06c23\\\",\\\"partner\\\": \\\"7cf680bb-53ff-46c2-99ee-81584130261a\\\"}} ,\\\"5b5e286b-5730-435e-805e-6913c9022c74\\\": {\\\"typeid\\\": \\\"autodesk.soliddef:coedge-1.0.0\\\",\\\"Bool\\\": {\\\"reversed\\\": true},\\\"String\\\": {\\\"edge\\\": \\\"c9d2ad67-dd0e-4da8-9e20-537ee6c79f65\\\",\\\"partner\\\": \\\"18dbaa56-5608-4d7a-81be-bd7daf2aab8e\\\"}} ,\\\"672e769f-5b42-4037-85e8-f9b729263c63\\\": {\\\"typeid\\\": \\\"autodesk.soliddef:coedge-1.0.0\\\",\\\"Bool\\\": {\\\"reversed\\\": true},\\\"String\\\": {\\\"edge\\\": \\\"0fd15f64-0744-4b59-b32c-128085239188\\\",\\\"partner\\\": \\\"34a0b0e5-cea0-48aa-9fb4-1b322c1f10d5\\\"}} ,\\\"6ffca90e-4cd5-4eb6-a53f-b70aa641b56d\\\": {\\\"typeid\\\": \\\"autodesk.soliddef:coedge-1.0.0\\\",\\\"Bool\\\": {\\\"reversed\\\": true},\\\"String\\\": {\\\"edge\\\": \\\"cde6b24a-81de-4d3f-876d-d7c06969ebd5\\\",\\\"partner\\\": \\\"e785e3fb-9395-47b7-a6d2-9f54ce130236\\\"}} ,\\\"70bb5cb1-239d-4891-a320-fc4ea30b3181\\\": {\\\"typeid\\\": \\\"autodesk.soliddef:coedge-1.0.0\\\",\\\"Bool\\\": {\\\"reversed\\\": true},\\\"String\\\": {\\\"edge\\\": \\\"6c630455-5cd9-41a0-9e31-ea71ab600ef4\\\",\\\"partner\\\": \\\"e10d87c3-78fc-4635-8e53-1562ab175bf8\\\"}} ,\\\"790a2cc8-d8ae-408d-9673-dcef9707b780\\\": {\\\"typeid\\\": \\\"autodesk.soliddef:coedge-1.0.0\\\",\\\"Bool\\\": {\\\"reversed\\\": false},\\\"String\\\": {\\\"edge\\\": \\\"ac11614b-34ac-4140-ae9f-903922dd28b0\\\",\\\"partner\\\": \\\"bc965a1b-25fe-41e4-a0ab-3e4f9df2ac8f\\\"}} ,\\\"7cf680bb-53ff-46c2-99ee-81584130261a\\\": {\\\"typeid\\\": \\\"autodesk.soliddef:coedge-1.0.0\\\",\\\"Bool\\\": {\\\"reversed\\\": false},\\\"String\\\": {\\\"edge\\\": \\\"cf90735c-1eea-4fe8-a53a-947399d06c23\\\",\\\"partner\\\": \\\"4a1fd406-ad36-4cad-8eee-a8138129630e\\\"}} ,\\\"8f6e2a63-a852-4b5e-a0a5-fbdc5621e888\\\": {\\\"typeid\\\": \\\"autodesk.soliddef:coedge-1.0.0\\\",\\\"Bool\\\": {\\\"reversed\\\": false},\\\"String\\\": {\\\"edge\\\": \\\"27f7575b-9c5e-4a69-8b06-3550777ff27b\\\",\\\"partner\\\": \\\"aa3874bf-e780-4b19-af6c-cabd9fe66d67\\\"}} ,\\\"9b9e960a-f626-4416-b1a4-0b9015092308\\\": {\\\"typeid\\\": \\\"autodesk.soliddef:coedge-1.0.0\\\",\\\"Bool\\\": {\\\"reversed\\\": true},\\\"String\\\": {\\\"edge\\\": \\\"6b0a7842-3acd-415a-9fa5-3a5c4be1e8f4\\\",\\\"partner\\\": \\\"b85d97fe-5831-470f-bad3-e421b09c5145\\\"}} ,\\\"a5ce4ec3-1679-4d2b-85c6-3c1c5e509259\\\": {\\\"typeid\\\": \\\"autodesk.soliddef:coedge-1.0.0\\\",\\\"Bool\\\": {\\\"reversed\\\": true},\\\"String\\\": {\\\"edge\\\": \\\"6068022f-e563-4fdf-a392-8ade7d3a234c\\\",\\\"partner\\\": \\\"c1875340-a595-480a-8d42-6edc8c57eedc\\\"}} ,\\\"aa3874bf-e780-4b19-af6c-cabd9fe66d67\\\": {\\\"typeid\\\": \\\"autodesk.soliddef:coedge-1.0.0\\\",\\\"Bool\\\": {\\\"reversed\\\": true},\\\"String\\\": {\\\"edge\\\": \\\"27f7575b-9c5e-4a69-8b06-3550777ff27b\\\",\\\"partner\\\": \\\"8f6e2a63-a852-4b5e-a0a5-fbdc5621e888\\\"}} ,\\\"b85d97fe-5831-470f-bad3-e421b09c5145\\\": {\\\"typeid\\\": \\\"autodesk.soliddef:coedge-1.0.0\\\",\\\"Bool\\\": {\\\"reversed\\\": false},\\\"String\\\": {\\\"edge\\\": \\\"6b0a7842-3acd-415a-9fa5-3a5c4be1e8f4\\\",\\\"partner\\\": \\\"9b9e960a-f626-4416-b1a4-0b9015092308\\\"}} ,\\\"bc965a1b-25fe-41e4-a0ab-3e4f9df2ac8f\\\": {\\\"typeid\\\": \\\"autodesk.soliddef:coedge-1.0.0\\\",\\\"Bool\\\": {\\\"reversed\\\": true},\\\"String\\\": {\\\"edge\\\": \\\"ac11614b-34ac-4140-ae9f-903922dd28b0\\\",\\\"partner\\\": \\\"790a2cc8-d8ae-408d-9673-dcef9707b780\\\"}} ,\\\"c1875340-a595-480a-8d42-6edc8c57eedc\\\": {\\\"typeid\\\": \\\"autodesk.soliddef:coedge-1.0.0\\\",\\\"Bool\\\": {\\\"reversed\\\": false},\\\"String\\\": {\\\"edge\\\": \\\"6068022f-e563-4fdf-a392-8ade7d3a234c\\\",\\\"partner\\\": \\\"a5ce4ec3-1679-4d2b-85c6-3c1c5e509259\\\"}} ,\\\"dc3dfcab-415c-43c0-9335-71d0951d5fc5\\\": {\\\"typeid\\\": \\\"autodesk.soliddef:coedge-1.0.0\\\",\\\"Bool\\\": {\\\"reversed\\\": true},\\\"String\\\": {\\\"edge\\\": \\\"1a929176-b88c-4776-be64-edebd94cc1c9\\\",\\\"partner\\\": \\\"118c7d27-514f-42af-a19e-db06f0aab09f\\\"}} ,\\\"e10d87c3-78fc-4635-8e53-1562ab175bf8\\\": {\\\"typeid\\\": \\\"autodesk.soliddef:coedge-1.0.0\\\",\\\"Bool\\\": {\\\"reversed\\\": false},\\\"String\\\": {\\\"edge\\\": \\\"6c630455-5cd9-41a0-9e31-ea71ab600ef4\\\",\\\"partner\\\": \\\"70bb5cb1-239d-4891-a320-fc4ea30b3181\\\"}} ,\\\"e785e3fb-9395-47b7-a6d2-9f54ce130236\\\": {\\\"typeid\\\": \\\"autodesk.soliddef:coedge-1.0.0\\\",\\\"Bool\\\": {\\\"reversed\\\": false},\\\"String\\\": {\\\"edge\\\": \\\"cde6b24a-81de-4d3f-876d-d7c06969ebd5\\\",\\\"partner\\\": \\\"6ffca90e-4cd5-4eb6-a53f-b70aa641b56d\\\"}} },\\\"autodesk.soliddef:edge-1.0.0\\\": {\\\"0fd15f64-0744-4b59-b32c-128085239188\\\": {\\\"typeid\\\": \\\"autodesk.soliddef:edge-1.0.0\\\",\\\"Float64\\\": {\\\"precision\\\": 0},\\\"Bool\\\": {\\\"reversed\\\": false},\\\"String\\\": {\\\"geometry\\\": \\\"afd5941b-e5a0-47f5-9a14-3a0522b06e40\\\",\\\"vertex0\\\": \\\"224d7735-a0ef-4e44-a040-542be9614a1e\\\",\\\"vertex1\\\": \\\"6b17fb6c-9508-4dea-9455-db9f014259a1\\\"},\\\"autodesk.soliddef:paramrange-1.0.0\\\": {\\\"range\\\": {\\\"Float64\\\": {\\\"low\\\": -0.5,\\\"high\\\": 0.5},\\\"enum\\\": {\\\"type\\\": 1}}}} ,\\\"1a929176-b88c-4776-be64-edebd94cc1c9\\\": {\\\"typeid\\\": \\\"autodesk.soliddef:edge-1.0.0\\\",\\\"Float64\\\": {\\\"precision\\\": 0},\\\"Bool\\\": {\\\"reversed\\\": false},\\\"String\\\": {\\\"geometry\\\": \\\"1d082bf2-b71f-4a97-af35-0276554ac5ec\\\",\\\"vertex0\\\": \\\"780d32c7-ae3b-4ee2-9bc9-b3e0a0ed0ac3\\\",\\\"vertex1\\\": \\\"65a3b9e7-88c1-4750-a6e4-554775c2cc06\\\"},\\\"autodesk.soliddef:paramrange-1.0.0\\\": {\\\"range\\\": {\\\"Float64\\\": {\\\"low\\\": -0.5,\\\"high\\\": 0.5},\\\"enum\\\": {\\\"type\\\": 1}}}} ,\\\"27f7575b-9c5e-4a69-8b06-3550777ff27b\\\": {\\\"typeid\\\": \\\"autodesk.soliddef:edge-1.0.0\\\",\\\"Float64\\\": {\\\"precision\\\": 0},\\\"Bool\\\": {\\\"reversed\\\": false},\\\"String\\\": {\\\"geometry\\\": \\\"4c0aa19f-ef23-4b73-9286-d81522eb3a36\\\",\\\"vertex0\\\": \\\"93a81101-b5f8-4bc7-931d-c3489cceb47d\\\",\\\"vertex1\\\": \\\"c99a2679-daf5-4271-8b8e-642e3b4b94aa\\\"},\\\"autodesk.soliddef:paramrange-1.0.0\\\": {\\\"range\\\": {\\\"Float64\\\": {\\\"low\\\": -0.5,\\\"high\\\": 0.5},\\\"enum\\\": {\\\"type\\\": 1}}}} ,\\\"6068022f-e563-4fdf-a392-8ade7d3a234c\\\": {\\\"typeid\\\": \\\"autodesk.soliddef:edge-1.0.0\\\",\\\"Float64\\\": {\\\"precision\\\": 0},\\\"Bool\\\": {\\\"reversed\\\": false},\\\"String\\\": {\\\"geometry\\\": \\\"522fc337-eb0c-4e24-84b1-1c497c8c437a\\\",\\\"vertex0\\\": \\\"65a3b9e7-88c1-4750-a6e4-554775c2cc06\\\",\\\"vertex1\\\": \\\"224d7735-a0ef-4e44-a040-542be9614a1e\\\"},\\\"autodesk.soliddef:paramrange-1.0.0\\\": {\\\"range\\\": {\\\"Float64\\\": {\\\"low\\\": -0.5,\\\"high\\\": 0.5},\\\"enum\\\": {\\\"type\\\": 1}}}} ,\\\"6b0a7842-3acd-415a-9fa5-3a5c4be1e8f4\\\": {\\\"typeid\\\": \\\"autodesk.soliddef:edge-1.0.0\\\",\\\"Float64\\\": {\\\"precision\\\": 0},\\\"Bool\\\": {\\\"reversed\\\": false},\\\"String\\\": {\\\"geometry\\\": \\\"f60c72d2-e466-4a33-94d4-b2c15d070ad4\\\",\\\"vertex0\\\": \\\"93a81101-b5f8-4bc7-931d-c3489cceb47d\\\",\\\"vertex1\\\": \\\"224d7735-a0ef-4e44-a040-542be9614a1e\\\"},\\\"autodesk.soliddef:paramrange-1.0.0\\\": {\\\"range\\\": {\\\"Float64\\\": {\\\"low\\\": -0.5,\\\"high\\\": 0.5},\\\"enum\\\": {\\\"type\\\": 1}}}} ,\\\"6c630455-5cd9-41a0-9e31-ea71ab600ef4\\\": {\\\"typeid\\\": \\\"autodesk.soliddef:edge-1.0.0\\\",\\\"Float64\\\": {\\\"precision\\\": 0},\\\"Bool\\\": {\\\"reversed\\\": false},\\\"String\\\": {\\\"geometry\\\": \\\"c951e0f4-92fb-4b81-87f1-97b6138c3f52\\\",\\\"vertex0\\\": \\\"c99a2679-daf5-4271-8b8e-642e3b4b94aa\\\",\\\"vertex1\\\": \\\"65a3b9e7-88c1-4750-a6e4-554775c2cc06\\\"},\\\"autodesk.soliddef:paramrange-1.0.0\\\": {\\\"range\\\": {\\\"Float64\\\": {\\\"low\\\": -0.5,\\\"high\\\": 0.5},\\\"enum\\\": {\\\"type\\\": 1}}}} ,\\\"a023bdfe-8c46-4547-bb72-cde1ad4446a2\\\": {\\\"typeid\\\": \\\"autodesk.soliddef:edge-1.0.0\\\",\\\"Float64\\\": {\\\"precision\\\": 0},\\\"Bool\\\": {\\\"reversed\\\": false},\\\"String\\\": {\\\"geometry\\\": \\\"60735f56-7f22-48ba-81f3-55f4e9ab76eb\\\",\\\"vertex0\\\": \\\"6b17fb6c-9508-4dea-9455-db9f014259a1\\\",\\\"vertex1\\\": \\\"780d32c7-ae3b-4ee2-9bc9-b3e0a0ed0ac3\\\"},\\\"autodesk.soliddef:paramrange-1.0.0\\\": {\\\"range\\\": {\\\"Float64\\\": {\\\"low\\\": -0.5,\\\"high\\\": 0.5},\\\"enum\\\": {\\\"type\\\": 1}}}} ,\\\"ac11614b-34ac-4140-ae9f-903922dd28b0\\\": {\\\"typeid\\\": \\\"autodesk.soliddef:edge-1.0.0\\\",\\\"Float64\\\": {\\\"precision\\\": 0},\\\"Bool\\\": {\\\"reversed\\\": false},\\\"String\\\": {\\\"geometry\\\": \\\"4851f344-8fca-4d05-9520-5ee0363e12f0\\\",\\\"vertex0\\\": \\\"c99a2679-daf5-4271-8b8e-642e3b4b94aa\\\",\\\"vertex1\\\": \\\"36e0e7d0-3878-4b92-9996-d1ec2dd4f0b4\\\"},\\\"autodesk.soliddef:paramrange-1.0.0\\\": {\\\"range\\\": {\\\"Float64\\\": {\\\"low\\\": -0.5,\\\"high\\\": 0.5},\\\"enum\\\": {\\\"type\\\": 1}}}} ,\\\"c9d2ad67-dd0e-4da8-9e20-537ee6c79f65\\\": {\\\"typeid\\\": \\\"autodesk.soliddef:edge-1.0.0\\\",\\\"Float64\\\": {\\\"precision\\\": 0},\\\"Bool\\\": {\\\"reversed\\\": false},\\\"String\\\": {\\\"geometry\\\": \\\"0a393595-fed1-49e7-8191-522f0d771580\\\",\\\"vertex0\\\": \\\"c7187cf7-8f52-4d7e-88c6-077cf0d73548\\\",\\\"vertex1\\\": \\\"93a81101-b5f8-4bc7-931d-c3489cceb47d\\\"},\\\"autodesk.soliddef:paramrange-1.0.0\\\": {\\\"range\\\": {\\\"Float64\\\": {\\\"low\\\": -0.5,\\\"high\\\": 0.5},\\\"enum\\\": {\\\"type\\\": 1}}}} ,\\\"cde6b24a-81de-4d3f-876d-d7c06969ebd5\\\": {\\\"typeid\\\": \\\"autodesk.soliddef:edge-1.0.0\\\",\\\"Float64\\\": {\\\"precision\\\": 0},\\\"Bool\\\": {\\\"reversed\\\": false},\\\"String\\\": {\\\"geometry\\\": \\\"9026b399-ddd1-4cfa-a855-26db55584868\\\",\\\"vertex0\\\": \\\"c7187cf7-8f52-4d7e-88c6-077cf0d73548\\\",\\\"vertex1\\\": \\\"6b17fb6c-9508-4dea-9455-db9f014259a1\\\"},\\\"autodesk.soliddef:paramrange-1.0.0\\\": {\\\"range\\\": {\\\"Float64\\\": {\\\"low\\\": -0.5,\\\"high\\\": 0.5},\\\"enum\\\": {\\\"type\\\": 1}}}} ,\\\"cf90735c-1eea-4fe8-a53a-947399d06c23\\\": {\\\"typeid\\\": \\\"autodesk.soliddef:edge-1.0.0\\\",\\\"Float64\\\": {\\\"precision\\\": 0},\\\"Bool\\\": {\\\"reversed\\\": false},\\\"String\\\": {\\\"geometry\\\": \\\"ce800039-1faa-49ea-bd05-4d6d742961fb\\\",\\\"vertex0\\\": \\\"36e0e7d0-3878-4b92-9996-d1ec2dd4f0b4\\\",\\\"vertex1\\\": \\\"c7187cf7-8f52-4d7e-88c6-077cf0d73548\\\"},\\\"autodesk.soliddef:paramrange-1.0.0\\\": {\\\"range\\\": {\\\"Float64\\\": {\\\"low\\\": -0.5,\\\"high\\\": 0.5},\\\"enum\\\": {\\\"type\\\": 1}}}} ,\\\"dc2a4337-38ae-4c26-8fdc-c3e2dcabed1a\\\": {\\\"typeid\\\": \\\"autodesk.soliddef:edge-1.0.0\\\",\\\"Float64\\\": {\\\"precision\\\": 0},\\\"Bool\\\": {\\\"reversed\\\": false},\\\"String\\\": {\\\"geometry\\\": \\\"2dd5d4bb-d8e3-4d65-9a74-0157c42b95c1\\\",\\\"vertex0\\\": \\\"36e0e7d0-3878-4b92-9996-d1ec2dd4f0b4\\\",\\\"vertex1\\\": \\\"780d32c7-ae3b-4ee2-9bc9-b3e0a0ed0ac3\\\"},\\\"autodesk.soliddef:paramrange-1.0.0\\\": {\\\"range\\\": {\\\"Float64\\\": {\\\"low\\\": -0.5,\\\"high\\\": 0.5},\\\"enum\\\": {\\\"type\\\": 1}}}} },\\\"autodesk.soliddef:vertex-1.0.0\\\": {\\\"224d7735-a0ef-4e44-a040-542be9614a1e\\\": {\\\"typeid\\\": \\\"autodesk.soliddef:vertex-1.0.0\\\",\\\"Float64\\\": {\\\"precision\\\": 0},\\\"String\\\": {\\\"geometry\\\": \\\"34b772b3-c681-4bb3-afc0-90642d1a2697\\\"}} ,\\\"36e0e7d0-3878-4b92-9996-d1ec2dd4f0b4\\\": {\\\"typeid\\\": \\\"autodesk.soliddef:vertex-1.0.0\\\",\\\"Float64\\\": {\\\"precision\\\": 0},\\\"String\\\": {\\\"geometry\\\": \\\"d4251fdb-0dc0-4591-932e-9a91a8a921a0\\\"}} ,\\\"65a3b9e7-88c1-4750-a6e4-554775c2cc06\\\": {\\\"typeid\\\": \\\"autodesk.soliddef:vertex-1.0.0\\\",\\\"Float64\\\": {\\\"precision\\\": 0},\\\"String\\\": {\\\"geometry\\\": \\\"9a1bd4f5-ddfd-41f3-917b-e4f02e32b1a4\\\"}} ,\\\"6b17fb6c-9508-4dea-9455-db9f014259a1\\\": {\\\"typeid\\\": \\\"autodesk.soliddef:vertex-1.0.0\\\",\\\"Float64\\\": {\\\"precision\\\": 0},\\\"String\\\": {\\\"geometry\\\": \\\"04276eca-a978-4fd7-9dd4-1376aac1fa17\\\"}} ,\\\"780d32c7-ae3b-4ee2-9bc9-b3e0a0ed0ac3\\\": {\\\"typeid\\\": \\\"autodesk.soliddef:vertex-1.0.0\\\",\\\"Float64\\\": {\\\"precision\\\": 0},\\\"String\\\": {\\\"geometry\\\": \\\"37667204-7c64-4549-bfb0-495855da49bf\\\"}} ,\\\"93a81101-b5f8-4bc7-931d-c3489cceb47d\\\": {\\\"typeid\\\": \\\"autodesk.soliddef:vertex-1.0.0\\\",\\\"Float64\\\": {\\\"precision\\\": 0},\\\"String\\\": {\\\"geometry\\\": \\\"d5e5cc9b-2cab-47a0-8bc0-d2b40b7a8484\\\"}} ,\\\"c7187cf7-8f52-4d7e-88c6-077cf0d73548\\\": {\\\"typeid\\\": \\\"autodesk.soliddef:vertex-1.0.0\\\",\\\"Float64\\\": {\\\"precision\\\": 0},\\\"String\\\": {\\\"geometry\\\": \\\"f8386db2-3165-4712-80df-671c44c36b48\\\"}} ,\\\"c99a2679-daf5-4271-8b8e-642e3b4b94aa\\\": {\\\"typeid\\\": \\\"autodesk.soliddef:vertex-1.0.0\\\",\\\"Float64\\\": {\\\"precision\\\": 0},\\\"String\\\": {\\\"geometry\\\": \\\"4bf8b73c-c42c-4021-9722-2cff93c664b7\\\"}} }}}}} \"\n];" + } + ], + "Connectors": [ + { + "Start": "411c4ada8d2041778b7c64af5f68c926", + "End": "145928029cec47da84518850dd19d050", + "Id": "7e31bc078de44938828d5832659a0583", + "IsHidden": "False" + } + ], + "Dependencies": [], + "NodeLibraryDependencies": [], + "Thumbnail": "", + "GraphDocumentationURL": null, + "ExtensionWorkspaceData": [ + { + "ExtensionGuid": "28992e1d-abb9-417f-8b1b-05e053bee670", + "Name": "Properties", + "Version": "2.19", + "Data": {} + } + ], + "Author": "", + "Linting": { + "activeLinter": "None", + "activeLinterId": "7b75fb44-43fd-4631-a878-29f4d5d8399a", + "warningCount": 0, + "errorCount": 0 + }, + "Bindings": [], + "View": { + "Dynamo": { + "ScaleFactor": 100.0, + "HasRunWithoutCrash": true, + "IsVisibleInDynamoLibrary": true, + "Version": "2.19.4.6632", + "RunType": "Manual", + "RunPeriod": "1000" + }, + "Camera": { + "Name": "_Background Preview", + "EyeX": -17.0, + "EyeY": 24.0, + "EyeZ": 50.0, + "LookX": 12.0, + "LookY": -13.0, + "LookZ": -58.0, + "UpX": 0.0, + "UpY": 1.0, + "UpZ": 0.0 + }, + "ConnectorPins": [], + "NodeViews": [ + { + "Id": "d2763e7c66b64a4da6fc57db4350dcb7", + "Name": "Geometry.FromSolidDef", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 701.38209200553513, + "Y": 782.97470774193732 + }, + { + "Id": "f8c8e85f673143e78215b590a379ee76", + "Name": "Solid Def representation", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -136.61790799446487, + "Y": 782.80220774193731 + } + ], + "Annotations": [], + "X": 257.1577211690244, + "Y": 50.5258207782108, + "Zoom": 0.626008640319811 + } +} \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.FromSolidDef.md b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.FromSolidDef.md index 0f2bbe66004..415ff9bedcc 100644 --- a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.FromSolidDef.md +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.FromSolidDef.md @@ -1,7 +1,8 @@ ## In Depth -Imports a JSON string and returns an array of imported geometries. +`Geometry.FromSolidDef` imports a Solid Def JSON string and returns an array of imported geometries. It converts the JSON formatted representation back into geometry format. Use `Geometry.ToSolidDef` to convert geometries into a JSON string format. + +In the example below, a Solid Def representation is converted into geometry. ___ ## Example File - - +![Geometry.FromSolidDef](./Autodesk.DesignScript.Geometry.Geometry.FromSolidDef_img.jpg) \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.FromSolidDef_img.jpg b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.FromSolidDef_img.jpg new file mode 100644 index 00000000000..97e1d5af095 Binary files /dev/null and b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.FromSolidDef_img.jpg differ diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.OrientedBoundingBox.dyn b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.OrientedBoundingBox.dyn new file mode 100644 index 00000000000..c93795fce7c --- /dev/null +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.OrientedBoundingBox.dyn @@ -0,0 +1,718 @@ +{ + "Uuid": "4b5907af-3c42-483c-a370-b5b58fa04163", + "IsCustomNode": false, + "Description": "", + "Name": "Autodesk.DesignScript.Geometry.Geometry.OrientedBoundingBox", + "ElementResolver": { + "ResolutionMap": {} + }, + "Inputs": [], + "Outputs": [], + "Nodes": [ + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "ae2c0287cd28496190116dd64cb14b20", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "727fc965c287488a8e4fb26feb745c51", + "Name": "centerPoint", + "Description": "Point\nDefault value : Autodesk.DesignScript.Geometry.Point.ByCoordinates(0, 0, 0)", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "b0ff971f2a924bc29a53dcac305e2489", + "Name": "radius", + "Description": "double\nDefault value : 1", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "1400ebdedb7348729013414e41dcc592", + "Name": "Sphere", + "Description": "Sphere", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Sphere.ByCenterPointRadius@Autodesk.DesignScript.Geometry.Point,double", + "Replication": "Auto", + "Description": "Create a Solid Sphere cetered at the input Point, with given radius.\n\nSphere.ByCenterPointRadius (centerPoint: Point = Autodesk.DesignScript.Geometry.Point.ByCoordinates(0, 0, 0), radius: double = 1): Sphere" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "bfe6f2833ff24842839a77c0a8617602", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "e766711434a34a418e9caa6dc4bb257e", + "Name": "geometry", + "Description": "Autodesk.DesignScript.Geometry.Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "d1e5840499ee46bbaa322cac3387e72b", + "Name": "xamount", + "Description": "double\nDefault value : 1", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "40c0191fc95143b3aeb8cbddc1051977", + "Name": "yamount", + "Description": "double\nDefault value : 1", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "a21ad5c5b5de4575be30fdbd65ebb0fa", + "Name": "zamount", + "Description": "double\nDefault value : 1", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "fc6f65856c794e7e94ac59e2a6cc27c5", + "Name": "Geometry", + "Description": "Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Geometry.Scale@double,double,double", + "Replication": "Auto", + "Description": "Scale non-uniformly around the origin\n\nGeometry.Scale (xamount: double = 1, yamount: double = 1, zamount: double = 1): Geometry" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "ffdc84f2a7e446a08557e04cb4b0ce88", + "NodeType": "CodeBlockNode", + "Inputs": [], + "Outputs": [ + { + "Id": "836d505310234c8c9a506b8382a5d69a", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "97c455c3bd834ce5b6101e0a64325884", + "Name": "", + "Description": "Value of expression at line 2", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "9d771e4dacfc4235963f46c5e9e4bf4f", + "Name": "", + "Description": "Value of expression at line 3", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "1;\n2.5;\n0.5;" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "8cea0316c58e4bfa8a1a6e2523daea44", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "008a0071fb8b40409545b93596b9627e", + "Name": "geometry", + "Description": "Autodesk.DesignScript.Geometry.Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "7a4a57d53e8b479ebb1f43a56225ec14", + "Name": "origin", + "Description": "Point", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "327c40c8f4094031adacd9f177eab3e8", + "Name": "axis", + "Description": "Vector", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "b901432715ef4b828a560b2bc4e62cd3", + "Name": "degrees", + "Description": "double\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "89b690a48ee5427d994645bca552eabf", + "Name": "Geometry", + "Description": "Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Geometry.Rotate@Autodesk.DesignScript.Geometry.Point,Autodesk.DesignScript.Geometry.Vector,double", + "Replication": "Auto", + "Description": "Rotates an object around an origin and an axis by a specified degree\n\nGeometry.Rotate (origin: Point, axis: Vector, degrees: double = 0): Geometry" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "cd8a8ab8548249fa92501c57a105430a", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "b0a9d63511fd42cca07e4f5c2febf4c4", + "Name": "x", + "Description": "X coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "83dd281419724248baa94c9292959de3", + "Name": "y", + "Description": "Y coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "72d0c18560524510bbbd598e80b3eca8", + "Name": "z", + "Description": "Z coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "9b616b66c2314a76af8c2f9922347318", + "Name": "Point", + "Description": "Point created by coordinates", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Point.ByCoordinates@double,double,double", + "Replication": "Auto", + "Description": "Form a Point given 3 cartesian coordinates\n\nPoint.ByCoordinates (x: double = 0, y: double = 0, z: double = 0): Point" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "965ed3f26ea24a388ea76a4e200c1e94", + "NodeType": "FunctionNode", + "Inputs": [], + "Outputs": [ + { + "Id": "51125a01b69d427c8a4092860e3ba661", + "Name": "Vector", + "Description": "Vector", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Vector.ZAxis", + "Replication": "Auto", + "Description": "Get the canonical Z axis Vector (0,0,1)\n\nVector.ZAxis ( ): Vector" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "db2ff2e07d534c58ba6892614b590aef", + "NodeType": "CodeBlockNode", + "Inputs": [], + "Outputs": [ + { + "Id": "6da9b0d1c5a94f828ab7c025f16d65a3", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "45;" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "bd9633ee78d947f6a78cb6f2c988f176", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "59efc3c2112a408c87742eaecb1f6add", + "Name": "boundingBox", + "Description": "Autodesk.DesignScript.Geometry.BoundingBox", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "ba689aa73d1348dca5b398c94ca14181", + "Name": "Cuboid", + "Description": "Returns cuboid representation of the bounding box.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.BoundingBox.ToCuboid", + "Replication": "Auto", + "Description": "Get the bounding box as a solid cuboid.\n\nBoundingBox.ToCuboid ( ): Cuboid" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "d74f505a8b334ab0a0a6bd6a6af54265", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "9ca6128003a64987a702ab0c1a8e9fe0", + "Name": "geometry", + "Description": "The geometry to which you would like to apply color.\n\nGeometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "a964f290d80e4e33936edbfe8700adad", + "Name": "color", + "Description": "The color.\n\nColor", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "0b3adebb8d234eed8daaaa8692043fe5", + "Name": "GeometryColor", + "Description": "A Display object.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Modifiers.GeometryColor.ByGeometryColor@Autodesk.DesignScript.Geometry.Geometry,DSCore.Color", + "Replication": "Auto", + "Description": "Display geometry using a color.\n\nGeometryColor.ByGeometryColor (geometry: Geometry, color: Color): GeometryColor" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "c021feda3f2a4125ad544e268cbb6656", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "9db77859c8214a3e8b3c4731baab90e8", + "Name": "alpha", + "Description": "Alpha value (between 0 and 255 inclusive)\n\nint\nDefault value : 255", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "4fa7f7256d5041ef89d012b3e71dbb0b", + "Name": "red", + "Description": "Red value for RGB color model (between 0 and 255 inclusive)\n\nint\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "8b3c679dd25545c2b20f4a23f6aa26df", + "Name": "green", + "Description": "Green value for RGB color model (between 0 and 255 inclusive)\n\nint\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "dd03d70e4dd94f8a8cb794ea0a19d399", + "Name": "blue", + "Description": "Blue value for RGB color model (between 0 and 255 inclusive)\n\nint\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "5f66dc76b29b49c28382f69a05455d54", + "Name": "color", + "Description": "Color created from ARGB", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Color.ByARGB@int,int,int,int", + "Replication": "Auto", + "Description": "Construct a color by alpha, red, green, and blue components.\n\nColor.ByARGB (alpha: int = 255, red: int = 0, green: int = 0, blue: int = 0): Color" + }, + { + "ConcreteType": "CoreNodeModels.Input.DoubleInput, CoreNodeModels", + "NumberType": "Double", + "Id": "ca9e0f3629004c5a97a1005dcc22d734", + "NodeType": "NumberInputNode", + "Inputs": [], + "Outputs": [ + { + "Id": "7ac11ca0300046b3a927b571276a25fc", + "Name": "", + "Description": "Double", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Creates a number", + "InputValue": 20.0 + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "4ea85da69bcc4465bc1bc1944ca8b8af", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "a1414b63933540f199da7b8334ddb329", + "Name": "geometry", + "Description": "Autodesk.DesignScript.Geometry.Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "15e9d4d05b3a4d2c9bd5626a367d8a03", + "Name": "BoundingBox", + "Description": "BoundingBox", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Geometry.OrientedBoundingBox", + "Replication": "Auto", + "Description": "Gets the minimum-volume, oriented bounding box containing the given geometry.\n\nGeometry.OrientedBoundingBox: BoundingBox" + } + ], + "Connectors": [ + { + "Start": "1400ebdedb7348729013414e41dcc592", + "End": "e766711434a34a418e9caa6dc4bb257e", + "Id": "1706646b7f1a4ce395dfb02801ad7d17", + "IsHidden": "False" + }, + { + "Start": "fc6f65856c794e7e94ac59e2a6cc27c5", + "End": "008a0071fb8b40409545b93596b9627e", + "Id": "2dccf8d7df84403ebb1b7af471739be8", + "IsHidden": "False" + }, + { + "Start": "836d505310234c8c9a506b8382a5d69a", + "End": "d1e5840499ee46bbaa322cac3387e72b", + "Id": "98bdaf3b2f72459da85196c0f3ab6913", + "IsHidden": "False" + }, + { + "Start": "97c455c3bd834ce5b6101e0a64325884", + "End": "40c0191fc95143b3aeb8cbddc1051977", + "Id": "2576fa0ba00348649c17c44c199aed0b", + "IsHidden": "False" + }, + { + "Start": "9d771e4dacfc4235963f46c5e9e4bf4f", + "End": "a21ad5c5b5de4575be30fdbd65ebb0fa", + "Id": "b600bdb5cabc4a9980ed3bb7633cb7b3", + "IsHidden": "False" + }, + { + "Start": "89b690a48ee5427d994645bca552eabf", + "End": "a1414b63933540f199da7b8334ddb329", + "Id": "b3d7728ad9a24d458ad977f508cc01f7", + "IsHidden": "False" + }, + { + "Start": "9b616b66c2314a76af8c2f9922347318", + "End": "7a4a57d53e8b479ebb1f43a56225ec14", + "Id": "b6b60a31d6634c309bbdc61130cf5f18", + "IsHidden": "False" + }, + { + "Start": "51125a01b69d427c8a4092860e3ba661", + "End": "327c40c8f4094031adacd9f177eab3e8", + "Id": "88f3686d257941c2a4e5c47bbc3e0878", + "IsHidden": "False" + }, + { + "Start": "6da9b0d1c5a94f828ab7c025f16d65a3", + "End": "b901432715ef4b828a560b2bc4e62cd3", + "Id": "183f434fe733440d9c382110d6e963b7", + "IsHidden": "False" + }, + { + "Start": "ba689aa73d1348dca5b398c94ca14181", + "End": "9ca6128003a64987a702ab0c1a8e9fe0", + "Id": "c3f6343fa2da494a831ff9d560014629", + "IsHidden": "False" + }, + { + "Start": "5f66dc76b29b49c28382f69a05455d54", + "End": "a964f290d80e4e33936edbfe8700adad", + "Id": "d190f459199b40428f3ac1b7f558134d", + "IsHidden": "False" + }, + { + "Start": "7ac11ca0300046b3a927b571276a25fc", + "End": "9db77859c8214a3e8b3c4731baab90e8", + "Id": "e5ae3b5a236549ed9991a8fb8f95aaa3", + "IsHidden": "False" + }, + { + "Start": "15e9d4d05b3a4d2c9bd5626a367d8a03", + "End": "59efc3c2112a408c87742eaecb1f6add", + "Id": "1d1fcaec19f94ece995a369cb03ae69b", + "IsHidden": "False" + } + ], + "Dependencies": [], + "NodeLibraryDependencies": [], + "Thumbnail": "", + "GraphDocumentationURL": null, + "ExtensionWorkspaceData": [ + { + "ExtensionGuid": "28992e1d-abb9-417f-8b1b-05e053bee670", + "Name": "Properties", + "Version": "2.19", + "Data": {} + } + ], + "Author": "", + "Linting": { + "activeLinter": "None", + "activeLinterId": "7b75fb44-43fd-4631-a878-29f4d5d8399a", + "warningCount": 0, + "errorCount": 0 + }, + "Bindings": [], + "View": { + "Dynamo": { + "ScaleFactor": 100.0, + "HasRunWithoutCrash": true, + "IsVisibleInDynamoLibrary": true, + "Version": "2.19.4.6632", + "RunType": "Automatic", + "RunPeriod": "1000" + }, + "Camera": { + "Name": "_Background Preview", + "EyeX": 6.5932755470275879, + "EyeY": 4.0049648284912109, + "EyeZ": -1.842180609703064, + "LookX": -7.7810578346252441, + "LookY": -2.7090249061584473, + "LookZ": 1.4858139753341675, + "UpX": -0.11119390279054642, + "UpY": 0.99357199668884277, + "UpZ": 0.021232729777693748 + }, + "ConnectorPins": [], + "NodeViews": [ + { + "Id": "ae2c0287cd28496190116dd64cb14b20", + "Name": "Sphere.ByCenterPointRadius", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": false, + "X": 292.79496345833741, + "Y": 150.99119020296149 + }, + { + "Id": "bfe6f2833ff24842839a77c0a8617602", + "Name": "Geometry.Scale", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": false, + "X": 678.35834374002764, + "Y": 150.99119020296149 + }, + { + "Id": "ffdc84f2a7e446a08557e04cb4b0ce88", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": false, + "X": 292.79496345833741, + "Y": 340.47369020296151 + }, + { + "Id": "8cea0316c58e4bfa8a1a6e2523daea44", + "Name": "Geometry.Rotate", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1020.8583437400276, + "Y": 150.99119020296149 + }, + { + "Id": "cd8a8ab8548249fa92501c57a105430a", + "Name": "Point.ByCoordinates", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": false, + "X": 678.35834374002764, + "Y": 433.93369020296154 + }, + { + "Id": "965ed3f26ea24a388ea76a4e200c1e94", + "Name": "Vector.ZAxis", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": false, + "X": 678.35834374002764, + "Y": 681.87619020296154 + }, + { + "Id": "db2ff2e07d534c58ba6892614b590aef", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": false, + "X": 678.35834374002764, + "Y": 864.81869020296153 + }, + { + "Id": "bd9633ee78d947f6a78cb6f2c988f176", + "Name": "BoundingBox.ToCuboid", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": false, + "X": 1786.3583437400275, + "Y": 150.99119020296149 + }, + { + "Id": "d74f505a8b334ab0a0a6bd6a6af54265", + "Name": "GeometryColor.ByGeometryColor", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2133.3583437400275, + "Y": 150.99119020296149 + }, + { + "Id": "c021feda3f2a4125ad544e268cbb6656", + "Name": "Color.ByARGB", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1788.7949634583374, + "Y": 433.93369020296154 + }, + { + "Id": "ca9e0f3629004c5a97a1005dcc22d734", + "Name": "Number", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1553.8583437400275, + "Y": 433.93369020296154 + }, + { + "Id": "4ea85da69bcc4465bc1bc1944ca8b8af", + "Name": "Geometry.OrientedBoundingBox", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1367.1083437400275, + "Y": 150.99119020296149 + } + ], + "Annotations": [], + "X": -75.332542997356541, + "Y": 107.55662049629757, + "Zoom": 0.54994833700804291 + } +} \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.OrientedBoundingBox.md b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.OrientedBoundingBox.md new file mode 100644 index 00000000000..c75507cd027 --- /dev/null +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.OrientedBoundingBox.md @@ -0,0 +1,8 @@ +## In Depth +`Geometry.OrientedBoundingBox` returns a minimum-volume, oriented box defined by the geometry it contains. A BoundingBox is not displayed, but it can be returned as a PolySurface using the `BoundingBox.ToPolySurface` node. + +In the example below, a BoundingBox is created for a unioned solid and represented as a PolySurface. +___ +## Example File + +![Geometry.OrientedBoundingBox](./Autodesk.DesignScript.Geometry.Geometry.OrientedBoundingBox_img.jpg) \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.OrientedBoundingBox_img.jpg b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.OrientedBoundingBox_img.jpg new file mode 100644 index 00000000000..694429e6bea Binary files /dev/null and b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.OrientedBoundingBox_img.jpg differ diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.Rotate(basePlane, degrees).md b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.Rotate(basePlane, degrees).md deleted file mode 100644 index 95f7f85d7df..00000000000 --- a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.Rotate(basePlane, degrees).md +++ /dev/null @@ -1,7 +0,0 @@ -## In Depth -Rotates an object around the Plane origin and normal by a specified degree. -___ -## Example File - -![Rotate (basePlane, degrees)](./Autodesk.DesignScript.Geometry.Geometry.Rotate(basePlane,%20degrees)_img.jpg) - diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.Rotate(basePlane, degrees)_img.jpg b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.Rotate(basePlane, degrees)_img.jpg deleted file mode 100644 index ebdfe696c22..00000000000 Binary files a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.Rotate(basePlane, degrees)_img.jpg and /dev/null differ diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.Rotate(basePlane, degrees).dyn b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.Rotate(geometry, basePlane, degrees).dyn similarity index 62% rename from doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.Rotate(basePlane, degrees).dyn rename to doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.Rotate(geometry, basePlane, degrees).dyn index 8cd8eb0eb99..0141cb4e8ba 100644 --- a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.Rotate(basePlane, degrees).dyn +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.Rotate(geometry, basePlane, degrees).dyn @@ -1,34 +1,35 @@ { - "Uuid": "3c9d0464-8643-5ffe-96e5-ab1769818209", + "Uuid": "6d6ee96e-5140-4947-a24b-1a488b2c8eb9", "IsCustomNode": false, "Description": "", - "Name": "Rotate", + "Name": "Autodesk.DesignScript.Geometry.Geometry.Rotate", "ElementResolver": { "ResolutionMap": {} }, "Inputs": [ { - "Id": "f574c9563efa4ed5b50c6e23239fc856", + "Id": "29c47699a5c1473d87ca352babaca6ca", "Name": "Number Slider", "Type": "number", + "Type2": "number", "Value": "62.1", "MaximumValue": 359.0, "MinimumValue": 1.0, "StepValue": 0.1, "NumberType": "Double", - "Description": "A slider that produces numeric values." + "Description": "Produces numeric values", + "SelectedIndex": 0 } ], "Outputs": [], "Nodes": [ { "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "dab20a62bb734d59b6e932f5caad9592", "NodeType": "FunctionNode", - "FunctionSignature": "Autodesk.DesignScript.Geometry.Cone.ByPointsRadius@Autodesk.DesignScript.Geometry.Point,Autodesk.DesignScript.Geometry.Point,double", - "Id": "9353c4dfe5c94c3b89718f7d9b2123ba", "Inputs": [ { - "Id": "c2022c20158648afb56e272f54035905", + "Id": "6a901d6255984a229bfc6bfb40c45302", "Name": "startPoint", "Description": "Point\nDefault value : Autodesk.DesignScript.Geometry.Point.ByCoordinates(0, 0, 0)", "UsingDefaultValue": true, @@ -37,7 +38,7 @@ "KeepListStructure": false }, { - "Id": "4020e98689d74a06ae3054c8e74fdc43", + "Id": "8fae0a3168594a71870722aa9a7c2adb", "Name": "endPoint", "Description": "Point\nDefault value : Autodesk.DesignScript.Geometry.Point.ByCoordinates(0, 0, 1)", "UsingDefaultValue": true, @@ -46,7 +47,7 @@ "KeepListStructure": false }, { - "Id": "b63c9394c082410296efd829e1fff5b8", + "Id": "2affc494d06e4e22a783b631d4f6155e", "Name": "startRadius", "Description": "double\nDefault value : 1", "UsingDefaultValue": true, @@ -57,7 +58,7 @@ ], "Outputs": [ { - "Id": "0e083d464edd44aeae6a9ebbfb4ecf09", + "Id": "9dc65e2f08054a5d869ce5ed8599e788", "Name": "Cone", "Description": "Cone", "UsingDefaultValue": false, @@ -66,37 +67,37 @@ "KeepListStructure": false } ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Cone.ByPointsRadius@Autodesk.DesignScript.Geometry.Point,Autodesk.DesignScript.Geometry.Point,double", "Replication": "Auto", "Description": "Create a Cone with given base radius at start Point, extending to a apex at end Point.\n\nCone.ByPointsRadius (startPoint: Point = Autodesk.DesignScript.Geometry.Point.ByCoordinates(0, 0, 0), endPoint: Point = Autodesk.DesignScript.Geometry.Point.ByCoordinates(0, 0, 1), startRadius: double = 1): Cone" }, { "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "5e7826acd9124ae08ff09cadf8499efd", "NodeType": "FunctionNode", - "FunctionSignature": "Autodesk.DesignScript.Geometry.Point.ByCoordinates@double,double,double", - "Id": "fb784abe345a49ce9476f22cbf49e7a9", "Inputs": [ { - "Id": "f3baa26f5375442d8c85d75c5986a170", + "Id": "b5ca8013431446328cd48f5efa1fbbaf", "Name": "x", - "Description": "double\nDefault value : 0", + "Description": "X coordinate\n\ndouble\nDefault value : 0", "UsingDefaultValue": true, "Level": 2, "UseLevels": false, "KeepListStructure": false }, { - "Id": "ce40b69591d44de49788a749d7cf2fe6", + "Id": "19fc4b95cb8340a5957d248c755319aa", "Name": "y", - "Description": "double\nDefault value : 0", + "Description": "Y coordinate\n\ndouble\nDefault value : 0", "UsingDefaultValue": true, "Level": 2, "UseLevels": false, "KeepListStructure": false }, { - "Id": "0ae2c703806d426d87cb2c5cfc823bf9", + "Id": "fcc6b7fcf76c459aa7a9bc6a69de6ff6", "Name": "z", - "Description": "double\nDefault value : 0", + "Description": "Z coordinate\n\ndouble\nDefault value : 0", "UsingDefaultValue": true, "Level": 2, "UseLevels": false, @@ -105,27 +106,27 @@ ], "Outputs": [ { - "Id": "68db643b9fb44adeae3586450758e837", + "Id": "c59d1776c30f409a87b602bd52359bdf", "Name": "Point", - "Description": "Point", + "Description": "Point created by coordinates", "UsingDefaultValue": false, "Level": 2, "UseLevels": false, "KeepListStructure": false } ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Point.ByCoordinates@double,double,double", "Replication": "Auto", "Description": "Form a Point given 3 cartesian coordinates\n\nPoint.ByCoordinates (x: double = 0, y: double = 0, z: double = 0): Point" }, { "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "96bed24becad4a75a988bde2a589a25c", "NodeType": "CodeBlockNode", - "Code": "5;\n2;\n8;", - "Id": "47226805f4414bd689711e386a9009d1", "Inputs": [], "Outputs": [ { - "Id": "9c6e4a046221499ca41121793649eeaf", + "Id": "c6b8444412474ecab85a72ef2dfdfbe5", "Name": "", "Description": "Value of expression at line 1", "UsingDefaultValue": false, @@ -134,7 +135,7 @@ "KeepListStructure": false }, { - "Id": "97975dcc8d494ec39af983930ffdcdc7", + "Id": "f98ea84088b54d8e824376d01e551ead", "Name": "", "Description": "Value of expression at line 2", "UsingDefaultValue": false, @@ -143,7 +144,7 @@ "KeepListStructure": false }, { - "Id": "9871b7f929f64b76a7e92d1b0e263bcc", + "Id": "60ed0de5c3764275bd0707cc0bfd67e5", "Name": "", "Description": "Value of expression at line 3", "UsingDefaultValue": false, @@ -153,36 +154,36 @@ } ], "Replication": "Disabled", - "Description": "Allows for DesignScript code to be authored directly" + "Description": "Allows for DesignScript code to be authored directly", + "Code": "5;\n2;\n8;" }, { "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "cbc7b355436f43dba3c337329ea314d2", "NodeType": "FunctionNode", - "FunctionSignature": "Autodesk.DesignScript.Geometry.Point.Origin", - "Id": "cb29ce4de19648ee800f936596f93067", "Inputs": [], "Outputs": [ { - "Id": "eda8062075de425085ed1ba1fee3ebb8", + "Id": "50921deaa36043de81bbd904da37d082", "Name": "Point", - "Description": "Point", + "Description": "Origin point", "UsingDefaultValue": false, "Level": 2, "UseLevels": false, "KeepListStructure": false } ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Point.Origin", "Replication": "Auto", "Description": "Get the Origin point (0,0,0)\n\nPoint.Origin ( ): Point" }, { "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "644a32a97e51440082606986a87bd84f", "NodeType": "FunctionNode", - "FunctionSignature": "Autodesk.DesignScript.Geometry.Geometry.Rotate@Autodesk.DesignScript.Geometry.Plane,double", - "Id": "93fe6d7d3a13456cb0a0779f77d9a715", "Inputs": [ { - "Id": "fdf03355b0b34f8487c9a6d8231e6a17", + "Id": "f593a59692f74730b8bd8bd57a9659cb", "Name": "geometry", "Description": "Autodesk.DesignScript.Geometry.Geometry", "UsingDefaultValue": false, @@ -191,7 +192,7 @@ "KeepListStructure": false }, { - "Id": "d255d6586578421785621f4eaf08c83b", + "Id": "8857dffb880c45578224e1c252f7f2de", "Name": "basePlane", "Description": "Plane", "UsingDefaultValue": false, @@ -200,7 +201,7 @@ "KeepListStructure": false }, { - "Id": "608f0a035fee47599383d0e42aa2ae15", + "Id": "29dece479bc947569331eef58c761660", "Name": "degrees", "Description": "double\nDefault value : 0", "UsingDefaultValue": true, @@ -211,7 +212,7 @@ ], "Outputs": [ { - "Id": "4f04e294e6b64093a25d9456a604fe6f", + "Id": "23ffc92ba8c645b490ec0127df7749a7", "Name": "Geometry", "Description": "Geometry", "UsingDefaultValue": false, @@ -220,22 +221,22 @@ "KeepListStructure": false } ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Geometry.Rotate@Autodesk.DesignScript.Geometry.Plane,double", "Replication": "Auto", "Description": "Rotates an object around the Plane origin and normal by a specified degree\n\nGeometry.Rotate (basePlane: Plane, degrees: double = 0): Geometry" }, { "ConcreteType": "CoreNodeModels.Input.DoubleSlider, CoreNodeModels", - "NodeType": "NumberInputNode", "NumberType": "Double", "MaximumValue": 359.0, "MinimumValue": 1.0, "StepValue": 0.1, - "InputValue": 62.1, - "Id": "f574c9563efa4ed5b50c6e23239fc856", + "Id": "29c47699a5c1473d87ca352babaca6ca", + "NodeType": "NumberInputNode", "Inputs": [], "Outputs": [ { - "Id": "e0ef1de0a7aa454faf4c4e2941a72d22", + "Id": "4675fe9866394b9da89fbe9f10029705", "Name": "", "Description": "Double", "UsingDefaultValue": false, @@ -245,174 +246,203 @@ } ], "Replication": "Disabled", - "Description": "A slider that produces numeric values." + "Description": "Produces numeric values", + "InputValue": 62.1 }, { "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "07575189eaca4aa2ac49ba1dec21d0f5", "NodeType": "FunctionNode", - "FunctionSignature": "Autodesk.DesignScript.Geometry.Plane.XY", - "Id": "a7abb5cdaf5849e199f2f163186b4ad0", "Inputs": [], "Outputs": [ { - "Id": "545a14a054b048ff812c5533eb954899", + "Id": "588890c6c00d49e792bc7c279da4eaa8", "Name": "Plane", - "Description": "Plane", + "Description": "Plane at XY plane of world", "UsingDefaultValue": false, "Level": 2, "UseLevels": false, "KeepListStructure": false } ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Plane.XY", "Replication": "Auto", "Description": "Creates a plane in the world XY\n\nPlane.XY ( ): Plane" } ], "Connectors": [ { - "Start": "0e083d464edd44aeae6a9ebbfb4ecf09", - "End": "fdf03355b0b34f8487c9a6d8231e6a17", - "Id": "f1dd1ce732024c4b98388efb6c94c2f6" + "Start": "9dc65e2f08054a5d869ce5ed8599e788", + "End": "f593a59692f74730b8bd8bd57a9659cb", + "Id": "44baf9b8a5894b279737fb8376e8de57", + "IsHidden": "False" }, { - "Start": "68db643b9fb44adeae3586450758e837", - "End": "4020e98689d74a06ae3054c8e74fdc43", - "Id": "063cdb39a36c446caca56933690e65cc" + "Start": "c59d1776c30f409a87b602bd52359bdf", + "End": "8fae0a3168594a71870722aa9a7c2adb", + "Id": "9acd577e90e54d9886da7f4ae9650552", + "IsHidden": "False" }, { - "Start": "9c6e4a046221499ca41121793649eeaf", - "End": "f3baa26f5375442d8c85d75c5986a170", - "Id": "d09445369071426ea48d6b1107ead5fd" + "Start": "c6b8444412474ecab85a72ef2dfdfbe5", + "End": "b5ca8013431446328cd48f5efa1fbbaf", + "Id": "9f9a9f6b9fb04eeb9671182ca2ed6609", + "IsHidden": "False" }, { - "Start": "9c6e4a046221499ca41121793649eeaf", - "End": "b63c9394c082410296efd829e1fff5b8", - "Id": "d42f2ed95350413bacc15ab8de226dc9" + "Start": "c6b8444412474ecab85a72ef2dfdfbe5", + "End": "2affc494d06e4e22a783b631d4f6155e", + "Id": "c674097c170944a4b6f82650c090a46d", + "IsHidden": "False" }, { - "Start": "97975dcc8d494ec39af983930ffdcdc7", - "End": "ce40b69591d44de49788a749d7cf2fe6", - "Id": "ff57f5d8d9f34294a1530f1335da7f8d" + "Start": "f98ea84088b54d8e824376d01e551ead", + "End": "19fc4b95cb8340a5957d248c755319aa", + "Id": "23ef465cbe874cfe871223b3c0dcbfa6", + "IsHidden": "False" }, { - "Start": "9871b7f929f64b76a7e92d1b0e263bcc", - "End": "0ae2c703806d426d87cb2c5cfc823bf9", - "Id": "3764900d485e4d419bac69b7ac2262ea" + "Start": "60ed0de5c3764275bd0707cc0bfd67e5", + "End": "fcc6b7fcf76c459aa7a9bc6a69de6ff6", + "Id": "5d7cb8d55e0642128ea6df540822fd0f", + "IsHidden": "False" }, { - "Start": "eda8062075de425085ed1ba1fee3ebb8", - "End": "c2022c20158648afb56e272f54035905", - "Id": "f4faa461ef814b17a13243155365caa3" + "Start": "50921deaa36043de81bbd904da37d082", + "End": "6a901d6255984a229bfc6bfb40c45302", + "Id": "a6fb7fde1b4a44e289b4fd609a2b204a", + "IsHidden": "False" }, { - "Start": "e0ef1de0a7aa454faf4c4e2941a72d22", - "End": "608f0a035fee47599383d0e42aa2ae15", - "Id": "eab8e37cf7f04a8fb11fe9d840b118eb" + "Start": "4675fe9866394b9da89fbe9f10029705", + "End": "29dece479bc947569331eef58c761660", + "Id": "c66b809480b547b5a4763231e2f823b6", + "IsHidden": "False" }, { - "Start": "545a14a054b048ff812c5533eb954899", - "End": "d255d6586578421785621f4eaf08c83b", - "Id": "5444bf89eefa4c8fb02b7897eb76e616" + "Start": "588890c6c00d49e792bc7c279da4eaa8", + "End": "8857dffb880c45578224e1c252f7f2de", + "Id": "dfca654d38924356977c00238537205b", + "IsHidden": "False" } ], "Dependencies": [], + "NodeLibraryDependencies": [], + "Thumbnail": "", + "GraphDocumentationURL": null, + "ExtensionWorkspaceData": [ + { + "ExtensionGuid": "28992e1d-abb9-417f-8b1b-05e053bee670", + "Name": "Properties", + "Version": "2.19", + "Data": {} + } + ], + "Author": "None provided", + "Linting": { + "activeLinter": "None", + "activeLinterId": "7b75fb44-43fd-4631-a878-29f4d5d8399a", + "warningCount": 0, + "errorCount": 0 + }, "Bindings": [], "View": { "Dynamo": { "ScaleFactor": 1.0, "HasRunWithoutCrash": true, "IsVisibleInDynamoLibrary": true, - "Version": "2.0.1.5055", + "Version": "2.19.0.5874", "RunType": "Automatic", "RunPeriod": "1000" }, "Camera": { - "Name": "Background Preview", - "EyeX": 1.5906540155410767, - "EyeY": 19.727062225341797, - "EyeZ": 20.494718551635742, - "LookX": -0.8273547887802124, - "LookY": -14.146214485168457, - "LookZ": -26.17218017578125, - "UpX": -0.0087090954184532166, - "UpY": 0.96126168966293335, - "UpZ": -0.27549973130226135 + "Name": "_Background Preview", + "EyeX": -14.22697925567627, + "EyeY": 24.756748199462891, + "EyeZ": 17.283315658569336, + "LookX": 3.055943489074707, + "LookY": -19.082725524902344, + "LookZ": -22.633892059326172, + "UpX": 0.061782918870449066, + "UpY": 0.88701075315475464, + "UpZ": -0.45759698748588562 }, + "ConnectorPins": [], "NodeViews": [ { - "ShowGeometry": true, + "Id": "dab20a62bb734d59b6e932f5caad9592", "Name": "Cone.ByPointsRadius", - "Id": "9353c4dfe5c94c3b89718f7d9b2123ba", "IsSetAsInput": false, "IsSetAsOutput": false, "Excluded": false, - "X": 733.69993499848306, - "Y": 302.53457531974652 + "ShowGeometry": true, + "X": 780.19993499848306, + "Y": 259.03457531974652 }, { - "ShowGeometry": false, + "Id": "5e7826acd9124ae08ff09cadf8499efd", "Name": "Point.ByCoordinates", - "Id": "fb784abe345a49ce9476f22cbf49e7a9", "IsSetAsInput": false, "IsSetAsOutput": false, "Excluded": false, - "X": 475.69993499848306, - "Y": 369.53457531974652 + "ShowGeometry": false, + "X": 455.19993499848306, + "Y": 350.03457531974652 }, { - "ShowGeometry": true, + "Id": "96bed24becad4a75a988bde2a589a25c", "Name": "Code Block", - "Id": "47226805f4414bd689711e386a9009d1", "IsSetAsInput": false, "IsSetAsOutput": false, "Excluded": false, - "X": 296.69993499848306, - "Y": 377.96124198641314 + "ShowGeometry": true, + "X": 201.19993499848306, + "Y": 358.6895753197465 }, { - "ShowGeometry": true, + "Id": "cbc7b355436f43dba3c337329ea314d2", "Name": "Point.Origin", - "Id": "cb29ce4de19648ee800f936596f93067", "IsSetAsInput": false, "IsSetAsOutput": false, "Excluded": false, - "X": 475.69993499848306, - "Y": 261.53457531974652 + "ShowGeometry": true, + "X": 455.19993499848306, + "Y": 202.03457531974652 }, { - "ShowGeometry": true, + "Id": "644a32a97e51440082606986a87bd84f", "Name": "Geometry.Rotate", - "Id": "93fe6d7d3a13456cb0a0779f77d9a715", "IsSetAsInput": false, "IsSetAsOutput": false, "Excluded": false, - "X": 1132.6999349984831, - "Y": 419.53457531974652 + "ShowGeometry": true, + "X": 1228.1999349984831, + "Y": 420.03457531974652 }, { - "ShowGeometry": false, + "Id": "29c47699a5c1473d87ca352babaca6ca", "Name": "Number Slider", - "Id": "f574c9563efa4ed5b50c6e23239fc856", "IsSetAsInput": true, "IsSetAsOutput": false, "Excluded": false, - "X": 733.69993499848306, - "Y": 571.53457531974652 + "ShowGeometry": false, + "X": 780.19993499848306, + "Y": 631.03457531974652 }, { - "ShowGeometry": false, + "Id": "07575189eaca4aa2ac49ba1dec21d0f5", "Name": "Plane.XY", - "Id": "a7abb5cdaf5849e199f2f163186b4ad0", "IsSetAsInput": false, "IsSetAsOutput": false, "Excluded": false, - "X": 733.69993499848306, - "Y": 462.53457531974652 + "ShowGeometry": false, + "X": 780.19993499848306, + "Y": 472.03457531974647 } ], "Annotations": [], - "X": -154.784728278406, - "Y": -25.9829774649526, - "Zoom": 1.02988563947099 + "X": -123.8357195820962, + "Y": -154.0923529661743, + "Zoom": 0.867977507649019 } } \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.Rotate(geometry, basePlane, degrees).md b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.Rotate(geometry, basePlane, degrees).md new file mode 100644 index 00000000000..cd539a37014 --- /dev/null +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.Rotate(geometry, basePlane, degrees).md @@ -0,0 +1,10 @@ +## In Depth +`Geometry.Rotate (basePlane, degrees)` rotates an input geometry around an origin point and axis vector by a given degree. + +In the example below, a cone is rotated about the Y-axis vector by its end point. + + +___ +## Example File + +![Geometry.Rotate(basePlane, degrees)](./Autodesk.DesignScript.Geometry.Geometry.Rotate(geometry,%20basePlane,%20degrees)_img.jpg) \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.Rotate(geometry, basePlane, degrees)_img.jpg b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.Rotate(geometry, basePlane, degrees)_img.jpg new file mode 100644 index 00000000000..05b494946cd Binary files /dev/null and b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.Rotate(geometry, basePlane, degrees)_img.jpg differ diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.Rotate(geometry, origin, axis, degrees).dyn b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.Rotate(geometry, origin, axis, degrees).dyn new file mode 100644 index 00000000000..420edca7ab7 --- /dev/null +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.Rotate(geometry, origin, axis, degrees).dyn @@ -0,0 +1,493 @@ +{ + "Uuid": "7a21b4d6-da96-4642-ac72-38096a8d2d9e", + "IsCustomNode": false, + "Description": "", + "Name": "Autodesk.DesignScript.Geometry.Geometry.Rotate", + "ElementResolver": { + "ResolutionMap": {} + }, + "Inputs": [ + { + "Id": "5df4f08568d24e6ea79e9e563f64dc4c", + "Name": "Number Slider", + "Type": "number", + "Type2": "number", + "Value": "44.6", + "MaximumValue": 359.0, + "MinimumValue": 1.0, + "StepValue": 0.1, + "NumberType": "Double", + "Description": "Produces numeric values", + "SelectedIndex": 0 + } + ], + "Outputs": [], + "Nodes": [ + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "13e573142a9343d5aec2789c22771d67", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "d9372dccebd24da381a1eb3b4c0db1ca", + "Name": "startPoint", + "Description": "Point\nDefault value : Autodesk.DesignScript.Geometry.Point.ByCoordinates(0, 0, 0)", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "12981029543e4024b14f84ef839f171e", + "Name": "endPoint", + "Description": "Point\nDefault value : Autodesk.DesignScript.Geometry.Point.ByCoordinates(0, 0, 1)", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "b7e6fcbe7122491ab4e8db92292da842", + "Name": "startRadius", + "Description": "double\nDefault value : 1", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "d8c893dce194408f9dad462af7b6bc4e", + "Name": "Cone", + "Description": "Cone", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Cone.ByPointsRadius@Autodesk.DesignScript.Geometry.Point,Autodesk.DesignScript.Geometry.Point,double", + "Replication": "Auto", + "Description": "Create a Cone with given base radius at start Point, extending to a apex at end Point.\n\nCone.ByPointsRadius (startPoint: Point = Autodesk.DesignScript.Geometry.Point.ByCoordinates(0, 0, 0), endPoint: Point = Autodesk.DesignScript.Geometry.Point.ByCoordinates(0, 0, 1), startRadius: double = 1): Cone" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "ee3dccd2ce4b42aaa81d30f40dfb82f2", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "d615568dc22e4ba2b3d423a17a93b114", + "Name": "x", + "Description": "X coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "b2284034971745b794a1a6a154a0d140", + "Name": "y", + "Description": "Y coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "ccbdfcf90c214e47b13d5fb0a7cc3075", + "Name": "z", + "Description": "Z coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "ff50777b664342e3a9dc1714bb6df9ed", + "Name": "Point", + "Description": "Point created by coordinates", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Point.ByCoordinates@double,double,double", + "Replication": "Auto", + "Description": "Form a Point given 3 cartesian coordinates\n\nPoint.ByCoordinates (x: double = 0, y: double = 0, z: double = 0): Point" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "5d20c9ef37f1409694160e9e2e2c79c6", + "NodeType": "CodeBlockNode", + "Inputs": [], + "Outputs": [ + { + "Id": "23327117a90a4f8db4b540367a5adef8", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "16a0f9410142494bb97bf55e4ac3c5cf", + "Name": "", + "Description": "Value of expression at line 2", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "29a8047f30fc40d2a8c264e64ecdff61", + "Name": "", + "Description": "Value of expression at line 3", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "5;\n2;\n8;" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "2714f9bffdbf462f8b6b8657273d971d", + "NodeType": "FunctionNode", + "Inputs": [], + "Outputs": [ + { + "Id": "a4b37155e01c4b9e9a7d40c114b9e56a", + "Name": "Point", + "Description": "Origin point", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Point.Origin", + "Replication": "Auto", + "Description": "Get the Origin point (0,0,0)\n\nPoint.Origin ( ): Point" + }, + { + "ConcreteType": "CoreNodeModels.Input.DoubleSlider, CoreNodeModels", + "NumberType": "Double", + "MaximumValue": 359.0, + "MinimumValue": 1.0, + "StepValue": 0.1, + "Id": "5df4f08568d24e6ea79e9e563f64dc4c", + "NodeType": "NumberInputNode", + "Inputs": [], + "Outputs": [ + { + "Id": "77cb8626ee544bd29e1e31ac52f372c8", + "Name": "", + "Description": "Double", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Produces numeric values", + "InputValue": 44.6 + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "f861229e52d4432cab373e1783ffe0e1", + "NodeType": "FunctionNode", + "Inputs": [], + "Outputs": [ + { + "Id": "d2caaee0f6a949e79be7739a8d7d0ec8", + "Name": "Plane", + "Description": "Plane at XY plane of world", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Plane.XY", + "Replication": "Auto", + "Description": "Creates a plane in the world XY\n\nPlane.XY ( ): Plane" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "9f7707b57cde42d081fd2c911e21b190", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "9f15601e9ec349e3b409c5af6417b1d8", + "Name": "geometry", + "Description": "Autodesk.DesignScript.Geometry.Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "c6e711e964964f569c0c58cd78b7eed3", + "Name": "origin", + "Description": "Point", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "81070940bd5544f8832e8927d438f39b", + "Name": "axis", + "Description": "Vector", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "15adf63fd5a3485fbbec705ae1f3df73", + "Name": "degrees", + "Description": "double\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "bc18498ebcc947ed9d75d7f96366b9fc", + "Name": "Geometry", + "Description": "Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Geometry.Rotate@Autodesk.DesignScript.Geometry.Point,Autodesk.DesignScript.Geometry.Vector,double", + "Replication": "Auto", + "Description": "Rotates an object around an origin and an axis by a specified degree\n\nGeometry.Rotate (origin: Point, axis: Vector, degrees: double = 0): Geometry" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "156c22bf4ded4e459071376b630c7206", + "NodeType": "FunctionNode", + "Inputs": [], + "Outputs": [ + { + "Id": "fad657465578487087a162acf2979138", + "Name": "Vector", + "Description": "Vector", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Vector.YAxis", + "Replication": "Auto", + "Description": "Get the canonical Y axis Vector (0,1,0)\n\nVector.YAxis ( ): Vector" + } + ], + "Connectors": [ + { + "Start": "d8c893dce194408f9dad462af7b6bc4e", + "End": "9f15601e9ec349e3b409c5af6417b1d8", + "Id": "2971d3f350e449848552e6d983bfea97", + "IsHidden": "False" + }, + { + "Start": "ff50777b664342e3a9dc1714bb6df9ed", + "End": "12981029543e4024b14f84ef839f171e", + "Id": "d3421c846a174152bed0e846603d9b26", + "IsHidden": "False" + }, + { + "Start": "ff50777b664342e3a9dc1714bb6df9ed", + "End": "c6e711e964964f569c0c58cd78b7eed3", + "Id": "387e34f4f9844e6696f01deac3708f46", + "IsHidden": "False" + }, + { + "Start": "23327117a90a4f8db4b540367a5adef8", + "End": "d615568dc22e4ba2b3d423a17a93b114", + "Id": "61e9f28886e64528ba9e7061b820cf26", + "IsHidden": "False" + }, + { + "Start": "23327117a90a4f8db4b540367a5adef8", + "End": "b7e6fcbe7122491ab4e8db92292da842", + "Id": "35273e69b04c4c6f8b1a0183cf8d626d", + "IsHidden": "False" + }, + { + "Start": "16a0f9410142494bb97bf55e4ac3c5cf", + "End": "b2284034971745b794a1a6a154a0d140", + "Id": "d224dfb598334d4cb1ef3e71813fc279", + "IsHidden": "False" + }, + { + "Start": "29a8047f30fc40d2a8c264e64ecdff61", + "End": "ccbdfcf90c214e47b13d5fb0a7cc3075", + "Id": "e5d17457b6d04ff99a4930b7c6d50d1a", + "IsHidden": "False" + }, + { + "Start": "a4b37155e01c4b9e9a7d40c114b9e56a", + "End": "d9372dccebd24da381a1eb3b4c0db1ca", + "Id": "06f7ad4898d04a5ba28420b58deeed8c", + "IsHidden": "False" + }, + { + "Start": "77cb8626ee544bd29e1e31ac52f372c8", + "End": "15adf63fd5a3485fbbec705ae1f3df73", + "Id": "baf2bf146dbb422a95b27a2a5fafe2ed", + "IsHidden": "False" + }, + { + "Start": "fad657465578487087a162acf2979138", + "End": "81070940bd5544f8832e8927d438f39b", + "Id": "6064a03269c1469c96517c5fb0729a03", + "IsHidden": "False" + } + ], + "Dependencies": [], + "NodeLibraryDependencies": [], + "Thumbnail": "", + "GraphDocumentationURL": null, + "ExtensionWorkspaceData": [ + { + "ExtensionGuid": "28992e1d-abb9-417f-8b1b-05e053bee670", + "Name": "Properties", + "Version": "2.19", + "Data": {} + } + ], + "Author": "None provided", + "Linting": { + "activeLinter": "None", + "activeLinterId": "7b75fb44-43fd-4631-a878-29f4d5d8399a", + "warningCount": 0, + "errorCount": 0 + }, + "Bindings": [], + "View": { + "Dynamo": { + "ScaleFactor": 1.0, + "HasRunWithoutCrash": true, + "IsVisibleInDynamoLibrary": true, + "Version": "2.19.0.5874", + "RunType": "Automatic", + "RunPeriod": "1000" + }, + "Camera": { + "Name": "_Background Preview", + "EyeX": 17.360422134399414, + "EyeY": 14.356039047241211, + "EyeZ": -22.005037307739258, + "LookX": -5.5490322113037109, + "LookY": -6.5384988784790039, + "LookZ": 28.051952362060547, + "UpX": -0.0016934159211814404, + "UpY": 0.9999619722366333, + "UpZ": 0.0085604013875126839 + }, + "ConnectorPins": [], + "NodeViews": [ + { + "Id": "13e573142a9343d5aec2789c22771d67", + "Name": "Cone.ByPointsRadius", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 855.205487096928, + "Y": 76.86434976917451 + }, + { + "Id": "ee3dccd2ce4b42aaa81d30f40dfb82f2", + "Name": "Point.ByCoordinates", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": false, + "X": 530.205487096928, + "Y": 200.86434976917451 + }, + { + "Id": "5d20c9ef37f1409694160e9e2e2c79c6", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 276.205487096928, + "Y": 209.51934976917448 + }, + { + "Id": "2714f9bffdbf462f8b6b8657273d971d", + "Name": "Point.Origin", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 530.205487096928, + "Y": 53.86434976917451 + }, + { + "Id": "5df4f08568d24e6ea79e9e563f64dc4c", + "Name": "Number Slider", + "IsSetAsInput": true, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": false, + "X": 855.205487096928, + "Y": 436.864349769175 + }, + { + "Id": "f861229e52d4432cab373e1783ffe0e1", + "Name": "Plane.XY", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": false, + "X": 887.268152168607, + "Y": 603.867151985068 + }, + { + "Id": "9f7707b57cde42d081fd2c911e21b190", + "Name": "Geometry.Rotate", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1303.205487096928, + "Y": 210.86434976917451 + }, + { + "Id": "156c22bf4ded4e459071376b630c7206", + "Name": "Vector.YAxis", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 855.205487096928, + "Y": 288.86434976917451 + } + ], + "Annotations": [], + "X": -102.63365798480334, + "Y": 6.6604935247158039, + "Zoom": 0.69561644130111611 + } +} \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.Rotate(geometry, origin, axis, degrees).md b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.Rotate(geometry, origin, axis, degrees).md new file mode 100644 index 00000000000..ebda675e542 --- /dev/null +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.Rotate(geometry, origin, axis, degrees).md @@ -0,0 +1,9 @@ +## In Depth +`Geometry.Rotate (origin, axis, degrees)` rotates an input geometry around a base plane by a defined degree. + +In the example below, a cone is rotated around the XY plane with a number slider. + +___ +## Example File + +![Geometry.Rotate(origin, axis, degrees)](./Autodesk.DesignScript.Geometry.Geometry.Rotate(geometry,%20origin,%20axis,%20degrees)_img.jpg) \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.Rotate(geometry, origin, axis, degrees)_img.jpg b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.Rotate(geometry, origin, axis, degrees)_img.jpg new file mode 100644 index 00000000000..b4943d592bc Binary files /dev/null and b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.Rotate(geometry, origin, axis, degrees)_img.jpg differ diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.Scale(amount).md b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.Scale(amount).md deleted file mode 100644 index 06bda4aee3e..00000000000 --- a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.Scale(amount).md +++ /dev/null @@ -1,7 +0,0 @@ -## In Depth -Scale uniformly around the origin. -___ -## Example File - -![Scale (amount)](./Autodesk.DesignScript.Geometry.Geometry.Scale(amount)_img.jpg) - diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.Scale(amount)_img.jpg b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.Scale(amount)_img.jpg deleted file mode 100644 index 1eeefd144e2..00000000000 Binary files a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.Scale(amount)_img.jpg and /dev/null differ diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.Scale(amount).dyn b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.Scale(geometry, amount).dyn similarity index 62% rename from doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.Scale(amount).dyn rename to doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.Scale(geometry, amount).dyn index a14d7a6caf5..9d985c40e4e 100644 --- a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.Scale(amount).dyn +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.Scale(geometry, amount).dyn @@ -1,34 +1,35 @@ { - "Uuid": "3c9d0464-8643-5ffe-96e5-ab1769818209", + "Uuid": "15717816-43f4-4936-925c-f88328588ea1", "IsCustomNode": false, "Description": "", - "Name": "Scale", + "Name": "Autodesk.DesignScript.Geometry.Geometry.Scale", "ElementResolver": { "ResolutionMap": {} }, "Inputs": [ { - "Id": "f574c9563efa4ed5b50c6e23239fc856", + "Id": "d8c8dedbc22c4fa9886da484eaebf155", "Name": "Number Slider", "Type": "number", + "Type2": "number", "Value": "0.5", "MaximumValue": 5.0, "MinimumValue": 0.1, "StepValue": 0.1, "NumberType": "Double", - "Description": "A slider that produces numeric values." + "Description": "Produces numeric values", + "SelectedIndex": 0 } ], "Outputs": [], "Nodes": [ { "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "c48c2e96135e4c9083f4eca2965c30a3", "NodeType": "FunctionNode", - "FunctionSignature": "Autodesk.DesignScript.Geometry.Cone.ByPointsRadius@Autodesk.DesignScript.Geometry.Point,Autodesk.DesignScript.Geometry.Point,double", - "Id": "9353c4dfe5c94c3b89718f7d9b2123ba", "Inputs": [ { - "Id": "11255cc86e8f4df38350ee2950ffa5d8", + "Id": "2c246f2a6d694ba2bc9a21af029225e0", "Name": "startPoint", "Description": "Point\nDefault value : Autodesk.DesignScript.Geometry.Point.ByCoordinates(0, 0, 0)", "UsingDefaultValue": true, @@ -37,7 +38,7 @@ "KeepListStructure": false }, { - "Id": "e038aaf4445e4b4aa58ffe59e55ee83e", + "Id": "c52af521d55f4bedb77da4ccdac54f3b", "Name": "endPoint", "Description": "Point\nDefault value : Autodesk.DesignScript.Geometry.Point.ByCoordinates(0, 0, 1)", "UsingDefaultValue": true, @@ -46,7 +47,7 @@ "KeepListStructure": false }, { - "Id": "a6f8ba4847374c23abd21fb91d6cc1b8", + "Id": "124f5d4f718e45b1a869d8608af281da", "Name": "startRadius", "Description": "double\nDefault value : 1", "UsingDefaultValue": true, @@ -57,7 +58,7 @@ ], "Outputs": [ { - "Id": "c9568851b0c64426aeac8c2e8b041d78", + "Id": "81a0219710694f59ae401b21646a6afb", "Name": "Cone", "Description": "Cone", "UsingDefaultValue": false, @@ -66,37 +67,37 @@ "KeepListStructure": false } ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Cone.ByPointsRadius@Autodesk.DesignScript.Geometry.Point,Autodesk.DesignScript.Geometry.Point,double", "Replication": "Auto", "Description": "Create a Cone with given base radius at start Point, extending to a apex at end Point.\n\nCone.ByPointsRadius (startPoint: Point = Autodesk.DesignScript.Geometry.Point.ByCoordinates(0, 0, 0), endPoint: Point = Autodesk.DesignScript.Geometry.Point.ByCoordinates(0, 0, 1), startRadius: double = 1): Cone" }, { "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "847ede97f27e450eaaa588eda1839e27", "NodeType": "FunctionNode", - "FunctionSignature": "Autodesk.DesignScript.Geometry.Point.ByCoordinates@double,double,double", - "Id": "fb784abe345a49ce9476f22cbf49e7a9", "Inputs": [ { - "Id": "92e1353d58ec49358ce8bf22236b563f", + "Id": "d686a90bed184481a2e48a4b6701037d", "Name": "x", - "Description": "double\nDefault value : 0", + "Description": "X coordinate\n\ndouble\nDefault value : 0", "UsingDefaultValue": true, "Level": 2, "UseLevels": false, "KeepListStructure": false }, { - "Id": "0950fcc0c89243de9bcc5039f37dd69b", + "Id": "3bf1a491f1e04639972f4eaf66497b05", "Name": "y", - "Description": "double\nDefault value : 0", + "Description": "Y coordinate\n\ndouble\nDefault value : 0", "UsingDefaultValue": true, "Level": 2, "UseLevels": false, "KeepListStructure": false }, { - "Id": "f7c49a6c6691489da61769f608d777dc", + "Id": "5c5fa926a21840bc8a0d9463aae3acec", "Name": "z", - "Description": "double\nDefault value : 0", + "Description": "Z coordinate\n\ndouble\nDefault value : 0", "UsingDefaultValue": true, "Level": 2, "UseLevels": false, @@ -105,27 +106,27 @@ ], "Outputs": [ { - "Id": "860e74616e1d4f2d8bc45bd25e06bfb1", + "Id": "77566d0de50f43e1a3900acb978b75f3", "Name": "Point", - "Description": "Point", + "Description": "Point created by coordinates", "UsingDefaultValue": false, "Level": 2, "UseLevels": false, "KeepListStructure": false } ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Point.ByCoordinates@double,double,double", "Replication": "Auto", "Description": "Form a Point given 3 cartesian coordinates\n\nPoint.ByCoordinates (x: double = 0, y: double = 0, z: double = 0): Point" }, { "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "66595c8b24fa4c2dbd31a6ae3f63a8ad", "NodeType": "CodeBlockNode", - "Code": "5;\n2;\n8;", - "Id": "47226805f4414bd689711e386a9009d1", "Inputs": [], "Outputs": [ { - "Id": "50b7458de47b4fee9ad782244e6a5d60", + "Id": "b0303bdd5d8c4395b91ddd604c00ca58", "Name": "", "Description": "Value of expression at line 1", "UsingDefaultValue": false, @@ -134,7 +135,7 @@ "KeepListStructure": false }, { - "Id": "04de626940c94724832b556e62bb3960", + "Id": "4d088d60ff474032a1fb7d5e10531b37", "Name": "", "Description": "Value of expression at line 2", "UsingDefaultValue": false, @@ -143,7 +144,7 @@ "KeepListStructure": false }, { - "Id": "1601058ae8de42c486730890957ecdf1", + "Id": "5c707eb438fb4a32bb2646394e94408d", "Name": "", "Description": "Value of expression at line 3", "UsingDefaultValue": false, @@ -153,41 +154,41 @@ } ], "Replication": "Disabled", - "Description": "Allows for DesignScript code to be authored directly" + "Description": "Allows for DesignScript code to be authored directly", + "Code": "5;\n2;\n8;" }, { "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "0bddc8057044418fa89774bb7b4cead7", "NodeType": "FunctionNode", - "FunctionSignature": "Autodesk.DesignScript.Geometry.Point.Origin", - "Id": "cb29ce4de19648ee800f936596f93067", "Inputs": [], "Outputs": [ { - "Id": "9263de8ae6834f4ebe459fdf3094e24b", + "Id": "99a3aa0fe10e4399b04d7b677598a310", "Name": "Point", - "Description": "Point", + "Description": "Origin point", "UsingDefaultValue": false, "Level": 2, "UseLevels": false, "KeepListStructure": false } ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Point.Origin", "Replication": "Auto", "Description": "Get the Origin point (0,0,0)\n\nPoint.Origin ( ): Point" }, { "ConcreteType": "CoreNodeModels.Input.DoubleSlider, CoreNodeModels", - "NodeType": "NumberInputNode", "NumberType": "Double", "MaximumValue": 5.0, "MinimumValue": 0.1, "StepValue": 0.1, - "InputValue": 0.5, - "Id": "f574c9563efa4ed5b50c6e23239fc856", + "Id": "d8c8dedbc22c4fa9886da484eaebf155", + "NodeType": "NumberInputNode", "Inputs": [], "Outputs": [ { - "Id": "86181f41a0af422eab7f1fd3e5fa98d3", + "Id": "0a3e849db927424cb2bedaab7c3043d8", "Name": "", "Description": "Double", "UsingDefaultValue": false, @@ -197,16 +198,16 @@ } ], "Replication": "Disabled", - "Description": "A slider that produces numeric values." + "Description": "Produces numeric values", + "InputValue": 0.5 }, { "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "400cded2b0654eee9c0ca41accea5d94", "NodeType": "FunctionNode", - "FunctionSignature": "Autodesk.DesignScript.Geometry.Geometry.Scale@double", - "Id": "721349478e4d4745acfec4a1b8fa443f", "Inputs": [ { - "Id": "116095654b0d408c8c80a3f68390abb4", + "Id": "555d28e00aec4b7398d32767a6379be7", "Name": "geometry", "Description": "Autodesk.DesignScript.Geometry.Geometry", "UsingDefaultValue": false, @@ -215,7 +216,7 @@ "KeepListStructure": false }, { - "Id": "d0a97f5b50ba46f3a59411e214df424d", + "Id": "8df7edb833ca4b05a88238e738710f26", "Name": "amount", "Description": "double\nDefault value : 1", "UsingDefaultValue": true, @@ -226,7 +227,7 @@ ], "Outputs": [ { - "Id": "856ba48d98724f2fb105c918c83f0068", + "Id": "e1a0a5f21ab2434189534c2b572aca27", "Name": "Geometry", "Description": "Geometry", "UsingDefaultValue": false, @@ -235,19 +236,19 @@ "KeepListStructure": false } ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Geometry.Scale@double", "Replication": "Auto", "Description": "Scale uniformly around the origin\n\nGeometry.Scale (amount: double = 1): Geometry" }, { "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "ca42ed4eafd24a0d8e1a8bfc42d77ab8", "NodeType": "FunctionNode", - "FunctionSignature": "Autodesk.DesignScript.Geometry.Line.ByBestFitThroughPoints@Autodesk.DesignScript.Geometry.Point[]", - "Id": "15ef5b70009c4231960d57fcde546108", "Inputs": [ { - "Id": "8c7ca67d308644eb9306278f2f274680", + "Id": "3501ce7391294f7287938cb9583a91d0", "Name": "bestFitPoints", - "Description": "Point[]", + "Description": "List of points to best fit line\n\nPoint[]", "UsingDefaultValue": false, "Level": 2, "UseLevels": false, @@ -256,26 +257,26 @@ ], "Outputs": [ { - "Id": "347fa7bd56124ab68edfee92dad4d52a", + "Id": "cd779b2dbdc04ec0827b214d719bbeff", "Name": "Line", - "Description": "Line", + "Description": "Line from fit through points", "UsingDefaultValue": false, "Level": 2, "UseLevels": false, "KeepListStructure": false } ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Line.ByBestFitThroughPoints@Autodesk.DesignScript.Geometry.Point[]", "Replication": "Auto", "Description": "Creates a Line best approximating a scatter plot of Points.\n\nLine.ByBestFitThroughPoints (bestFitPoints: Point[]): Line" }, { "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "7382bbfe1a474171972d797347494219", "NodeType": "FunctionNode", - "FunctionSignature": "Autodesk.DesignScript.Geometry.Vertex.PointGeometry", - "Id": "e53c0cbf226c49c7bddc96e4ffa8b983", "Inputs": [ { - "Id": "a3c673e540d044849b1c2b495b9661eb", + "Id": "abb533b1cfc648ae8e294fb5dc741433", "Name": "vertex", "Description": "Autodesk.DesignScript.Geometry.Vertex", "UsingDefaultValue": false, @@ -286,7 +287,7 @@ ], "Outputs": [ { - "Id": "fd0238de0c25422aa1a227f164c47094", + "Id": "3d62b16a33124cefac58a150bd19ec2e", "Name": "Point", "Description": "Point", "UsingDefaultValue": false, @@ -295,17 +296,17 @@ "KeepListStructure": false } ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Vertex.PointGeometry", "Replication": "Auto", "Description": "The Point where this Vertex is located\n\nVertex.PointGeometry: Point" }, { "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "d4a84960c10c4827b8a9723231964bc0", "NodeType": "FunctionNode", - "FunctionSignature": "Autodesk.DesignScript.Geometry.Topology.Vertices", - "Id": "a04281510d5f4a21921258bc60f2a08e", "Inputs": [ { - "Id": "50e0279b66d443f49f5c01db672e5c3f", + "Id": "dfe1b7ab2e8041eb9bdf1e455d01d2de", "Name": "topology", "Description": "Autodesk.DesignScript.Geometry.Topology", "UsingDefaultValue": false, @@ -316,7 +317,7 @@ ], "Outputs": [ { - "Id": "62a4001097dd4da1b1ad40a0bbaf2138", + "Id": "4fc74bd1a2714629be8a4f0979dd3d47", "Name": "Vertex[]", "Description": "Vertex[]", "UsingDefaultValue": false, @@ -325,37 +326,37 @@ "KeepListStructure": false } ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Topology.Vertices", "Replication": "Auto", "Description": "The Vertices of the Topology\n\nTopology.Vertices: Vertex[]" }, { "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "74ffae9cfcf24837b5d42e91a21b7b64", "NodeType": "FunctionNode", - "FunctionSignature": "Autodesk.DesignScript.Geometry.Circle.ByCenterPointRadiusNormal@Autodesk.DesignScript.Geometry.Point,double,Autodesk.DesignScript.Geometry.Vector", - "Id": "e44e013a602a493d9db19dc1f5b491c4", "Inputs": [ { - "Id": "3e1646efd60648398f4608e509bd59f1", + "Id": "a7b7ff676b2641c690ef5a0ae4fbd6d3", "Name": "centerPoint", - "Description": "Point\nDefault value : Autodesk.DesignScript.Geometry.Point.ByCoordinates(0, 0, 0)", + "Description": "Center point of circle\n\nPoint\nDefault value : Autodesk.DesignScript.Geometry.Point.ByCoordinates(0, 0, 0)", "UsingDefaultValue": true, "Level": 2, "UseLevels": false, "KeepListStructure": false }, { - "Id": "bac1b252f410424cb101ee9f6380b86a", + "Id": "b7f113a0692b4534b8b5fe919e39f667", "Name": "radius", - "Description": "double\nDefault value : 1", + "Description": "Radius\n\ndouble\nDefault value : 1", "UsingDefaultValue": true, "Level": 2, "UseLevels": false, "KeepListStructure": false }, { - "Id": "0feff62c2d2f4b8698e97744f12c6956", + "Id": "d9bc4f61abd64d28963a31b133f60957", "Name": "normal", - "Description": "Vector\nDefault value : Autodesk.DesignScript.Geometry.Vector.ByCoordinates(0, 0, 1)", + "Description": "Normal direction vector\n\nVector\nDefault value : Autodesk.DesignScript.Geometry.Vector.ByCoordinates(0, 0, 1)", "UsingDefaultValue": true, "Level": 2, "UseLevels": false, @@ -364,26 +365,26 @@ ], "Outputs": [ { - "Id": "43d5c3e9cff14d80a16b81f2b7c7b1c0", + "Id": "81eb703b4c6a4c6eb7d1b687a469ccd7", "Name": "Circle", - "Description": "Circle", + "Description": "Circle created with center point radius and normal", "UsingDefaultValue": false, "Level": 2, "UseLevels": false, "KeepListStructure": false } ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Circle.ByCenterPointRadiusNormal@Autodesk.DesignScript.Geometry.Point,double,Autodesk.DesignScript.Geometry.Vector", "Replication": "Auto", "Description": "Creates a Circle with specified center Point, radius, and normal direction.\n\nCircle.ByCenterPointRadiusNormal (centerPoint: Point = Autodesk.DesignScript.Geometry.Point.ByCoordinates(0, 0, 0), radius: double = 1, normal: Vector = Autodesk.DesignScript.Geometry.Vector.ByCoordinates(0, 0, 1)): Circle" }, { "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "2a35685643a34356a7cd02facebd3ff0", "NodeType": "FunctionNode", - "FunctionSignature": "Autodesk.DesignScript.Geometry.Vector.ByTwoPoints@Autodesk.DesignScript.Geometry.Point,Autodesk.DesignScript.Geometry.Point", - "Id": "1a560a7bdc98489689ce4883cabc2d25", "Inputs": [ { - "Id": "eaa30595fecb4bea97da347cc9fb9489", + "Id": "90666b4cf73440a78e6fefb78ba2884a", "Name": "start", "Description": "Point", "UsingDefaultValue": false, @@ -392,7 +393,7 @@ "KeepListStructure": false }, { - "Id": "1ace90ae535240cfb357aa06104087b5", + "Id": "5fb7efe9d0074a01bc60858b00b3439f", "Name": "end", "Description": "Point", "UsingDefaultValue": false, @@ -403,7 +404,7 @@ ], "Outputs": [ { - "Id": "29104714b626452e887405b7711fae7f", + "Id": "07d96e07d5954a529e5eae3859d36327", "Name": "Vector", "Description": "Vector", "UsingDefaultValue": false, @@ -412,230 +413,266 @@ "KeepListStructure": false } ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Vector.ByTwoPoints@Autodesk.DesignScript.Geometry.Point,Autodesk.DesignScript.Geometry.Point", "Replication": "Auto", "Description": "Form a Vector by two end points. The result is a vector from the start to the end point.\n\nVector.ByTwoPoints (start: Point, end: Point): Vector" } ], "Connectors": [ { - "Start": "c9568851b0c64426aeac8c2e8b041d78", - "End": "116095654b0d408c8c80a3f68390abb4", - "Id": "0166dc36b8fb45bb844171893a079731" + "Start": "81a0219710694f59ae401b21646a6afb", + "End": "555d28e00aec4b7398d32767a6379be7", + "Id": "37dfeda9ef23485096fd6ccded9e0844", + "IsHidden": "False" }, { - "Start": "c9568851b0c64426aeac8c2e8b041d78", - "End": "50e0279b66d443f49f5c01db672e5c3f", - "Id": "8016be2a0e05487d975c42ebece8e798" + "Start": "81a0219710694f59ae401b21646a6afb", + "End": "dfe1b7ab2e8041eb9bdf1e455d01d2de", + "Id": "08c9af3e1e4d46c5b920d315acf4d5e7", + "IsHidden": "False" }, { - "Start": "860e74616e1d4f2d8bc45bd25e06bfb1", - "End": "e038aaf4445e4b4aa58ffe59e55ee83e", - "Id": "afddbbd0f6014ca5909c75fe2462aed2" + "Start": "77566d0de50f43e1a3900acb978b75f3", + "End": "c52af521d55f4bedb77da4ccdac54f3b", + "Id": "1452418b936e4354b57e0cabf776000c", + "IsHidden": "False" }, { - "Start": "860e74616e1d4f2d8bc45bd25e06bfb1", - "End": "1ace90ae535240cfb357aa06104087b5", - "Id": "b6311a687b76440bbd4b0005deabe6da" + "Start": "77566d0de50f43e1a3900acb978b75f3", + "End": "5fb7efe9d0074a01bc60858b00b3439f", + "Id": "f3b2efa2257a4110a5da1fe15a41eaf2", + "IsHidden": "False" }, { - "Start": "50b7458de47b4fee9ad782244e6a5d60", - "End": "92e1353d58ec49358ce8bf22236b563f", - "Id": "39f79fdae5c041409efd27129367ac00" + "Start": "b0303bdd5d8c4395b91ddd604c00ca58", + "End": "d686a90bed184481a2e48a4b6701037d", + "Id": "171f1a91cba147d2b572e9994a761cb7", + "IsHidden": "False" }, { - "Start": "50b7458de47b4fee9ad782244e6a5d60", - "End": "a6f8ba4847374c23abd21fb91d6cc1b8", - "Id": "bec5f8f974534d20bdfb61715e6e892d" + "Start": "b0303bdd5d8c4395b91ddd604c00ca58", + "End": "124f5d4f718e45b1a869d8608af281da", + "Id": "fc6d4aa610f94e41a97d2dc52bd8302a", + "IsHidden": "False" }, { - "Start": "50b7458de47b4fee9ad782244e6a5d60", - "End": "bac1b252f410424cb101ee9f6380b86a", - "Id": "886eed5a0793432f8a95cf4b6f0058eb" + "Start": "b0303bdd5d8c4395b91ddd604c00ca58", + "End": "b7f113a0692b4534b8b5fe919e39f667", + "Id": "2e8e441e15c44cbcb19e5223c86c6bb2", + "IsHidden": "False" }, { - "Start": "04de626940c94724832b556e62bb3960", - "End": "0950fcc0c89243de9bcc5039f37dd69b", - "Id": "2f9f388295cf47cdaeb0799f8578f81e" + "Start": "4d088d60ff474032a1fb7d5e10531b37", + "End": "3bf1a491f1e04639972f4eaf66497b05", + "Id": "0ffd20f35d754f7d8185859c1a5a912c", + "IsHidden": "False" }, { - "Start": "1601058ae8de42c486730890957ecdf1", - "End": "f7c49a6c6691489da61769f608d777dc", - "Id": "dab2c33ae09d4099a38cffbbcfe8528c" + "Start": "5c707eb438fb4a32bb2646394e94408d", + "End": "5c5fa926a21840bc8a0d9463aae3acec", + "Id": "34d5820e455744b6bdd46948ac0fe4de", + "IsHidden": "False" }, { - "Start": "9263de8ae6834f4ebe459fdf3094e24b", - "End": "11255cc86e8f4df38350ee2950ffa5d8", - "Id": "53ba17fdb1df4f4a8bc6aeca23334ff7" + "Start": "99a3aa0fe10e4399b04d7b677598a310", + "End": "2c246f2a6d694ba2bc9a21af029225e0", + "Id": "61aa8bb9dcdb4cba94465831ffe2fb04", + "IsHidden": "False" }, { - "Start": "9263de8ae6834f4ebe459fdf3094e24b", - "End": "3e1646efd60648398f4608e509bd59f1", - "Id": "023e67aaf9c54a4fa4ae5fae69e8849f" + "Start": "99a3aa0fe10e4399b04d7b677598a310", + "End": "a7b7ff676b2641c690ef5a0ae4fbd6d3", + "Id": "10454aceacb84d85ac22c902c3de5986", + "IsHidden": "False" }, { - "Start": "9263de8ae6834f4ebe459fdf3094e24b", - "End": "eaa30595fecb4bea97da347cc9fb9489", - "Id": "4b1fad09d74c463daca2f5cce25b1973" + "Start": "99a3aa0fe10e4399b04d7b677598a310", + "End": "90666b4cf73440a78e6fefb78ba2884a", + "Id": "8fc22956d51642ae83c7c5af35e4a785", + "IsHidden": "False" }, { - "Start": "86181f41a0af422eab7f1fd3e5fa98d3", - "End": "d0a97f5b50ba46f3a59411e214df424d", - "Id": "59f7d3a1535d4689ab8265ae236efbd0" + "Start": "0a3e849db927424cb2bedaab7c3043d8", + "End": "8df7edb833ca4b05a88238e738710f26", + "Id": "42c3f96433354766a8515ba9246e554a", + "IsHidden": "False" }, { - "Start": "fd0238de0c25422aa1a227f164c47094", - "End": "8c7ca67d308644eb9306278f2f274680", - "Id": "31c74da96d9640c4a18f3be35fff91f8" + "Start": "3d62b16a33124cefac58a150bd19ec2e", + "End": "3501ce7391294f7287938cb9583a91d0", + "Id": "d841e71b4e7a43d6b440e1ac3980ea2d", + "IsHidden": "False" }, { - "Start": "62a4001097dd4da1b1ad40a0bbaf2138", - "End": "a3c673e540d044849b1c2b495b9661eb", - "Id": "e7eb54b896b745be917ec91bde828ca6" + "Start": "4fc74bd1a2714629be8a4f0979dd3d47", + "End": "abb533b1cfc648ae8e294fb5dc741433", + "Id": "fc624499337545b1866b67f26fb3760b", + "IsHidden": "False" }, { - "Start": "29104714b626452e887405b7711fae7f", - "End": "0feff62c2d2f4b8698e97744f12c6956", - "Id": "087c71a0f7a841ef8bfa242451b0b7fd" + "Start": "07d96e07d5954a529e5eae3859d36327", + "End": "d9bc4f61abd64d28963a31b133f60957", + "Id": "2ff4c21a039847a4a6bad55f32d133ea", + "IsHidden": "False" } ], "Dependencies": [], + "NodeLibraryDependencies": [], + "Thumbnail": "", + "GraphDocumentationURL": null, + "ExtensionWorkspaceData": [ + { + "ExtensionGuid": "28992e1d-abb9-417f-8b1b-05e053bee670", + "Name": "Properties", + "Version": "2.19", + "Data": {} + } + ], + "Author": "None provided", + "Linting": { + "activeLinter": "None", + "activeLinterId": "7b75fb44-43fd-4631-a878-29f4d5d8399a", + "warningCount": 0, + "errorCount": 0 + }, "Bindings": [], "View": { "Dynamo": { "ScaleFactor": 1.0, "HasRunWithoutCrash": true, "IsVisibleInDynamoLibrary": true, - "Version": "2.0.1.5055", + "Version": "2.19.0.5874", "RunType": "Automatic", "RunPeriod": "1000" }, "Camera": { - "Name": "Background Preview", - "EyeX": 22.851694107055664, - "EyeY": 8.0321903228759766, - "EyeZ": -13.034655570983887, - "LookX": -13.397122383117676, - "LookY": -1.9604576826095581, - "LookZ": 18.651371002197266, - "UpX": 0.076147742569446564, - "UpY": 0.99144482612609863, - "UpZ": -0.10601229965686798 + "Name": "_Background Preview", + "EyeX": 22.194293022155762, + "EyeY": 13.061295986175537, + "EyeZ": 12.223526000976563, + "LookX": -14.287055969238281, + "LookY": -3.3092584609985352, + "LookZ": -2.3112878799438477, + "UpX": -0.0086145587265491486, + "UpY": 0.9999619722366333, + "UpZ": -0.0013936252798885107 }, + "ConnectorPins": [], "NodeViews": [ { - "ShowGeometry": false, + "Id": "c48c2e96135e4c9083f4eca2965c30a3", "Name": "Cone.ByPointsRadius", - "Id": "9353c4dfe5c94c3b89718f7d9b2123ba", "IsSetAsInput": false, "IsSetAsOutput": false, "Excluded": false, - "X": 554.41661695367645, - "Y": 289.48648763088261 + "ShowGeometry": false, + "X": 576.91661695367645, + "Y": 325.34486798732212 }, { - "ShowGeometry": false, + "Id": "847ede97f27e450eaaa588eda1839e27", "Name": "Point.ByCoordinates", - "Id": "fb784abe345a49ce9476f22cbf49e7a9", "IsSetAsInput": false, "IsSetAsOutput": false, "Excluded": false, - "X": 296.41661695367645, - "Y": 224.48648763088261 + "ShowGeometry": false, + "X": 251.91661695367645, + "Y": 238.09486798732212 }, { - "ShowGeometry": true, + "Id": "66595c8b24fa4c2dbd31a6ae3f63a8ad", "Name": "Code Block", - "Id": "47226805f4414bd689711e386a9009d1", "IsSetAsInput": false, "IsSetAsOutput": false, "Excluded": false, - "X": 117.41661695367645, - "Y": 237.12648763088254 + "ShowGeometry": true, + "X": -2.0833830463235472, + "Y": 255.57736798732208 }, { - "ShowGeometry": true, + "Id": "0bddc8057044418fa89774bb7b4cead7", "Name": "Point.Origin", - "Id": "cb29ce4de19648ee800f936596f93067", "IsSetAsInput": false, "IsSetAsOutput": false, "Excluded": false, - "X": 296.41661695367645, - "Y": 107.48648763088261 + "ShowGeometry": true, + "X": 251.91661695367645, + "Y": 82.844867987322118 }, { - "ShowGeometry": false, + "Id": "d8c8dedbc22c4fa9886da484eaebf155", "Name": "Number Slider", - "Id": "f574c9563efa4ed5b50c6e23239fc856", "IsSetAsInput": true, "IsSetAsOutput": false, "Excluded": false, - "X": 1193.4166169536766, - "Y": 363.48648763088261 + "ShowGeometry": false, + "X": 1236.9166169536766, + "Y": 424.84486798732212 }, { - "ShowGeometry": true, + "Id": "400cded2b0654eee9c0ca41accea5d94", "Name": "Geometry.Scale", - "Id": "721349478e4d4745acfec4a1b8fa443f", "IsSetAsInput": false, "IsSetAsOutput": false, "Excluded": false, - "X": 1592.4166169536766, - "Y": 337.48648763088261 + "ShowGeometry": true, + "X": 1684.9166169536766, + "Y": 392.508130603522 }, { - "ShowGeometry": true, + "Id": "ca42ed4eafd24a0d8e1a8bfc42d77ab8", "Name": "Line.ByBestFitThroughPoints", - "Id": "15ef5b70009c4231960d57fcde546108", "IsSetAsInput": false, "IsSetAsOutput": false, "Excluded": false, - "X": 1592.4166169536766, - "Y": 228.48648763088261 + "ShowGeometry": true, + "X": 1684.9166169536766, + "Y": 243.84486798732212 }, { - "ShowGeometry": true, + "Id": "7382bbfe1a474171972d797347494219", "Name": "Vertex.PointGeometry", - "Id": "e53c0cbf226c49c7bddc96e4ffa8b983", "IsSetAsInput": false, "IsSetAsOutput": false, "Excluded": false, - "X": 1193.4166169536766, - "Y": 241.48648763088261 + "ShowGeometry": true, + "X": 1236.9166169536766, + "Y": 259.84486798732212 }, { - "ShowGeometry": true, + "Id": "d4a84960c10c4827b8a9723231964bc0", "Name": "Topology.Vertices", - "Id": "a04281510d5f4a21921258bc60f2a08e", "IsSetAsInput": false, "IsSetAsOutput": false, "Excluded": false, - "X": 873.41661695367645, - "Y": 241.48648763088261 + "ShowGeometry": true, + "X": 907.91661695367645, + "Y": 259.84486798732212 }, { - "ShowGeometry": true, + "Id": "74ffae9cfcf24837b5d42e91a21b7b64", "Name": "Circle.ByCenterPointRadiusNormal", - "Id": "e44e013a602a493d9db19dc1f5b491c4", "IsSetAsInput": false, "IsSetAsOutput": false, "Excluded": false, - "X": 1592.4166169536766, - "Y": 68.4864876308826 + "ShowGeometry": true, + "X": 1684.9166169536766, + "Y": 30.844867987322118 }, { - "ShowGeometry": true, + "Id": "2a35685643a34356a7cd02facebd3ff0", "Name": "Vector.ByTwoPoints", - "Id": "1a560a7bdc98489689ce4883cabc2d25", "IsSetAsInput": false, "IsSetAsOutput": false, "Excluded": false, - "X": 1193.4166169536766, - "Y": 107.48648763088261 + "ShowGeometry": true, + "X": 1236.9166169536766, + "Y": 82.844867987322118 } ], "Annotations": [], - "X": -317.930616567249, - "Y": 82.1162898797425, - "Zoom": 1.03605787560061 + "X": 35.242871926224382, + "Y": 69.635765978868562, + "Zoom": 0.54487872805980109 } } \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.Scale(geometry, amount).md b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.Scale(geometry, amount).md new file mode 100644 index 00000000000..565909f3c42 --- /dev/null +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.Scale(geometry, amount).md @@ -0,0 +1,9 @@ +## In Depth +`Geometry.Scale (amount)` scales an input geometry from the object centroid by an input factor. + +In the example below, a cone is scaled down with a number slider. The original cone edges are drawn for a visual reference. + +___ +## Example File + +![Geometry.Scale (amount)](./Autodesk.DesignScript.Geometry.Geometry.Scale(geometry,%20amount)_img.jpg) \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.Scale(geometry, amount)_img.jpg b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.Scale(geometry, amount)_img.jpg new file mode 100644 index 00000000000..33af580fe9e Binary files /dev/null and b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.Scale(geometry, amount)_img.jpg differ diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.Scale(geometry, basePoint, from, to).dyn b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.Scale(geometry, basePoint, from, to).dyn new file mode 100644 index 00000000000..b9cc59b8cc0 --- /dev/null +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.Scale(geometry, basePoint, from, to).dyn @@ -0,0 +1,574 @@ +{ + "Uuid": "23acca04-c19a-48e9-92a8-54053e4590ff", + "IsCustomNode": false, + "Description": "", + "Name": "Autodesk.DesignScript.Geometry.Geometry.Scale", + "ElementResolver": { + "ResolutionMap": {} + }, + "Inputs": [], + "Outputs": [], + "Nodes": [ + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "96721d839d694e0bb1fe02c1c3d3d8c2", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "221824a409594f76b0aab6166214e245", + "Name": "x", + "Description": "X coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "53f5d74c219b462c8c5e1b8b799db735", + "Name": "y", + "Description": "Y coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "5fde83003c464d178794725b08d23518", + "Name": "z", + "Description": "Z coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "61ef680b66a545eaa92cdc8da1909897", + "Name": "Point", + "Description": "Point created by coordinates", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Point.ByCoordinates@double,double,double", + "Replication": "Auto", + "Description": "Form a Point given 3 cartesian coordinates\n\nPoint.ByCoordinates (x: double = 0, y: double = 0, z: double = 0): Point" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "f83f42538dce4e13a4df8b2a832de97d", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "56124d23d7724c508ec07ae2fb2cdd9e", + "Name": "x", + "Description": "X coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "152c63242dad40298f01f475542df6b0", + "Name": "y", + "Description": "Y coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "f7da301ec515408d92dfd2c4dba47bfb", + "Name": "z", + "Description": "Z coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "aeea800475fe47899ebe5189d8b33153", + "Name": "Point", + "Description": "Point created by coordinates", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Point.ByCoordinates@double,double,double", + "Replication": "Auto", + "Description": "Form a Point given 3 cartesian coordinates\n\nPoint.ByCoordinates (x: double = 0, y: double = 0, z: double = 0): Point" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "5c0201e182a74e07a3c74b16884b7acb", + "NodeType": "CodeBlockNode", + "Inputs": [], + "Outputs": [ + { + "Id": "0cbe9d30924741929d38c4974e257328", + "Name": "", + "Description": "location", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "location = 10;" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "489ad96589d34d9ea17c8942bc080457", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "96c0afc139ff405facdf15ae0aa80e28", + "Name": "geometry", + "Description": "Autodesk.DesignScript.Geometry.Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "addc05a6597c47d2955c8ae0c92d9b01", + "Name": "basePoint", + "Description": "Point", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "639e779d122741c9a436925446e3af65", + "Name": "from", + "Description": "Point", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "b00b69034fa2400cab6944de23884a3c", + "Name": "to", + "Description": "Point", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "393c821d1d5940c6bb1bc37b82febb00", + "Name": "Geometry", + "Description": "Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Geometry.Scale@Autodesk.DesignScript.Geometry.Point,Autodesk.DesignScript.Geometry.Point,Autodesk.DesignScript.Geometry.Point", + "Replication": "Auto", + "Description": "Scale uniformly around a given point, using two pick points as scalars\n\nGeometry.Scale (basePoint: Point, from: Point, to: Point): Geometry" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "852b53f5b82740d981a1d5ca070d5399", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "cc81792a30ea4da5a6c3fb37eca2bba2", + "Name": "centerPoint", + "Description": "Center point of circle\n\nPoint\nDefault value : Autodesk.DesignScript.Geometry.Point.ByCoordinates(0, 0, 0)", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "d1728f63626d487f937204170bb125e4", + "Name": "radius", + "Description": "Radius\n\ndouble\nDefault value : 1", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "b666332f792b4ba1bada818b39cf75b9", + "Name": "Circle", + "Description": "Circle created with center point and radius", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Circle.ByCenterPointRadius@Autodesk.DesignScript.Geometry.Point,double", + "Replication": "Auto", + "Description": "Creates a Circle with input center Point and radius in the world XY plane, with world Z as normal.\n\nCircle.ByCenterPointRadius (centerPoint: Point = Autodesk.DesignScript.Geometry.Point.ByCoordinates(0, 0, 0), radius: double = 1): Circle" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "af3ae37ee3ed41c2a6fe408a6eb4ef5e", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "5f63c0ffa8364481a021a91e57240309", + "Name": "x", + "Description": "X coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "ca9fae14fd3448f89f8b24c956a68620", + "Name": "y", + "Description": "Y coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "16afa60f794b451786a7184e56e16552", + "Name": "z", + "Description": "Z coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "8d7582acb4444c6f828d20e2e9f4dfd9", + "Name": "Point", + "Description": "Point created by coordinates", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Point.ByCoordinates@double,double,double", + "Replication": "Auto", + "Description": "Form a Point given 3 cartesian coordinates\n\nPoint.ByCoordinates (x: double = 0, y: double = 0, z: double = 0): Point" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "69d18609aa3e4ce797a1c381b8f8c1b4", + "NodeType": "CodeBlockNode", + "Inputs": [], + "Outputs": [ + { + "Id": "17440d4830a4402094ce75a51617c928", + "Name": "", + "Description": "location", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "location = 1;" + } + ], + "Connectors": [ + { + "Start": "61ef680b66a545eaa92cdc8da1909897", + "End": "addc05a6597c47d2955c8ae0c92d9b01", + "Id": "4b49fc4c0db348898e83e67753209c19", + "IsHidden": "False" + }, + { + "Start": "aeea800475fe47899ebe5189d8b33153", + "End": "b00b69034fa2400cab6944de23884a3c", + "Id": "3188c0044e2d4879918b7bc09d4c716c", + "IsHidden": "False" + }, + { + "Start": "0cbe9d30924741929d38c4974e257328", + "End": "56124d23d7724c508ec07ae2fb2cdd9e", + "Id": "b6bd1b21c0844292bec4385c28df707e", + "IsHidden": "False" + }, + { + "Start": "0cbe9d30924741929d38c4974e257328", + "End": "152c63242dad40298f01f475542df6b0", + "Id": "45ecb43c48da48dfb5391d92c44f04c3", + "IsHidden": "False" + }, + { + "Start": "b666332f792b4ba1bada818b39cf75b9", + "End": "96c0afc139ff405facdf15ae0aa80e28", + "Id": "0d36b9e36e3c4acfaf40574e39359e9e", + "IsHidden": "False" + }, + { + "Start": "8d7582acb4444c6f828d20e2e9f4dfd9", + "End": "cc81792a30ea4da5a6c3fb37eca2bba2", + "Id": "bb4b6e61072244faa82f4512ffb6f66b", + "IsHidden": "False" + }, + { + "Start": "8d7582acb4444c6f828d20e2e9f4dfd9", + "End": "639e779d122741c9a436925446e3af65", + "Id": "66705fa24c194cf8a8ee90d58ea7ee8f", + "IsHidden": "False" + }, + { + "Start": "17440d4830a4402094ce75a51617c928", + "End": "5f63c0ffa8364481a021a91e57240309", + "Id": "c88f4f0a864845ea8b8fe89f15fb2a64", + "IsHidden": "False" + }, + { + "Start": "17440d4830a4402094ce75a51617c928", + "End": "ca9fae14fd3448f89f8b24c956a68620", + "Id": "b2586e500f1e4f088dd96b05e8efcf52", + "IsHidden": "False" + } + ], + "Dependencies": [], + "NodeLibraryDependencies": [], + "Thumbnail": "", + "GraphDocumentationURL": null, + "ExtensionWorkspaceData": [ + { + "ExtensionGuid": "28992e1d-abb9-417f-8b1b-05e053bee670", + "Name": "Properties", + "Version": "2.19", + "Data": {} + } + ], + "Author": "", + "Linting": { + "activeLinter": "None", + "activeLinterId": "7b75fb44-43fd-4631-a878-29f4d5d8399a", + "warningCount": 0, + "errorCount": 0 + }, + "Bindings": [], + "View": { + "Dynamo": { + "ScaleFactor": 100.0, + "HasRunWithoutCrash": true, + "IsVisibleInDynamoLibrary": true, + "Version": "2.19.0.5914", + "RunType": "Manual", + "RunPeriod": "1000" + }, + "Camera": { + "Name": "_Background Preview", + "EyeX": -13.789224624633789, + "EyeY": 45.495067596435547, + "EyeZ": 40.388420104980469, + "LookX": -3.4590816497802734, + "LookY": -39.485530853271484, + "LookZ": -45.890388488769531, + "UpX": -0.035576537251472473, + "UpY": 0.88089054822921753, + "UpZ": -0.4719809889793396 + }, + "ConnectorPins": [], + "NodeViews": [ + { + "Id": "96721d839d694e0bb1fe02c1c3d3d8c2", + "Name": "Point.ByCoordinates", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1153.6395999151841, + "Y": 304.47866160939225 + }, + { + "Id": "f83f42538dce4e13a4df8b2a832de97d", + "Name": "Point.ByCoordinates", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1153.6395999151841, + "Y": 572.47866160939225 + }, + { + "Id": "5c0201e182a74e07a3c74b16884b7acb", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 829.13959991518414, + "Y": 589.30616160939223 + }, + { + "Id": "489ad96589d34d9ea17c8942bc080457", + "Name": "Geometry.Scale", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1534.6395999151841, + "Y": 270.47866160939225 + }, + { + "Id": "852b53f5b82740d981a1d5ca070d5399", + "Name": "Circle.ByCenterPointRadius", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1153.6395999151841, + "Y": 70.478661609392248 + }, + { + "Id": "af3ae37ee3ed41c2a6fe408a6eb4ef5e", + "Name": "Point.ByCoordinates", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 829.13959991518414, + "Y": 204.4786616093923 + }, + { + "Id": "69d18609aa3e4ce797a1c381b8f8c1b4", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 575.13959991518414, + "Y": 221.30616160939229 + } + ], + "Annotations": [ + { + "Id": "d012e450ac454b0497e6f53da5f0b4c3", + "Title": "Point to scale \"to\"", + "DescriptionText": null, + "IsExpanded": true, + "WidthAdjustment": 0.0, + "HeightAdjustment": 0.0, + "Nodes": [], + "HasNestedGroups": false, + "Left": 1207.1395999151841, + "Top": 522.47866160939225, + "Width": 0.0, + "Height": 0.0, + "FontSize": 36.0, + "GroupStyleId": "00000000-0000-0000-0000-000000000000", + "InitialTop": 0.0, + "InitialHeight": 0.0, + "TextblockHeight": 0.0, + "Background": "#FFC1D676", + "PinnedNode": "f83f42538dce4e13a4df8b2a832de97d" + }, + { + "Id": "c4ee8af8ad704aa5bd84cd694fb94d72", + "Title": "Basepoint from which to Scale geometry around", + "DescriptionText": null, + "IsExpanded": true, + "WidthAdjustment": 0.0, + "HeightAdjustment": 0.0, + "Nodes": [], + "HasNestedGroups": false, + "Left": 1126.6395999151841, + "Top": 254.47866160939225, + "Width": 0.0, + "Height": 0.0, + "FontSize": 36.0, + "GroupStyleId": "00000000-0000-0000-0000-000000000000", + "InitialTop": 0.0, + "InitialHeight": 0.0, + "TextblockHeight": 0.0, + "Background": "#FFC1D676", + "PinnedNode": "96721d839d694e0bb1fe02c1c3d3d8c2" + }, + { + "Id": "4a8e7bee38f14b1d8a9d6de413d77ce6", + "Title": "Geometry to scale", + "DescriptionText": null, + "IsExpanded": true, + "WidthAdjustment": 0.0, + "HeightAdjustment": 0.0, + "Nodes": [], + "HasNestedGroups": false, + "Left": 1231.6395999151841, + "Top": 20.478661609392248, + "Width": 0.0, + "Height": 0.0, + "FontSize": 36.0, + "GroupStyleId": "00000000-0000-0000-0000-000000000000", + "InitialTop": 0.0, + "InitialHeight": 0.0, + "TextblockHeight": 0.0, + "Background": "#FFC1D676", + "PinnedNode": "852b53f5b82740d981a1d5ca070d5399" + }, + { + "Id": "d7569e411f68420e889c291da685063c", + "Title": "This node will scale your geometry around a given base point (Move your geometry to that point) by the total scale factor of the distance between the \"from\" and \"to\" points.", + "DescriptionText": null, + "IsExpanded": true, + "WidthAdjustment": 0.0, + "HeightAdjustment": 0.0, + "Nodes": [], + "HasNestedGroups": false, + "Left": 1511.6395999151841, + "Top": 176.47866160939225, + "Width": 0.0, + "Height": 0.0, + "FontSize": 36.0, + "GroupStyleId": "00000000-0000-0000-0000-000000000000", + "InitialTop": 0.0, + "InitialHeight": 0.0, + "TextblockHeight": 0.0, + "Background": "#FFC1D676", + "PinnedNode": "489ad96589d34d9ea17c8942bc080457" + }, + { + "Id": "465a5caa09ec436fa7c2de594d08a9d8", + "Title": "Point to scale \"from\"", + "DescriptionText": null, + "IsExpanded": true, + "WidthAdjustment": 0.0, + "HeightAdjustment": 0.0, + "Nodes": [], + "HasNestedGroups": false, + "Left": 875.13959991518414, + "Top": 154.4786616093923, + "Width": 0.0, + "Height": 0.0, + "FontSize": 36.0, + "GroupStyleId": "00000000-0000-0000-0000-000000000000", + "InitialTop": 0.0, + "InitialHeight": 0.0, + "TextblockHeight": 0.0, + "Background": "#FFC1D676", + "PinnedNode": "af3ae37ee3ed41c2a6fe408a6eb4ef5e" + } + ], + "X": -44.409981566760507, + "Y": 188.31609422344752, + "Zoom": 0.59376714062500013 + } +} \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.Scale(geometry, basePoint, from, to).md b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.Scale(geometry, basePoint, from, to).md new file mode 100644 index 00000000000..019c469c5d5 --- /dev/null +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.Scale(geometry, basePoint, from, to).md @@ -0,0 +1,8 @@ +## In Depth +`Geometry.Scale (geometry, basePoint, from, to)` scales the given geometry around the given point by the total scale factor of the distance between the `from` and `to` input points. + +In the example below, a circle is moved and its size is increased. +___ +## Example File + +![Geometry.Scale(geometry, basePoint, from, to)](./Autodesk.DesignScript.Geometry.Geometry.Scale(geometry,%20basePoint,%20from,%20to)_img.jpg) \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.Scale(geometry, basePoint, from, to)_img.jpg b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.Scale(geometry, basePoint, from, to)_img.jpg new file mode 100644 index 00000000000..0b439209d93 Binary files /dev/null and b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.Scale(geometry, basePoint, from, to)_img.jpg differ diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.Scale(geometry, plane, xamount, yamount, zamount).dyn b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.Scale(geometry, plane, xamount, yamount, zamount).dyn new file mode 100644 index 00000000000..54ab51d7bbb --- /dev/null +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.Scale(geometry, plane, xamount, yamount, zamount).dyn @@ -0,0 +1,572 @@ +{ + "Uuid": "ca4685cb-0228-40d4-ac79-859b45f1fa98", + "IsCustomNode": false, + "Description": "", + "Name": "Autodesk.DesignScript.Geometry.Geometry.Scale", + "ElementResolver": { + "ResolutionMap": {} + }, + "Inputs": [ + { + "Id": "355dec18868445199a1d8e486097a0f3", + "Name": "Number Slider", + "Type": "number", + "Type2": "number", + "Value": "2", + "MaximumValue": 5.0, + "MinimumValue": 0.1, + "StepValue": 0.1, + "NumberType": "Double", + "Description": "Produces numeric values", + "SelectedIndex": 0 + }, + { + "Id": "8916dff7005647bcb28dd47a1ce514d0", + "Name": "Number Slider", + "Type": "number", + "Type2": "number", + "Value": "1.4", + "MaximumValue": 5.0, + "MinimumValue": 0.1, + "StepValue": 0.1, + "NumberType": "Double", + "Description": "Produces numeric values", + "SelectedIndex": 0 + }, + { + "Id": "1f2dff53577645b093f3bb735caf546b", + "Name": "Number Slider", + "Type": "number", + "Type2": "number", + "Value": "0.9", + "MaximumValue": 5.0, + "MinimumValue": 0.1, + "StepValue": 0.1, + "NumberType": "Double", + "Description": "Produces numeric values", + "SelectedIndex": 0 + } + ], + "Outputs": [], + "Nodes": [ + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "476461539ed647c6af3d02613b787cc7", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "3be2ff1ae22a42e4b04ce80bac2ea409", + "Name": "startPoint", + "Description": "Point\nDefault value : Autodesk.DesignScript.Geometry.Point.ByCoordinates(0, 0, 0)", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "2cebe0b218f04e6fbfefd01f39076cf5", + "Name": "endPoint", + "Description": "Point\nDefault value : Autodesk.DesignScript.Geometry.Point.ByCoordinates(0, 0, 1)", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "5f1a84a0f62a496684ad7234c6a987ac", + "Name": "startRadius", + "Description": "double\nDefault value : 1", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "a97dd416b87e45c4a6e85e3399efdd0f", + "Name": "Cone", + "Description": "Cone", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Cone.ByPointsRadius@Autodesk.DesignScript.Geometry.Point,Autodesk.DesignScript.Geometry.Point,double", + "Replication": "Auto", + "Description": "Create a Cone with given base radius at start Point, extending to a apex at end Point.\n\nCone.ByPointsRadius (startPoint: Point = Autodesk.DesignScript.Geometry.Point.ByCoordinates(0, 0, 0), endPoint: Point = Autodesk.DesignScript.Geometry.Point.ByCoordinates(0, 0, 1), startRadius: double = 1): Cone" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "1f06599545464e6e9e4448b97af889b4", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "3f5cf111ceee47f49eeb66962e56e7c7", + "Name": "x", + "Description": "X coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "23979da1b95d4514b8ee95923c4ba98f", + "Name": "y", + "Description": "Y coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "83f96f0834da425f9c9d8582e0929efa", + "Name": "z", + "Description": "Z coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "dc00c04adc624afd84aa8619a958c8dc", + "Name": "Point", + "Description": "Point created by coordinates", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Point.ByCoordinates@double,double,double", + "Replication": "Auto", + "Description": "Form a Point given 3 cartesian coordinates\n\nPoint.ByCoordinates (x: double = 0, y: double = 0, z: double = 0): Point" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "ff1b277f2f3f416baaa1c2c30403f582", + "NodeType": "CodeBlockNode", + "Inputs": [], + "Outputs": [ + { + "Id": "718004685c894644a0946c77a3d0a469", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "426ccf13eecb44dfb4b92ae45cffa450", + "Name": "", + "Description": "Value of expression at line 2", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "868680e7302649cfbd2db9eba505c4c8", + "Name": "", + "Description": "Value of expression at line 3", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "5;\n2;\n8;" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "f71add7ba8ab4593ac898e8e76251487", + "NodeType": "FunctionNode", + "Inputs": [], + "Outputs": [ + { + "Id": "815d7f0705d04e3ebd1c6c1ac8ab2c07", + "Name": "Point", + "Description": "Origin point", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Point.Origin", + "Replication": "Auto", + "Description": "Get the Origin point (0,0,0)\n\nPoint.Origin ( ): Point" + }, + { + "ConcreteType": "CoreNodeModels.Input.DoubleSlider, CoreNodeModels", + "NumberType": "Double", + "MaximumValue": 5.0, + "MinimumValue": 0.1, + "StepValue": 0.1, + "Id": "355dec18868445199a1d8e486097a0f3", + "NodeType": "NumberInputNode", + "Inputs": [], + "Outputs": [ + { + "Id": "38923a0c8ea940558bc3a2549ec781cc", + "Name": "", + "Description": "Double", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Produces numeric values", + "InputValue": 2.0 + }, + { + "ConcreteType": "CoreNodeModels.Input.DoubleSlider, CoreNodeModels", + "NumberType": "Double", + "MaximumValue": 5.0, + "MinimumValue": 0.1, + "StepValue": 0.1, + "Id": "8916dff7005647bcb28dd47a1ce514d0", + "NodeType": "NumberInputNode", + "Inputs": [], + "Outputs": [ + { + "Id": "319fdcb4ba3246328a1c5ca4f599ec43", + "Name": "", + "Description": "Double", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Produces numeric values", + "InputValue": 1.4 + }, + { + "ConcreteType": "CoreNodeModels.Input.DoubleSlider, CoreNodeModels", + "NumberType": "Double", + "MaximumValue": 5.0, + "MinimumValue": 0.1, + "StepValue": 0.1, + "Id": "1f2dff53577645b093f3bb735caf546b", + "NodeType": "NumberInputNode", + "Inputs": [], + "Outputs": [ + { + "Id": "d014273bf1a148c2a72e556fc01b8cd4", + "Name": "", + "Description": "Double", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Produces numeric values", + "InputValue": 0.9 + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "fedda5e5ebe3450c91c906eb7cf0087c", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "8f8ecc61f7b04ea195ba0caff413d016", + "Name": "geometry", + "Description": "Autodesk.DesignScript.Geometry.Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "e63e8529f47b4e5ea53d5c05337a015e", + "Name": "plane", + "Description": "Plane", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "d43e106af108413b96bbb56ff6bcb7b0", + "Name": "xamount", + "Description": "double\nDefault value : 1", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "5cc74c8f5b22458d93c0d756b5727f3d", + "Name": "yamount", + "Description": "double\nDefault value : 1", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "1125d867e115447d9ab382b9fcf37d52", + "Name": "zamount", + "Description": "double\nDefault value : 1", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "6d224adc3bf7479b9ce05d2850de09f6", + "Name": "Geometry", + "Description": "Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Geometry.Scale@Autodesk.DesignScript.Geometry.Plane,double,double,double", + "Replication": "Auto", + "Description": "Scale non-uniformly around a given Plane\n\nGeometry.Scale (plane: Plane, xamount: double = 1, yamount: double = 1, zamount: double = 1): Geometry" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "8a35c4abcfb44829a0f4a0d2ef74da94", + "NodeType": "FunctionNode", + "Inputs": [], + "Outputs": [ + { + "Id": "c29a8b89c78d4bbd9db1253cd8d7ff65", + "Name": "Plane", + "Description": "Plane at YZ plane of world", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Plane.YZ", + "Replication": "Auto", + "Description": "Creates a plane in the world YZ\n\nPlane.YZ ( ): Plane" + } + ], + "Connectors": [ + { + "Start": "a97dd416b87e45c4a6e85e3399efdd0f", + "End": "8f8ecc61f7b04ea195ba0caff413d016", + "Id": "ee932ed55d164ae19a21ec6430d7a89b", + "IsHidden": "False" + }, + { + "Start": "dc00c04adc624afd84aa8619a958c8dc", + "End": "2cebe0b218f04e6fbfefd01f39076cf5", + "Id": "9abb13ca47e943a2b9e35a2b6a3b2ee7", + "IsHidden": "False" + }, + { + "Start": "718004685c894644a0946c77a3d0a469", + "End": "3f5cf111ceee47f49eeb66962e56e7c7", + "Id": "6338d5e245574e879570464d05713141", + "IsHidden": "False" + }, + { + "Start": "718004685c894644a0946c77a3d0a469", + "End": "5f1a84a0f62a496684ad7234c6a987ac", + "Id": "3cb8e023fe1643ee81d3b23af25655a7", + "IsHidden": "False" + }, + { + "Start": "426ccf13eecb44dfb4b92ae45cffa450", + "End": "23979da1b95d4514b8ee95923c4ba98f", + "Id": "311daa9c7e3a4f07a27d46fe80f60409", + "IsHidden": "False" + }, + { + "Start": "868680e7302649cfbd2db9eba505c4c8", + "End": "83f96f0834da425f9c9d8582e0929efa", + "Id": "b55982196be149eaadfe6be021d0b7a5", + "IsHidden": "False" + }, + { + "Start": "815d7f0705d04e3ebd1c6c1ac8ab2c07", + "End": "3be2ff1ae22a42e4b04ce80bac2ea409", + "Id": "d5576a337ea04ec8b7e796f1603a3422", + "IsHidden": "False" + }, + { + "Start": "38923a0c8ea940558bc3a2549ec781cc", + "End": "d43e106af108413b96bbb56ff6bcb7b0", + "Id": "d0cff009c9834c839b469bd0b75fb126", + "IsHidden": "False" + }, + { + "Start": "319fdcb4ba3246328a1c5ca4f599ec43", + "End": "5cc74c8f5b22458d93c0d756b5727f3d", + "Id": "b7bfe5567b634c66b17ae70246c47be4", + "IsHidden": "False" + }, + { + "Start": "d014273bf1a148c2a72e556fc01b8cd4", + "End": "1125d867e115447d9ab382b9fcf37d52", + "Id": "4215c74c1f9f4adb9815f12185c6f8e0", + "IsHidden": "False" + }, + { + "Start": "c29a8b89c78d4bbd9db1253cd8d7ff65", + "End": "e63e8529f47b4e5ea53d5c05337a015e", + "Id": "79ac1b94842b45809974f7d42592c62f", + "IsHidden": "False" + } + ], + "Dependencies": [], + "NodeLibraryDependencies": [], + "Thumbnail": "", + "GraphDocumentationURL": null, + "ExtensionWorkspaceData": [ + { + "ExtensionGuid": "28992e1d-abb9-417f-8b1b-05e053bee670", + "Name": "Properties", + "Version": "2.19", + "Data": {} + } + ], + "Author": "None provided", + "Linting": { + "activeLinter": "None", + "activeLinterId": "7b75fb44-43fd-4631-a878-29f4d5d8399a", + "warningCount": 0, + "errorCount": 0 + }, + "Bindings": [], + "View": { + "Dynamo": { + "ScaleFactor": 1.0, + "HasRunWithoutCrash": true, + "IsVisibleInDynamoLibrary": true, + "Version": "2.19.4.6632", + "RunType": "Automatic", + "RunPeriod": "1000" + }, + "Camera": { + "Name": "_Background Preview", + "EyeX": 24.907424926757813, + "EyeY": 16.611785888671875, + "EyeZ": -21.272761344909668, + "LookX": -18.348526000976563, + "LookY": -14.592802047729492, + "LookZ": 46.1326904296875, + "UpX": -0.025780221447348595, + "UpY": 0.99756407737731934, + "UpZ": 0.064817838370800018 + }, + "ConnectorPins": [], + "NodeViews": [ + { + "Id": "476461539ed647c6af3d02613b787cc7", + "Name": "Cone.ByPointsRadius", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 870.75597258276957, + "Y": -124.28809000127146 + }, + { + "Id": "1f06599545464e6e9e4448b97af889b4", + "Name": "Point.ByCoordinates", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": false, + "X": 545.75597258276957, + "Y": -33.288090001271456 + }, + { + "Id": "ff1b277f2f3f416baaa1c2c30403f582", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 291.75597258276957, + "Y": -24.633090001271484 + }, + { + "Id": "f71add7ba8ab4593ac898e8e76251487", + "Name": "Point.Origin", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 545.75597258276957, + "Y": -181.28809000127146 + }, + { + "Id": "355dec18868445199a1d8e486097a0f3", + "Name": "Number Slider", + "IsSetAsInput": true, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": false, + "X": 870.75597258276957, + "Y": 234.71190999872854 + }, + { + "Id": "8916dff7005647bcb28dd47a1ce514d0", + "Name": "Number Slider", + "IsSetAsInput": true, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": false, + "X": 870.75597258276957, + "Y": 395.71190999872852 + }, + { + "Id": "1f2dff53577645b093f3bb735caf546b", + "Name": "Number Slider", + "IsSetAsInput": true, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": false, + "X": 870.75597258276957, + "Y": 554.71190999872852 + }, + { + "Id": "fedda5e5ebe3450c91c906eb7cf0087c", + "Name": "Geometry.Scale", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1318.7559725827696, + "Y": 161.71190999872854 + }, + { + "Id": "8a35c4abcfb44829a0f4a0d2ef74da94", + "Name": "Plane.YZ", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 870.75597258276957, + "Y": 87.711909998728544 + } + ], + "Annotations": [], + "X": -215.37852161139062, + "Y": 251.1127507619604, + "Zoom": 0.77051684820225064 + } +} \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.Scale(geometry, plane, xamount, yamount, zamount).md b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.Scale(geometry, plane, xamount, yamount, zamount).md new file mode 100644 index 00000000000..e5e2a1afedd --- /dev/null +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.Scale(geometry, plane, xamount, yamount, zamount).md @@ -0,0 +1,9 @@ +## In Depth +`Geometry.Scale (plane, xamount, yamount, zamount)` scales input geometry about a plane by specified X, Y, and Z factors. + +The example below shows a cone before and after it is scaled in relationship to the YZ-plane. + +___ +## Example File + +![Geometry.Scale(plane, xamount, yamount, zamount)](./Autodesk.DesignScript.Geometry.Geometry.Scale(geometry,%20plane,%20xamount,%20yamount,%20zamount)_img.jpg) \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.Scale(geometry, plane, xamount, yamount, zamount)_img.jpg b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.Scale(geometry, plane, xamount, yamount, zamount)_img.jpg new file mode 100644 index 00000000000..fdc609940ed Binary files /dev/null and b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.Scale(geometry, plane, xamount, yamount, zamount)_img.jpg differ diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.Scale(xamount, yamount, zamount).dyn b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.Scale(geometry, xamount, yamount, zamount).dyn similarity index 69% rename from doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.Scale(xamount, yamount, zamount).dyn rename to doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.Scale(geometry, xamount, yamount, zamount).dyn index 92604c5f5cc..6d72b7d831a 100644 --- a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.Scale(xamount, yamount, zamount).dyn +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.Scale(geometry, xamount, yamount, zamount).dyn @@ -2,7 +2,7 @@ "Uuid": "3c9d0464-8643-5ffe-96e5-ab1769818209", "IsCustomNode": false, "Description": "", - "Name": "Scale", + "Name": "Autodesk.DesignScript.Geometry.Geometry.Scale", "ElementResolver": { "ResolutionMap": {} }, @@ -11,46 +11,51 @@ "Id": "f574c9563efa4ed5b50c6e23239fc856", "Name": "Number Slider", "Type": "number", - "Value": "2.1", + "Type2": "number", + "Value": "1.5", "MaximumValue": 5.0, "MinimumValue": 0.1, "StepValue": 0.1, "NumberType": "Double", - "Description": "A slider that produces numeric values." + "Description": "Produces numeric values", + "SelectedIndex": 0 }, { "Id": "f164723564c849b0974a103294a65fa5", "Name": "Number Slider", "Type": "number", - "Value": "1.3", + "Type2": "number", + "Value": "0.6", "MaximumValue": 5.0, "MinimumValue": 0.1, "StepValue": 0.1, "NumberType": "Double", - "Description": "A slider that produces numeric values." + "Description": "Produces numeric values", + "SelectedIndex": 0 }, { "Id": "476d6ee51bac40b48d2e56e25541c1da", "Name": "Number Slider", "Type": "number", - "Value": "0.9", + "Type2": "number", + "Value": "0.7", "MaximumValue": 5.0, "MinimumValue": 0.1, "StepValue": 0.1, "NumberType": "Double", - "Description": "A slider that produces numeric values." + "Description": "Produces numeric values", + "SelectedIndex": 0 } ], "Outputs": [], "Nodes": [ { "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", - "NodeType": "FunctionNode", - "FunctionSignature": "Autodesk.DesignScript.Geometry.Cone.ByPointsRadius@Autodesk.DesignScript.Geometry.Point,Autodesk.DesignScript.Geometry.Point,double", "Id": "9353c4dfe5c94c3b89718f7d9b2123ba", + "NodeType": "FunctionNode", "Inputs": [ { - "Id": "82d0fa1632ce471180a8a2fb9065792c", + "Id": "2bd9b71e771447d5802c06bf5a63bcfc", "Name": "startPoint", "Description": "Point\nDefault value : Autodesk.DesignScript.Geometry.Point.ByCoordinates(0, 0, 0)", "UsingDefaultValue": true, @@ -59,7 +64,7 @@ "KeepListStructure": false }, { - "Id": "a0e5f8093c344fd0ae0fa0b60fcfd019", + "Id": "ed168a52e2ad44b9b27bdef4c55850d7", "Name": "endPoint", "Description": "Point\nDefault value : Autodesk.DesignScript.Geometry.Point.ByCoordinates(0, 0, 1)", "UsingDefaultValue": true, @@ -68,7 +73,7 @@ "KeepListStructure": false }, { - "Id": "269dd75101da40fca119d30a36eb5fc6", + "Id": "e59cd43617de445aa10e8fe590ed2672", "Name": "startRadius", "Description": "double\nDefault value : 1", "UsingDefaultValue": true, @@ -79,7 +84,7 @@ ], "Outputs": [ { - "Id": "282119161423413fa5905d1b53bbe98f", + "Id": "1946776834874365bf9ca8335961d1f5", "Name": "Cone", "Description": "Cone", "UsingDefaultValue": false, @@ -88,37 +93,37 @@ "KeepListStructure": false } ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Cone.ByPointsRadius@Autodesk.DesignScript.Geometry.Point,Autodesk.DesignScript.Geometry.Point,double", "Replication": "Auto", "Description": "Create a Cone with given base radius at start Point, extending to a apex at end Point.\n\nCone.ByPointsRadius (startPoint: Point = Autodesk.DesignScript.Geometry.Point.ByCoordinates(0, 0, 0), endPoint: Point = Autodesk.DesignScript.Geometry.Point.ByCoordinates(0, 0, 1), startRadius: double = 1): Cone" }, { "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", - "NodeType": "FunctionNode", - "FunctionSignature": "Autodesk.DesignScript.Geometry.Point.ByCoordinates@double,double,double", "Id": "fb784abe345a49ce9476f22cbf49e7a9", + "NodeType": "FunctionNode", "Inputs": [ { - "Id": "4a5bed2b743e408b9ab223e31cd219d1", + "Id": "932bfe51b6fa4cfca9595c2676a83e78", "Name": "x", - "Description": "double\nDefault value : 0", + "Description": "X coordinate\n\ndouble\nDefault value : 0", "UsingDefaultValue": true, "Level": 2, "UseLevels": false, "KeepListStructure": false }, { - "Id": "d4fc22cbdfcb4f58a67f392ccf159098", + "Id": "97cccc19dbb44722b919df9047440dee", "Name": "y", - "Description": "double\nDefault value : 0", + "Description": "Y coordinate\n\ndouble\nDefault value : 0", "UsingDefaultValue": true, "Level": 2, "UseLevels": false, "KeepListStructure": false }, { - "Id": "39ff1dbf06ff4569a550261b494fb1f5", + "Id": "4462132c4e9546349f12e6b1c47538a6", "Name": "z", - "Description": "double\nDefault value : 0", + "Description": "Z coordinate\n\ndouble\nDefault value : 0", "UsingDefaultValue": true, "Level": 2, "UseLevels": false, @@ -127,27 +132,27 @@ ], "Outputs": [ { - "Id": "9ffd68e25a794843bd0d587565b81e18", + "Id": "9e46af23286b456c86ba2f4fbe3cb03f", "Name": "Point", - "Description": "Point", + "Description": "Point created by coordinates", "UsingDefaultValue": false, "Level": 2, "UseLevels": false, "KeepListStructure": false } ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Point.ByCoordinates@double,double,double", "Replication": "Auto", "Description": "Form a Point given 3 cartesian coordinates\n\nPoint.ByCoordinates (x: double = 0, y: double = 0, z: double = 0): Point" }, { "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", - "NodeType": "CodeBlockNode", - "Code": "5;\n2;\n8;", "Id": "47226805f4414bd689711e386a9009d1", + "NodeType": "CodeBlockNode", "Inputs": [], "Outputs": [ { - "Id": "3354fe2170ec47fa8e68bd1a7b0c82f8", + "Id": "4239984a596048cb999c0572a3029029", "Name": "", "Description": "Value of expression at line 1", "UsingDefaultValue": false, @@ -156,7 +161,7 @@ "KeepListStructure": false }, { - "Id": "93e2ee95f47a4da39fc670e0a21b13b1", + "Id": "2b0d2b71bb4a4ec383b9ff45b8a73bce", "Name": "", "Description": "Value of expression at line 2", "UsingDefaultValue": false, @@ -165,7 +170,7 @@ "KeepListStructure": false }, { - "Id": "6f034d55f45e43b488f65c5d49d749eb", + "Id": "fdcba43ca47c486d9d0c343bd73fb544", "Name": "", "Description": "Value of expression at line 3", "UsingDefaultValue": false, @@ -175,41 +180,41 @@ } ], "Replication": "Disabled", - "Description": "Allows for DesignScript code to be authored directly" + "Description": "Allows for DesignScript code to be authored directly", + "Code": "5;\n2;\n8;" }, { "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", - "NodeType": "FunctionNode", - "FunctionSignature": "Autodesk.DesignScript.Geometry.Point.Origin", "Id": "cb29ce4de19648ee800f936596f93067", + "NodeType": "FunctionNode", "Inputs": [], "Outputs": [ { - "Id": "2ccf32d88ba2413289aef90e2ee00ae6", + "Id": "ad2bcb980d0747a3b215fe81b544163f", "Name": "Point", - "Description": "Point", + "Description": "Origin point", "UsingDefaultValue": false, "Level": 2, "UseLevels": false, "KeepListStructure": false } ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Point.Origin", "Replication": "Auto", "Description": "Get the Origin point (0,0,0)\n\nPoint.Origin ( ): Point" }, { "ConcreteType": "CoreNodeModels.Input.DoubleSlider, CoreNodeModels", - "NodeType": "NumberInputNode", "NumberType": "Double", "MaximumValue": 5.0, "MinimumValue": 0.1, "StepValue": 0.1, - "InputValue": 2.1, "Id": "f574c9563efa4ed5b50c6e23239fc856", + "NodeType": "NumberInputNode", "Inputs": [], "Outputs": [ { - "Id": "adc0460e50a94a6187106d1f6f6cb947", + "Id": "da57ab3a944d464cbaa3bf709c7c1b11", "Name": "", "Description": "Double", "UsingDefaultValue": false, @@ -219,16 +224,16 @@ } ], "Replication": "Disabled", - "Description": "A slider that produces numeric values." + "Description": "Produces numeric values", + "InputValue": 1.5 }, { "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", - "NodeType": "FunctionNode", - "FunctionSignature": "Autodesk.DesignScript.Geometry.Geometry.Scale@double,double,double", "Id": "5aaaa7230fbf462c988802d9d1a38e6d", + "NodeType": "FunctionNode", "Inputs": [ { - "Id": "343f6e1705ee4fd7a53e5b7b5a9b0355", + "Id": "edfbbe203a3647e78dd7c3c552d76386", "Name": "geometry", "Description": "Autodesk.DesignScript.Geometry.Geometry", "UsingDefaultValue": false, @@ -237,7 +242,7 @@ "KeepListStructure": false }, { - "Id": "48ebadd7b2c94f6b8d6f5666a9e3ed5f", + "Id": "3ee55143209a42ad8ab0f7b90e0ca027", "Name": "xamount", "Description": "double\nDefault value : 1", "UsingDefaultValue": true, @@ -246,7 +251,7 @@ "KeepListStructure": false }, { - "Id": "2fcb872f27d2479094f911b694f2293a", + "Id": "b9f7bc5e711140daaa2842e5d9370d98", "Name": "yamount", "Description": "double\nDefault value : 1", "UsingDefaultValue": true, @@ -255,7 +260,7 @@ "KeepListStructure": false }, { - "Id": "cafff11a54e44219b8f540898c229738", + "Id": "e7e538b713784155a319b037fe662d14", "Name": "zamount", "Description": "double\nDefault value : 1", "UsingDefaultValue": true, @@ -266,7 +271,7 @@ ], "Outputs": [ { - "Id": "96683ec127df439686f14d9f1e0d8546", + "Id": "745104ea6a344501a99443369ca067bd", "Name": "Geometry", "Description": "Geometry", "UsingDefaultValue": false, @@ -275,22 +280,22 @@ "KeepListStructure": false } ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Geometry.Scale@double,double,double", "Replication": "Auto", "Description": "Scale non-uniformly around the origin\n\nGeometry.Scale (xamount: double = 1, yamount: double = 1, zamount: double = 1): Geometry" }, { "ConcreteType": "CoreNodeModels.Input.DoubleSlider, CoreNodeModels", - "NodeType": "NumberInputNode", "NumberType": "Double", "MaximumValue": 5.0, "MinimumValue": 0.1, "StepValue": 0.1, - "InputValue": 1.3, "Id": "f164723564c849b0974a103294a65fa5", + "NodeType": "NumberInputNode", "Inputs": [], "Outputs": [ { - "Id": "f652e969cba5423fac21ea6f16f26b86", + "Id": "3cc22622e52e4f8f8b9f04f41df73153", "Name": "", "Description": "Double", "UsingDefaultValue": false, @@ -300,21 +305,21 @@ } ], "Replication": "Disabled", - "Description": "A slider that produces numeric values." + "Description": "Produces numeric values", + "InputValue": 0.6 }, { "ConcreteType": "CoreNodeModels.Input.DoubleSlider, CoreNodeModels", - "NodeType": "NumberInputNode", "NumberType": "Double", "MaximumValue": 5.0, "MinimumValue": 0.1, "StepValue": 0.1, - "InputValue": 0.9, "Id": "476d6ee51bac40b48d2e56e25541c1da", + "NodeType": "NumberInputNode", "Inputs": [], "Outputs": [ { - "Id": "aeffba552f6d4126b7c8c7567e266213", + "Id": "9c4890613c6947a7813b426aa0dbddd0", "Name": "", "Description": "Double", "UsingDefaultValue": false, @@ -324,18 +329,18 @@ } ], "Replication": "Disabled", - "Description": "A slider that produces numeric values." + "Description": "Produces numeric values", + "InputValue": 0.7 }, { "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", - "NodeType": "FunctionNode", - "FunctionSignature": "Autodesk.DesignScript.Geometry.Line.ByBestFitThroughPoints@Autodesk.DesignScript.Geometry.Point[]", "Id": "c2816fc84e564e86a4d8395ce00afde3", + "NodeType": "FunctionNode", "Inputs": [ { - "Id": "8aa5e59ed74442d6920c0c8f20495d58", + "Id": "258678c9549f4dd28aede5f4a81e169c", "Name": "bestFitPoints", - "Description": "Point[]", + "Description": "List of points to best fit line\n\nPoint[]", "UsingDefaultValue": false, "Level": 2, "UseLevels": false, @@ -344,26 +349,26 @@ ], "Outputs": [ { - "Id": "0caad4658b3342da9a840f03e5ab0e3c", + "Id": "4c77f78ae4db4e9da043ee407241d059", "Name": "Line", - "Description": "Line", + "Description": "Line from fit through points", "UsingDefaultValue": false, "Level": 2, "UseLevels": false, "KeepListStructure": false } ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Line.ByBestFitThroughPoints@Autodesk.DesignScript.Geometry.Point[]", "Replication": "Auto", "Description": "Creates a Line best approximating a scatter plot of Points.\n\nLine.ByBestFitThroughPoints (bestFitPoints: Point[]): Line" }, { "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", - "NodeType": "FunctionNode", - "FunctionSignature": "Autodesk.DesignScript.Geometry.Vertex.PointGeometry", "Id": "11e0afb5a08b4379b971b83d9c022984", + "NodeType": "FunctionNode", "Inputs": [ { - "Id": "656d16e151ca43edb8941d245d09e838", + "Id": "4ee5197e1848487db3101d967125a003", "Name": "vertex", "Description": "Autodesk.DesignScript.Geometry.Vertex", "UsingDefaultValue": false, @@ -374,7 +379,7 @@ ], "Outputs": [ { - "Id": "6d98ab0be52842bfa6df069386c266af", + "Id": "7fe489c28a8a4c1d9051da59b5ce5111", "Name": "Point", "Description": "Point", "UsingDefaultValue": false, @@ -383,17 +388,17 @@ "KeepListStructure": false } ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Vertex.PointGeometry", "Replication": "Auto", "Description": "The Point where this Vertex is located\n\nVertex.PointGeometry: Point" }, { "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", - "NodeType": "FunctionNode", - "FunctionSignature": "Autodesk.DesignScript.Geometry.Topology.Vertices", "Id": "34d175f7e11743bb9a1af92c61def9f2", + "NodeType": "FunctionNode", "Inputs": [ { - "Id": "f60184c800834dd6afac206acb22cfcf", + "Id": "f94868a827ec4958ba4374ef8d4cf33d", "Name": "topology", "Description": "Autodesk.DesignScript.Geometry.Topology", "UsingDefaultValue": false, @@ -404,7 +409,7 @@ ], "Outputs": [ { - "Id": "432d36bce47d43bd9c6fcfb326de3cf3", + "Id": "033f68c64b534db081108b52fd92b9da", "Name": "Vertex[]", "Description": "Vertex[]", "UsingDefaultValue": false, @@ -413,37 +418,37 @@ "KeepListStructure": false } ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Topology.Vertices", "Replication": "Auto", "Description": "The Vertices of the Topology\n\nTopology.Vertices: Vertex[]" }, { "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", - "NodeType": "FunctionNode", - "FunctionSignature": "Autodesk.DesignScript.Geometry.Circle.ByCenterPointRadiusNormal@Autodesk.DesignScript.Geometry.Point,double,Autodesk.DesignScript.Geometry.Vector", "Id": "8d8077c482544b0a803bebe8691a2cef", + "NodeType": "FunctionNode", "Inputs": [ { - "Id": "1f9253b81fb14be5bddb459e4bf2239f", + "Id": "48c6f1e6e6ed4ea29a4777f09bf06b55", "Name": "centerPoint", - "Description": "Point\nDefault value : Autodesk.DesignScript.Geometry.Point.ByCoordinates(0, 0, 0)", + "Description": "Center point of circle\n\nPoint\nDefault value : Autodesk.DesignScript.Geometry.Point.ByCoordinates(0, 0, 0)", "UsingDefaultValue": true, "Level": 2, "UseLevels": false, "KeepListStructure": false }, { - "Id": "ecee2d7fb20a4c6ead208f812ab79c37", + "Id": "11d29aff0d044dc8aac2d7cfb1cd5d91", "Name": "radius", - "Description": "double\nDefault value : 1", + "Description": "Radius\n\ndouble\nDefault value : 1", "UsingDefaultValue": true, "Level": 2, "UseLevels": false, "KeepListStructure": false }, { - "Id": "79633a422b08473ebc7cee6e4622e784", + "Id": "aabc19b356754ff9abfd2f7fd9c7e2c4", "Name": "normal", - "Description": "Vector\nDefault value : Autodesk.DesignScript.Geometry.Vector.ByCoordinates(0, 0, 1)", + "Description": "Normal direction vector\n\nVector\nDefault value : Autodesk.DesignScript.Geometry.Vector.ByCoordinates(0, 0, 1)", "UsingDefaultValue": true, "Level": 2, "UseLevels": false, @@ -452,26 +457,26 @@ ], "Outputs": [ { - "Id": "931bc1050e8a43d7a0e7dfdc6029f158", + "Id": "2e483302c53b417fa0c5695cae8dff80", "Name": "Circle", - "Description": "Circle", + "Description": "Circle created with center point radius and normal", "UsingDefaultValue": false, "Level": 2, "UseLevels": false, "KeepListStructure": false } ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Circle.ByCenterPointRadiusNormal@Autodesk.DesignScript.Geometry.Point,double,Autodesk.DesignScript.Geometry.Vector", "Replication": "Auto", "Description": "Creates a Circle with specified center Point, radius, and normal direction.\n\nCircle.ByCenterPointRadiusNormal (centerPoint: Point = Autodesk.DesignScript.Geometry.Point.ByCoordinates(0, 0, 0), radius: double = 1, normal: Vector = Autodesk.DesignScript.Geometry.Vector.ByCoordinates(0, 0, 1)): Circle" }, { "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", - "NodeType": "FunctionNode", - "FunctionSignature": "Autodesk.DesignScript.Geometry.Vector.ByTwoPoints@Autodesk.DesignScript.Geometry.Point,Autodesk.DesignScript.Geometry.Point", "Id": "e269d27624fc4cfbb46f9ad33eafad57", + "NodeType": "FunctionNode", "Inputs": [ { - "Id": "067f8fbce92847e88274ed126780444b", + "Id": "5081c3d2b9b143f6a61ec084edf1e5d4", "Name": "start", "Description": "Point", "UsingDefaultValue": false, @@ -480,7 +485,7 @@ "KeepListStructure": false }, { - "Id": "c94f9faecda5484e99b58c9f1efcac59", + "Id": "830a38182e1a4489be8710a51f12227a", "Name": "end", "Description": "Point", "UsingDefaultValue": false, @@ -491,7 +496,7 @@ ], "Outputs": [ { - "Id": "00c1f676d1b34250801a5470d1bad162", + "Id": "5aa55a2cf0774bb7a0216945fbda5322", "Name": "Vector", "Description": "Vector", "UsingDefaultValue": false, @@ -500,115 +505,152 @@ "KeepListStructure": false } ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Vector.ByTwoPoints@Autodesk.DesignScript.Geometry.Point,Autodesk.DesignScript.Geometry.Point", "Replication": "Auto", "Description": "Form a Vector by two end points. The result is a vector from the start to the end point.\n\nVector.ByTwoPoints (start: Point, end: Point): Vector" } ], "Connectors": [ { - "Start": "282119161423413fa5905d1b53bbe98f", - "End": "343f6e1705ee4fd7a53e5b7b5a9b0355", - "Id": "178f70ba1da1455d84f8aa87a9bdf015" + "Start": "1946776834874365bf9ca8335961d1f5", + "End": "edfbbe203a3647e78dd7c3c552d76386", + "Id": "a2d738f8d74a4633a604d11d85e813a8", + "IsHidden": "False" }, { - "Start": "282119161423413fa5905d1b53bbe98f", - "End": "f60184c800834dd6afac206acb22cfcf", - "Id": "864cc64f90b64982b5192b2d74629dcc" + "Start": "1946776834874365bf9ca8335961d1f5", + "End": "f94868a827ec4958ba4374ef8d4cf33d", + "Id": "de447f1ca95e461da443ae3c465db2d6", + "IsHidden": "False" }, { - "Start": "9ffd68e25a794843bd0d587565b81e18", - "End": "a0e5f8093c344fd0ae0fa0b60fcfd019", - "Id": "6f1341056ec14e04acecac38aed563d0" + "Start": "9e46af23286b456c86ba2f4fbe3cb03f", + "End": "ed168a52e2ad44b9b27bdef4c55850d7", + "Id": "31dc7d91839e48b9afcb2f9b3ad7bac3", + "IsHidden": "False" }, { - "Start": "9ffd68e25a794843bd0d587565b81e18", - "End": "c94f9faecda5484e99b58c9f1efcac59", - "Id": "b377850ac7cb4dc9bc658c473da282fb" + "Start": "9e46af23286b456c86ba2f4fbe3cb03f", + "End": "830a38182e1a4489be8710a51f12227a", + "Id": "4a1d1b1ef6a24f779508ebb33bc29476", + "IsHidden": "False" }, { - "Start": "3354fe2170ec47fa8e68bd1a7b0c82f8", - "End": "4a5bed2b743e408b9ab223e31cd219d1", - "Id": "8e478d09f3424c8686c7dc9b75f16f83" + "Start": "4239984a596048cb999c0572a3029029", + "End": "932bfe51b6fa4cfca9595c2676a83e78", + "Id": "c6e2369ad68d4ec2b0e5c43a744f16df", + "IsHidden": "False" }, { - "Start": "3354fe2170ec47fa8e68bd1a7b0c82f8", - "End": "269dd75101da40fca119d30a36eb5fc6", - "Id": "3ac45b1dd6c04a66acc2d9d603dd8ea8" + "Start": "4239984a596048cb999c0572a3029029", + "End": "e59cd43617de445aa10e8fe590ed2672", + "Id": "7272a54ac22f42c3a34074b4b9c8070b", + "IsHidden": "False" }, { - "Start": "3354fe2170ec47fa8e68bd1a7b0c82f8", - "End": "ecee2d7fb20a4c6ead208f812ab79c37", - "Id": "8a076d97f8bd41e4b886472353f6a9ae" + "Start": "4239984a596048cb999c0572a3029029", + "End": "11d29aff0d044dc8aac2d7cfb1cd5d91", + "Id": "1750453dc7b74e6fbc5bfe7fd1c2ec65", + "IsHidden": "False" }, { - "Start": "93e2ee95f47a4da39fc670e0a21b13b1", - "End": "d4fc22cbdfcb4f58a67f392ccf159098", - "Id": "1a740389ae214825b150bdf324f21a10" + "Start": "2b0d2b71bb4a4ec383b9ff45b8a73bce", + "End": "97cccc19dbb44722b919df9047440dee", + "Id": "bee2c09e363e4a6f9a4814c8b5a77a42", + "IsHidden": "False" }, { - "Start": "6f034d55f45e43b488f65c5d49d749eb", - "End": "39ff1dbf06ff4569a550261b494fb1f5", - "Id": "eb38b75859804ad5a5565ee72b13ebd6" + "Start": "fdcba43ca47c486d9d0c343bd73fb544", + "End": "4462132c4e9546349f12e6b1c47538a6", + "Id": "39045ecb6cd7404faf6283ec35ce1997", + "IsHidden": "False" }, { - "Start": "2ccf32d88ba2413289aef90e2ee00ae6", - "End": "82d0fa1632ce471180a8a2fb9065792c", - "Id": "a4f58f2d57d24cde909d712f065510f5" + "Start": "ad2bcb980d0747a3b215fe81b544163f", + "End": "2bd9b71e771447d5802c06bf5a63bcfc", + "Id": "b739c897c4eb434398c3b1e38ae2ce45", + "IsHidden": "False" }, { - "Start": "2ccf32d88ba2413289aef90e2ee00ae6", - "End": "1f9253b81fb14be5bddb459e4bf2239f", - "Id": "2749ce62f1bc491cb3e0fd3065656f94" + "Start": "ad2bcb980d0747a3b215fe81b544163f", + "End": "48c6f1e6e6ed4ea29a4777f09bf06b55", + "Id": "73e2c31e2a4a4e0784bbb8b1b92bb986", + "IsHidden": "False" }, { - "Start": "2ccf32d88ba2413289aef90e2ee00ae6", - "End": "067f8fbce92847e88274ed126780444b", - "Id": "5fee48aecf424639be2345b6c6b1085a" + "Start": "ad2bcb980d0747a3b215fe81b544163f", + "End": "5081c3d2b9b143f6a61ec084edf1e5d4", + "Id": "0f29608803f84a6f8445e8e81ea4774e", + "IsHidden": "False" }, { - "Start": "adc0460e50a94a6187106d1f6f6cb947", - "End": "48ebadd7b2c94f6b8d6f5666a9e3ed5f", - "Id": "905c13ec0229411e9a3d481ff52a1f9b" + "Start": "da57ab3a944d464cbaa3bf709c7c1b11", + "End": "3ee55143209a42ad8ab0f7b90e0ca027", + "Id": "c279a0fcdcab44b4a7554cd950b75a93", + "IsHidden": "False" }, { - "Start": "f652e969cba5423fac21ea6f16f26b86", - "End": "2fcb872f27d2479094f911b694f2293a", - "Id": "d9a3d358ff3d40ab9f2effb7693d79bc" + "Start": "3cc22622e52e4f8f8b9f04f41df73153", + "End": "b9f7bc5e711140daaa2842e5d9370d98", + "Id": "139276ca15f84c71b66946781ec4f24d", + "IsHidden": "False" }, { - "Start": "aeffba552f6d4126b7c8c7567e266213", - "End": "cafff11a54e44219b8f540898c229738", - "Id": "f7e4ad9d149e43c39308c33fd42bcbdb" + "Start": "9c4890613c6947a7813b426aa0dbddd0", + "End": "e7e538b713784155a319b037fe662d14", + "Id": "48f129ea5e0540fe80cc56daf5575a90", + "IsHidden": "False" }, { - "Start": "6d98ab0be52842bfa6df069386c266af", - "End": "8aa5e59ed74442d6920c0c8f20495d58", - "Id": "372423ec822f406798fad94ac41b45c7" + "Start": "7fe489c28a8a4c1d9051da59b5ce5111", + "End": "258678c9549f4dd28aede5f4a81e169c", + "Id": "4f4d6d6d40c54d67aeabfd04061d8fd7", + "IsHidden": "False" }, { - "Start": "432d36bce47d43bd9c6fcfb326de3cf3", - "End": "656d16e151ca43edb8941d245d09e838", - "Id": "a684120a437d4241a73d19e24a8ad973" + "Start": "033f68c64b534db081108b52fd92b9da", + "End": "4ee5197e1848487db3101d967125a003", + "Id": "59e99694514447e992cf5bc9e231d83c", + "IsHidden": "False" }, { - "Start": "00c1f676d1b34250801a5470d1bad162", - "End": "79633a422b08473ebc7cee6e4622e784", - "Id": "1f8886bcd92e442aaf7e339c05bffb6f" + "Start": "5aa55a2cf0774bb7a0216945fbda5322", + "End": "aabc19b356754ff9abfd2f7fd9c7e2c4", + "Id": "0bc642609b8c4f6e85435fde60f473db", + "IsHidden": "False" } ], "Dependencies": [], + "NodeLibraryDependencies": [], + "Thumbnail": "", + "GraphDocumentationURL": null, + "ExtensionWorkspaceData": [ + { + "ExtensionGuid": "28992e1d-abb9-417f-8b1b-05e053bee670", + "Name": "Properties", + "Version": "2.19", + "Data": {} + } + ], + "Author": "None provided", + "Linting": { + "activeLinter": "None", + "activeLinterId": "7b75fb44-43fd-4631-a878-29f4d5d8399a", + "warningCount": 0, + "errorCount": 0 + }, "Bindings": [], "View": { "Dynamo": { "ScaleFactor": 1.0, "HasRunWithoutCrash": true, "IsVisibleInDynamoLibrary": true, - "Version": "2.0.1.5055", + "Version": "2.19.0.5874", "RunType": "Automatic", "RunPeriod": "1000" }, "Camera": { - "Name": "Background Preview", + "Name": "_Background Preview", "EyeX": 28.108333587646484, "EyeY": 11.678282737731934, "EyeZ": -17.362056732177734, @@ -619,141 +661,142 @@ "UpY": 0.99756401777267456, "UpZ": -0.0566556341946125 }, + "ConnectorPins": [], "NodeViews": [ { - "ShowGeometry": false, - "Name": "Cone.ByPointsRadius", "Id": "9353c4dfe5c94c3b89718f7d9b2123ba", + "Name": "Cone.ByPointsRadius", "IsSetAsInput": false, "IsSetAsOutput": false, "Excluded": false, - "X": 594.598607111678, - "Y": 260.48489398819703 + "ShowGeometry": false, + "X": 617.09860711167812, + "Y": 216.48489398819703 }, { - "ShowGeometry": false, - "Name": "Point.ByCoordinates", "Id": "fb784abe345a49ce9476f22cbf49e7a9", + "Name": "Point.ByCoordinates", "IsSetAsInput": false, "IsSetAsOutput": false, "Excluded": false, - "X": 336.598607111678, - "Y": 188.48489398819703 + "ShowGeometry": false, + "X": 292.09860711167812, + "Y": 112.98489398819703 }, { - "ShowGeometry": true, - "Name": "Code Block", "Id": "47226805f4414bd689711e386a9009d1", + "Name": "Code Block", "IsSetAsInput": false, "IsSetAsOutput": false, "Excluded": false, - "X": 157.598607111678, - "Y": 201.12489398819696 + "ShowGeometry": true, + "X": 38.09860711167812, + "Y": 130.467393988197 }, { - "ShowGeometry": true, - "Name": "Point.Origin", "Id": "cb29ce4de19648ee800f936596f93067", + "Name": "Point.Origin", "IsSetAsInput": false, "IsSetAsOutput": false, "Excluded": false, - "X": 336.598607111678, - "Y": 64.484893988197058 + "ShowGeometry": true, + "X": 292.09860711167812, + "Y": -45.515106011802942 }, { - "ShowGeometry": false, - "Name": "Number Slider", "Id": "f574c9563efa4ed5b50c6e23239fc856", + "Name": "Number Slider", "IsSetAsInput": true, "IsSetAsOutput": false, "Excluded": false, - "X": 1233.5986071116781, - "Y": 307.48489398819703 + "ShowGeometry": false, + "X": 1277.0986071116781, + "Y": 265.48489398819703 }, { - "ShowGeometry": true, - "Name": "Geometry.Scale", "Id": "5aaaa7230fbf462c988802d9d1a38e6d", + "Name": "Geometry.Scale", "IsSetAsInput": false, "IsSetAsOutput": false, "Excluded": false, - "X": 1632.5986071116781, - "Y": 321.48489398819703 + "ShowGeometry": true, + "X": 1725.0986071116781, + "Y": 314.48489398819703 }, { - "ShowGeometry": false, - "Name": "Number Slider", "Id": "f164723564c849b0974a103294a65fa5", + "Name": "Number Slider", "IsSetAsInput": true, "IsSetAsOutput": false, "Excluded": false, - "X": 1233.5986071116781, - "Y": 391.484893988197 + "ShowGeometry": false, + "X": 1277.0986071116781, + "Y": 426.484893988197 }, { - "ShowGeometry": false, - "Name": "Number Slider", "Id": "476d6ee51bac40b48d2e56e25541c1da", + "Name": "Number Slider", "IsSetAsInput": true, "IsSetAsOutput": false, "Excluded": false, - "X": 1233.5986071116781, - "Y": 474.48489398819703 + "ShowGeometry": false, + "X": 1277.0986071116781, + "Y": 585.484893988197 }, { - "ShowGeometry": true, - "Name": "Line.ByBestFitThroughPoints", "Id": "c2816fc84e564e86a4d8395ce00afde3", + "Name": "Line.ByBestFitThroughPoints", "IsSetAsInput": false, "IsSetAsOutput": false, "Excluded": false, - "X": 1632.5986071116781, - "Y": 212.48489398819703 + "ShowGeometry": true, + "X": 1725.0986071116781, + "Y": 167.48489398819703 }, { - "ShowGeometry": true, - "Name": "Vertex.PointGeometry", "Id": "11e0afb5a08b4379b971b83d9c022984", + "Name": "Vertex.PointGeometry", "IsSetAsInput": false, "IsSetAsOutput": false, "Excluded": false, - "X": 1233.5986071116781, - "Y": 199.48489398819703 + "ShowGeometry": true, + "X": 1277.0986071116781, + "Y": 118.48489398819703 }, { - "ShowGeometry": true, - "Name": "Topology.Vertices", "Id": "34d175f7e11743bb9a1af92c61def9f2", + "Name": "Topology.Vertices", "IsSetAsInput": false, "IsSetAsOutput": false, "Excluded": false, - "X": 913.598607111678, - "Y": 199.48489398819703 + "ShowGeometry": true, + "X": 948.09860711167812, + "Y": 118.48489398819703 }, { - "ShowGeometry": true, - "Name": "Circle.ByCenterPointRadiusNormal", "Id": "8d8077c482544b0a803bebe8691a2cef", + "Name": "Circle.ByCenterPointRadiusNormal", "IsSetAsInput": false, "IsSetAsOutput": false, "Excluded": false, - "X": 1632.5986071116781, - "Y": 52.48489398819703 + "ShowGeometry": true, + "X": 1725.0986071116781, + "Y": -45.51510601180297 }, { - "ShowGeometry": true, - "Name": "Vector.ByTwoPoints", "Id": "e269d27624fc4cfbb46f9ad33eafad57", + "Name": "Vector.ByTwoPoints", "IsSetAsInput": false, "IsSetAsOutput": false, "Excluded": false, - "X": 1233.5986071116781, - "Y": 64.484893988197044 + "ShowGeometry": true, + "X": 1277.0986071116781, + "Y": -58.51510601180297 } ], "Annotations": [], - "X": -332.48248487165, - "Y": 45.7264966581521, - "Zoom": 1.03605787560061 + "X": 62.953786251002839, + "Y": 98.9242780097576, + "Zoom": 0.54487872805980109 } } \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.Scale(geometry, xamount, yamount, zamount).md b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.Scale(geometry, xamount, yamount, zamount).md new file mode 100644 index 00000000000..c750cd19f72 --- /dev/null +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.Scale(geometry, xamount, yamount, zamount).md @@ -0,0 +1,8 @@ +## In Depth +`Geometry.Scale (xamount, yamount, zamount)` scales an input geometry from the object centroid by an input factor. + +In the example below, a cone’s scale can be finely tuned with three number sliders. The original cone edges are drawn as a visual reference. +___ +## Example File + +![Geometry.Scale(xamount, yamount, zamount)](./Autodesk.DesignScript.Geometry.Geometry.Scale(geometry,%20xamount,%20yamount,%20zamount)_img.jpg) \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.Scale(geometry, xamount, yamount, zamount)_img.jpg b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.Scale(geometry, xamount, yamount, zamount)_img.jpg new file mode 100644 index 00000000000..71c2d28ddc7 Binary files /dev/null and b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.Scale(geometry, xamount, yamount, zamount)_img.jpg differ diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.Scale(xamount, yamount, zamount).md b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.Scale(xamount, yamount, zamount).md deleted file mode 100644 index 6d4f327ed61..00000000000 --- a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.Scale(xamount, yamount, zamount).md +++ /dev/null @@ -1,7 +0,0 @@ -## In Depth -Scale non-uniformly around the origin. -___ -## Example File - -![Scale (xamount, yamount, zamount)](./Autodesk.DesignScript.Geometry.Geometry.Scale(xamount,%20yamount,%20zamount)_img.jpg) - diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.Scale(xamount, yamount, zamount)_img.jpg b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.Scale(xamount, yamount, zamount)_img.jpg deleted file mode 100644 index 4fb200606fc..00000000000 Binary files a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.Scale(xamount, yamount, zamount)_img.jpg and /dev/null differ diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.SerializeAsSAB.dyn b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.SerializeAsSAB.dyn index dabf9749947..440ec05fe08 100644 --- a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.SerializeAsSAB.dyn +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.SerializeAsSAB.dyn @@ -1,81 +1,91 @@ { - "Uuid": "3c9d0464-8643-5ffe-96e5-ab1769818209", + "Uuid": "45e7b53a-c877-477c-9f87-991968155b28", "IsCustomNode": false, "Description": "", - "Name": "SerializeAsSAB", + "Name": "Autodesk.DesignScript.Geometry.Geometry.SerializeAsSAB", "ElementResolver": { - "ResolutionMap": { - "Color": { - "Key": "DSCore.Color", - "Value": "DSCoreNodes.dll" - }, - "Display": { - "Key": "Display.Display", - "Value": "Display.dll" - } - } + "ResolutionMap": {} }, "Inputs": [], "Outputs": [], "Nodes": [ { "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "2424301d34a145ee99076f3dc5dd68d9", "NodeType": "FunctionNode", - "FunctionSignature": "Autodesk.DesignScript.Geometry.Curve.ExtrudeAsSolid@double", - "Id": "9222260d07494abbb34a20af71030c41", "Inputs": [ { - "Id": "16178e26e51744fdab5e0b7f0c3af430", - "Name": "curve", - "Description": "Autodesk.DesignScript.Geometry.Curve", + "Id": "9b19faf87cd34eaa9ccd20395722b44c", + "Name": "geometry", + "Description": "Geometry[]", "UsingDefaultValue": false, "Level": 2, "UseLevels": false, "KeepListStructure": false - }, + } + ], + "Outputs": [ { - "Id": "3e7760a894e2466eae792da178f5603a", - "Name": "distance", - "Description": "Distance to extrude\n\ndouble\nDefault value : 1", - "UsingDefaultValue": true, + "Id": "f484c914f6bb4274b28d62194c275178", + "Name": "int[]", + "Description": "int[]", + "UsingDefaultValue": false, "Level": 2, "UseLevels": false, "KeepListStructure": false } ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Geometry.SerializeAsSAB@Autodesk.DesignScript.Geometry.Geometry[]", + "Replication": "Auto", + "Description": "Serializes the specified geometry into Standard ACIS Binary(SAB) format and returns serialized binary stream data\n\nGeometry.SerializeAsSAB (geometry: Geometry[]): int[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "a0daed52f6994456a2f98a589ab59f95", + "NodeType": "CodeBlockNode", + "Inputs": [], "Outputs": [ { - "Id": "bbd1c92d23984abeb5c82bf5d77ffb5c", - "Name": "Solid", - "Description": "The extruded Solid", + "Id": "105c5e86bfdd42c5b531eea7e085ca28", + "Name": "", + "Description": "Value of expression at line 1", "UsingDefaultValue": false, "Level": 2, "UseLevels": false, "KeepListStructure": false } ], - "Replication": "Auto", - "Description": "Extrudes a Curve in the Normal direction by the specified distance. Curve must be closed.\n\nCurve.ExtrudeAsSolid (distance: double = 1): Solid" + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "2;" }, { "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "39f500aab3164286941717599deaf16b", "NodeType": "FunctionNode", - "FunctionSignature": "Autodesk.DesignScript.Geometry.Circle.ByCenterPointRadius@Autodesk.DesignScript.Geometry.Point,double", - "Id": "30a8c0ffc0304a5b91193a44ccc5f608", "Inputs": [ { - "Id": "25cc3041086244ef9418344d26514331", - "Name": "centerPoint", - "Description": "Point\nDefault value : Autodesk.DesignScript.Geometry.Point.ByCoordinates(0, 0, 0)", + "Id": "42a8beb099bc43bdab6e8e09886bc543", + "Name": "width", + "Description": "Width of cuboid\n\ndouble\nDefault value : 1", "UsingDefaultValue": true, "Level": 2, "UseLevels": false, "KeepListStructure": false }, { - "Id": "e29ca60895c443d8bc85305318a150c6", - "Name": "radius", - "Description": "double\nDefault value : 1", + "Id": "a65971a03fbb4070b1b5478d65b18d20", + "Name": "length", + "Description": "Length of cuboid\n\ndouble\nDefault value : 1", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "803042b59f2d475c843caa350c2aa765", + "Name": "height", + "Description": "Height of cuboid\n\ndouble\nDefault value : 1", "UsingDefaultValue": true, "Level": 2, "UseLevels": false, @@ -84,28 +94,37 @@ ], "Outputs": [ { - "Id": "52f6a737762d46898ef9a71fcd4bc89b", - "Name": "Circle", - "Description": "Circle", + "Id": "5fa5d80d0a1347c99b6287453660bfa3", + "Name": "Cuboid", + "Description": "Cuboid created by lengths", "UsingDefaultValue": false, "Level": 2, "UseLevels": false, "KeepListStructure": false } ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Cuboid.ByLengths@double,double,double", "Replication": "Auto", - "Description": "Creates a Circle with input center Point and radius in the world XY plane, with world Z as normal.\n\nCircle.ByCenterPointRadius (centerPoint: Point = Autodesk.DesignScript.Geometry.Point.ByCoordinates(0, 0, 0), radius: double = 1): Circle" + "Description": "Create a Cuboid centered at WCS origin, with width, length, and height.\n\nCuboid.ByLengths (width: double = 1, length: double = 1, height: double = 1): Cuboid" }, { "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "5234c4ae9f0043028cae030274649e50", "NodeType": "FunctionNode", - "FunctionSignature": "Autodesk.DesignScript.Geometry.Geometry.SerializeAsSAB@Autodesk.DesignScript.Geometry.Geometry[]", - "Id": "1c8aa7366a3847edac7cd1805582c1a2", "Inputs": [ { - "Id": "eef320c6c5894661a8cf1018a296436d", - "Name": "geometry", - "Description": "Geometry[]", + "Id": "8760cc837954476eac220777801faf97", + "Name": "filePath", + "Description": "Path to write to\n\nstring", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "cee8264e67bd4abd91531452701faa59", + "Name": "data", + "Description": "List of lists to write into CSV\n\nvar[][]", "UsingDefaultValue": false, "Level": 2, "UseLevels": false, @@ -114,38 +133,60 @@ ], "Outputs": [ { - "Id": "03a1038355864c448d1c4deb554fa536", - "Name": "int[]", - "Description": "int[]", + "Id": "b229037d2d2446da97729d9524ce74f8", + "Name": "void", + "Description": "void", "UsingDefaultValue": false, "Level": 2, "UseLevels": false, "KeepListStructure": false } ], + "FunctionSignature": "DSOffice.Data.ExportCSV@string,var[][]", "Replication": "Auto", - "Description": "Serializes the specified geometry into Standard ACIS Binary(SAB) format and returns serialized binary stream data\n\nGeometry.SerializeAsSAB (geometry: Geometry[]): int[]" + "Description": "Write a list of lists into a file using a comma-separated values format. Outer list represents rows, inner lists represent columns.\n\nData.ExportCSV (filePath: string, data: var[][]): void" }, { "ConcreteType": "CoreNodeModels.Watch, CoreNodeModels", + "WatchWidth": 200.0, + "WatchHeight": 200.0, + "Id": "f4e0e97fc2194ad9b6d51134c629718e", "NodeType": "ExtensionNode", - "Id": "0d7eacf6814d494398ab6534e2e2174c", "Inputs": [ { - "Id": "a0cf5420236f4c028b7526c494414a25", + "Id": "78b5af065467460398a3f5848cb29b51", + "Name": "", + "Description": "Node to show output from", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "8d7cc15dee0d4bb49ac9fb7f5526dafa", "Name": "", - "Description": "Node to evaluate.", + "Description": "Node output", "UsingDefaultValue": false, "Level": 2, "UseLevels": false, "KeepListStructure": false } ], + "Replication": "Disabled", + "Description": "Visualizes a node's output" + }, + { + "ConcreteType": "CoreNodeModels.Input.Filename, CoreNodeModels", + "Id": "2c592660460c4b00ad4c10740bcd6201", + "NodeType": "ExtensionNode", + "Inputs": [], "Outputs": [ { - "Id": "b914610c120147f4ae47db666bcdff88", + "Id": "beae738eaaad4656b3773fbd99714632", "Name": "", - "Description": "Watch contents.", + "Description": "File Path", "UsingDefaultValue": false, "Level": 2, "UseLevels": false, @@ -153,94 +194,184 @@ } ], "Replication": "Disabled", - "Description": "Visualize the output of node." + "Description": "Allows you to select a file on the system and returns its file path", + "HintPath": "C:\\Users\\tellro\\Downloads\\UpdatedDynamoSampleGraphs\\cuboidSAB.csv", + "InputValue": ".\\cuboidSAB.csv" } ], "Connectors": [ { - "Start": "bbd1c92d23984abeb5c82bf5d77ffb5c", - "End": "eef320c6c5894661a8cf1018a296436d", - "Id": "52beb659f6c5435483c99ac785e0741d" + "Start": "f484c914f6bb4274b28d62194c275178", + "End": "78b5af065467460398a3f5848cb29b51", + "Id": "b5904df55ce848f4ab19c83e788ab273", + "IsHidden": "False" + }, + { + "Start": "105c5e86bfdd42c5b531eea7e085ca28", + "End": "42a8beb099bc43bdab6e8e09886bc543", + "Id": "c836e734a6d74364ace1ae5876d70c3d", + "IsHidden": "False" }, { - "Start": "52f6a737762d46898ef9a71fcd4bc89b", - "End": "16178e26e51744fdab5e0b7f0c3af430", - "Id": "cc520e12b4f14f89a6506cf5fcaf0c9f" + "Start": "105c5e86bfdd42c5b531eea7e085ca28", + "End": "a65971a03fbb4070b1b5478d65b18d20", + "Id": "7fd4b43619eb4031a79825ba032a596a", + "IsHidden": "False" }, { - "Start": "03a1038355864c448d1c4deb554fa536", - "End": "a0cf5420236f4c028b7526c494414a25", - "Id": "0b7422b62b1b41e3abcbb0dec00d033a" + "Start": "105c5e86bfdd42c5b531eea7e085ca28", + "End": "803042b59f2d475c843caa350c2aa765", + "Id": "fecc920286cc4771bf9b9f0fb35b73c6", + "IsHidden": "False" + }, + { + "Start": "5fa5d80d0a1347c99b6287453660bfa3", + "End": "9b19faf87cd34eaa9ccd20395722b44c", + "Id": "d47e3b2ce2b9459fbd94e3229071144c", + "IsHidden": "False" + }, + { + "Start": "8d7cc15dee0d4bb49ac9fb7f5526dafa", + "End": "cee8264e67bd4abd91531452701faa59", + "Id": "e3f9901a0f8d4b9f8c7ffa1837138cd0", + "IsHidden": "False" + }, + { + "Start": "beae738eaaad4656b3773fbd99714632", + "End": "8760cc837954476eac220777801faf97", + "Id": "b65972230c0c442c995e1ee8f32adf28", + "IsHidden": "False" } ], "Dependencies": [], + "NodeLibraryDependencies": [], + "Thumbnail": "", + "GraphDocumentationURL": null, + "ExtensionWorkspaceData": [ + { + "ExtensionGuid": "28992e1d-abb9-417f-8b1b-05e053bee670", + "Name": "Properties", + "Version": "2.19", + "Data": {} + } + ], + "Author": "", + "Linting": { + "activeLinter": "None", + "activeLinterId": "7b75fb44-43fd-4631-a878-29f4d5d8399a", + "warningCount": 0, + "errorCount": 0 + }, "Bindings": [], "View": { "Dynamo": { "ScaleFactor": 1.0, "HasRunWithoutCrash": true, "IsVisibleInDynamoLibrary": true, - "Version": "2.0.1.5055", + "Version": "2.19.4.6632", "RunType": "Automatic", "RunPeriod": "1000" }, "Camera": { - "Name": "Background Preview", - "EyeX": -0.52827745676040649, - "EyeY": 3.0270106792449951, - "EyeZ": 3.8986048698425293, - "LookX": 3.3505916595458984, - "LookY": -4.38075065612793, - "LookZ": -7.4591059684753418, - "UpX": 0.11156784743070602, - "UpY": 0.96221798658370972, - "UpZ": -0.24837298691272736 + "Name": "_Background Preview", + "EyeX": -3.6967225074768066, + "EyeY": 6.2835097312927246, + "EyeZ": 9.7791213989257813, + "LookX": 4.1121954917907715, + "LookY": -4.594825267791748, + "LookZ": -11.491615295410156, + "UpX": 0.048345595598220825, + "UpY": 0.98965144157409668, + "UpZ": -0.13510327041149139 }, + "ConnectorPins": [], "NodeViews": [ { - "ShowGeometry": true, - "Name": "Curve.ExtrudeAsSolid", - "Id": "9222260d07494abbb34a20af71030c41", + "Id": "2424301d34a145ee99076f3dc5dd68d9", + "Name": "Geometry.SerializeAsSAB", "IsSetAsInput": false, "IsSetAsOutput": false, "Excluded": false, - "X": -211.38446802603653, - "Y": 2817.235439445 + "ShowGeometry": true, + "X": 520.74950798377211, + "Y": 171.92333194220728 }, { - "ShowGeometry": false, - "Name": "Circle.ByCenterPointRadius", - "Id": "30a8c0ffc0304a5b91193a44ccc5f608", + "Id": "a0daed52f6994456a2f98a589ab59f95", + "Name": "Code Block", "IsSetAsInput": false, "IsSetAsOutput": false, "Excluded": false, - "X": -534.38446802603653, - "Y": 2817.235439445 + "ShowGeometry": true, + "X": -41.750492016227895, + "Y": 205.75083194220727 }, { - "ShowGeometry": true, - "Name": "Geometry.SerializeAsSAB", - "Id": "1c8aa7366a3847edac7cd1805582c1a2", + "Id": "39f500aab3164286941717599deaf16b", + "Name": "Cuboid.ByLengths", "IsSetAsInput": false, "IsSetAsOutput": false, "Excluded": false, - "X": 88.615531973963471, - "Y": 2817.235439445 + "ShowGeometry": true, + "X": 212.24950798377211, + "Y": 171.92333194220728 }, { + "Id": "5234c4ae9f0043028cae030274649e50", + "Name": "Data.ExportCSV", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, "ShowGeometry": true, + "X": 1259.2495079837722, + "Y": 137.92333194220728 + }, + { + "Id": "f4e0e97fc2194ad9b6d51134c629718e", "Name": "Watch", - "Id": "0d7eacf6814d494398ab6534e2e2174c", "IsSetAsInput": false, "IsSetAsOutput": false, "Excluded": false, - "X": 389.61553197396347, - "Y": 2817.235439445 + "ShowGeometry": true, + "X": 882.24950798377211, + "Y": 171.92333194220731 + }, + { + "Id": "2c592660460c4b00ad4c10740bcd6201", + "Name": "File Path", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 885.09798427042711, + "Y": 5.6222861760427634 + } + ], + "Annotations": [ + { + "Id": "a72e8353dd814ebcbcf6c6fea8f841d9", + "Title": "Serialized Binary stream data as Integers", + "DescriptionText": null, + "IsExpanded": true, + "WidthAdjustment": 0.0, + "HeightAdjustment": 0.0, + "Nodes": [], + "HasNestedGroups": false, + "Left": 533.24950798377211, + "Top": 121.92333194220728, + "Width": 0.0, + "Height": 0.0, + "FontSize": 36.0, + "GroupStyleId": "00000000-0000-0000-0000-000000000000", + "InitialTop": 0.0, + "InitialHeight": 0.0, + "TextblockHeight": 0.0, + "Background": "#FFC1D676", + "PinnedNode": "2424301d34a145ee99076f3dc5dd68d9" } ], - "Annotations": [], - "X": 749.326350559705, - "Y": -5329.90689548734, - "Zoom": 1.90479712435349 + "X": 193.42363603641479, + "Y": 251.58970230823871, + "Zoom": 0.50908019745208166 } } \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.SerializeAsSAB.md b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.SerializeAsSAB.md index c9014b4092c..4f3fbb4e895 100644 --- a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.SerializeAsSAB.md +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.SerializeAsSAB.md @@ -1,7 +1,9 @@ ## In Depth -Serializes the specified geometry into Standard ACIS Binary(SAB) format and returns serialized binary stream data. +`Geometry.SerializeAsSAB` converts the specified geometry into Standard ACIS Binary (SAB) format and returns serialized binary stream data. + +In the example below, a cuboid is converted into SAB format. + ___ ## Example File -![SerializeAsSAB](./Autodesk.DesignScript.Geometry.Geometry.SerializeAsSAB_img.jpg) - +![Geometry.SerializeAsSAB](./Autodesk.DesignScript.Geometry.Geometry.SerializeAsSAB_img.jpg) \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.SerializeAsSAB_img.jpg b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.SerializeAsSAB_img.jpg index c28cbef04c2..b17702ce2cb 100644 Binary files a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.SerializeAsSAB_img.jpg and b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.SerializeAsSAB_img.jpg differ diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.ToSolidDef.dyn b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.ToSolidDef.dyn new file mode 100644 index 00000000000..5c7a7f25038 --- /dev/null +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.ToSolidDef.dyn @@ -0,0 +1,283 @@ +{ + "Uuid": "67aedf65-4371-4e27-b3da-35550fbad3bc", + "IsCustomNode": false, + "Description": "", + "Name": "Autodesk.DesignScript.Geometry.Geometry.ToSolidDef", + "ElementResolver": { + "ResolutionMap": {} + }, + "Inputs": [], + "Outputs": [], + "Nodes": [ + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "1a750e9b4b42413caab183b592dc14ed", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "c720629f0e054b40b4063c6fc81f9110", + "Name": "width", + "Description": "Width of cuboid\n\ndouble\nDefault value : 1", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "8cf8af8b6a6d44e5b5425a6ee7ddffef", + "Name": "length", + "Description": "Length of cuboid\n\ndouble\nDefault value : 1", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "b85f01bd83864c3183803c32d0389dee", + "Name": "height", + "Description": "Height of cuboid\n\ndouble\nDefault value : 1", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "894cea3b2d3443ccbe66c1bdaa08ce9a", + "Name": "Cuboid", + "Description": "Cuboid created by lengths", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Cuboid.ByLengths@double,double,double", + "Replication": "Auto", + "Description": "Create a Cuboid centered at WCS origin, with width, length, and height.\n\nCuboid.ByLengths (width: double = 1, length: double = 1, height: double = 1): Cuboid" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "c4065889e9654fe0b53159b6a2125a2d", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "0f07298f01894c948a2766ba2ac01372", + "Name": "geometry", + "Description": "Autodesk.DesignScript.Geometry.Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "94108d184b8d4aeb8f7c7cf95fcf079a", + "Name": "string", + "Description": "Json formatted string", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Geometry.ToSolidDef", + "Replication": "Auto", + "Description": "Convert geometry to Solid Def json\n\nGeometry.ToSolidDef ( ): string" + }, + { + "ConcreteType": "CoreNodeModels.Watch, CoreNodeModels", + "WatchWidth": 420.0, + "WatchHeight": 38.0, + "Id": "6c18b97d79a04d1d84bc48653d8be7ba", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "8ad5161d1305498d9b7043bb0af3d397", + "Name": "", + "Description": "Node to show output from", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "8119e666b064433698ca51db80bda2d5", + "Name": "", + "Description": "Node output", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Visualizes a node's output" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "15afb3e2f2e34babbf95ef37391d0a4f", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "13ac716723164aeaa824a5efae4de17e", + "Name": "values", + "Description": "A List of values\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "cf92ca2b8edd490ab78426f05b09dabe", + "Name": "json", + "Description": "A JSON string where primitive types (e.g. double, int, boolean), Lists, and Dictionary's will be turned into the associated JSON type.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Data.StringifyJSON@var[]..[]", + "Replication": "Auto", + "Description": "Stringify converts an arbitrary value or a list of arbitrary values to JSON. Replication can be used to apply the operation over a list, producing a list of JSON strings.\n\nData.StringifyJSON (values: var[]..[]): string" + } + ], + "Connectors": [ + { + "Start": "894cea3b2d3443ccbe66c1bdaa08ce9a", + "End": "0f07298f01894c948a2766ba2ac01372", + "Id": "7396eb77b7134568b2ae8ec173213146", + "IsHidden": "False" + }, + { + "Start": "94108d184b8d4aeb8f7c7cf95fcf079a", + "End": "13ac716723164aeaa824a5efae4de17e", + "Id": "7f7cfdf08082482894674ba2f3caecc8", + "IsHidden": "False" + }, + { + "Start": "cf92ca2b8edd490ab78426f05b09dabe", + "End": "8ad5161d1305498d9b7043bb0af3d397", + "Id": "ca64e71e4d1e43ffb7343e97cb24119a", + "IsHidden": "False" + } + ], + "Dependencies": [], + "NodeLibraryDependencies": [], + "Thumbnail": "", + "GraphDocumentationURL": null, + "ExtensionWorkspaceData": [ + { + "ExtensionGuid": "28992e1d-abb9-417f-8b1b-05e053bee670", + "Name": "Properties", + "Version": "2.19", + "Data": {} + } + ], + "Author": "", + "Linting": { + "activeLinter": "None", + "activeLinterId": "7b75fb44-43fd-4631-a878-29f4d5d8399a", + "warningCount": 0, + "errorCount": 0 + }, + "Bindings": [], + "View": { + "Dynamo": { + "ScaleFactor": 100.0, + "HasRunWithoutCrash": true, + "IsVisibleInDynamoLibrary": true, + "Version": "2.19.0.5874", + "RunType": "Manual", + "RunPeriod": "1000" + }, + "Camera": { + "Name": "_Background Preview", + "EyeX": -17.0, + "EyeY": 24.0, + "EyeZ": 50.0, + "LookX": 12.0, + "LookY": -13.0, + "LookZ": -58.0, + "UpX": 0.0, + "UpY": 1.0, + "UpZ": 0.0 + }, + "ConnectorPins": [], + "NodeViews": [ + { + "Id": "1a750e9b4b42413caab183b592dc14ed", + "Name": "Cuboid.ByLengths", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 106.06381316072657, + "Y": 518.34421969627851 + }, + { + "Id": "c4065889e9654fe0b53159b6a2125a2d", + "Name": "Geometry.ToSolidDef", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 414.56381316072657, + "Y": 518.34421969627851 + }, + { + "Id": "6c18b97d79a04d1d84bc48653d8be7ba", + "Name": "Watch", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1062.0638131607266, + "Y": 518.34421969627851 + }, + { + "Id": "15afb3e2f2e34babbf95ef37391d0a4f", + "Name": "Data.StringifyJSON", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 744.06381316072657, + "Y": 518.34421969627851 + } + ], + "Annotations": [ + { + "Id": "3587bdc2882740e1abf260c95cd66fcd", + "Title": "Right click on Watch node and \"Copy Contents\" to use Solid Def string representation in another graph", + "DescriptionText": null, + "IsExpanded": true, + "WidthAdjustment": 0.0, + "HeightAdjustment": 0.0, + "Nodes": [], + "HasNestedGroups": false, + "Left": 1161.0638131607266, + "Top": 453.34421969627851, + "Width": 0.0, + "Height": 0.0, + "FontSize": 36.0, + "GroupStyleId": "00000000-0000-0000-0000-000000000000", + "InitialTop": 0.0, + "InitialHeight": 0.0, + "TextblockHeight": 0.0, + "Background": "#FFC1D676", + "PinnedNode": "6c18b97d79a04d1d84bc48653d8be7ba" + } + ], + "X": 374.47211842252648, + "Y": 93.511323764049166, + "Zoom": 0.41299898049384776 + } +} \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.ToSolidDef.md b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.ToSolidDef.md index 9e05efacac1..8369b8124eb 100644 --- a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.ToSolidDef.md +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.ToSolidDef.md @@ -1,7 +1,9 @@ ## In Depth -Convert geometry to Solid Def json. -___ -## Example File +`Geometry.ToSolidDef` converts input geometry into a Solid Def JSON file. By using this node, you can share a JSON formatted representation of geometry instead of sending a file. +In the example below, a cuboid is converted into a Solid Def. Copy the contents of the Watch node to use the Solid Def string representation in another graph. +___ +## Example File +![Geometry.ToSolidDef](./Autodesk.DesignScript.Geometry.Geometry.ToSolidDef_img.jpg) \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.ToSolidDef_img.jpg b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.ToSolidDef_img.jpg new file mode 100644 index 00000000000..e713d1f3eb7 Binary files /dev/null and b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.ToSolidDef_img.jpg differ diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.Translate(direction).md b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.Translate(direction).md deleted file mode 100644 index ce0474b8f7f..00000000000 --- a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.Translate(direction).md +++ /dev/null @@ -1,7 +0,0 @@ -## In Depth -Translate geometry in the given direction by the vector length. -___ -## Example File - -![Translate (direction)](./Autodesk.DesignScript.Geometry.Geometry.Translate(direction)_img.jpg) - diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.Translate(direction)_img.jpg b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.Translate(direction)_img.jpg deleted file mode 100644 index 7ef723c0515..00000000000 Binary files a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.Translate(direction)_img.jpg and /dev/null differ diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.Translate(direction, distance).dyn b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.Translate(direction, distance).dyn index 49ea2fc2a97..d1a1e3838b4 100644 --- a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.Translate(direction, distance).dyn +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.Translate(direction, distance).dyn @@ -1,34 +1,35 @@ { - "Uuid": "3c9d0464-8643-5ffe-96e5-ab1769818209", + "Uuid": "661a4b7a-902d-4b55-bebf-475ea8a56e37", "IsCustomNode": false, "Description": "", - "Name": "Translate", + "Name": "Autodesk.DesignScript.Geometry.Geometry.Translate", "ElementResolver": { "ResolutionMap": {} }, "Inputs": [ { - "Id": "bf4c316cbccb4c17893587d6b187fabe", + "Id": "2162904aca0a42fda1ae5835a3fd68f0", "Name": "Number Slider", "Type": "number", + "Type2": "number", "Value": "13.1", "MaximumValue": 100.0, "MinimumValue": 0.0, "StepValue": 0.1, "NumberType": "Double", - "Description": "A slider that produces numeric values." + "Description": "Produces numeric values", + "SelectedIndex": 0 } ], "Outputs": [], "Nodes": [ { "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "da4ec7f7f02d4a99b48f89e947fac347", "NodeType": "FunctionNode", - "FunctionSignature": "Autodesk.DesignScript.Geometry.Cone.ByPointsRadius@Autodesk.DesignScript.Geometry.Point,Autodesk.DesignScript.Geometry.Point,double", - "Id": "9353c4dfe5c94c3b89718f7d9b2123ba", "Inputs": [ { - "Id": "33757a8167484292b9ba10cf5d6f6c5a", + "Id": "772a12cae84a43fca9bf2dde08fca415", "Name": "startPoint", "Description": "Point\nDefault value : Autodesk.DesignScript.Geometry.Point.ByCoordinates(0, 0, 0)", "UsingDefaultValue": true, @@ -37,7 +38,7 @@ "KeepListStructure": false }, { - "Id": "b340e8dd778e4163bc65756508acd971", + "Id": "203be63b51464090b297630c1a1013de", "Name": "endPoint", "Description": "Point\nDefault value : Autodesk.DesignScript.Geometry.Point.ByCoordinates(0, 0, 1)", "UsingDefaultValue": true, @@ -46,7 +47,7 @@ "KeepListStructure": false }, { - "Id": "f1055d35b3174d20adf8c4268d2ba6a0", + "Id": "9b398f2c25b3465a947dc78385670e7f", "Name": "startRadius", "Description": "double\nDefault value : 1", "UsingDefaultValue": true, @@ -57,7 +58,7 @@ ], "Outputs": [ { - "Id": "d03cba1082134a9ab293149231fe287a", + "Id": "4102fd6c1b3a430991edbd7b40c93b50", "Name": "Cone", "Description": "Cone", "UsingDefaultValue": false, @@ -66,37 +67,37 @@ "KeepListStructure": false } ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Cone.ByPointsRadius@Autodesk.DesignScript.Geometry.Point,Autodesk.DesignScript.Geometry.Point,double", "Replication": "Auto", "Description": "Create a Cone with given base radius at start Point, extending to a apex at end Point.\n\nCone.ByPointsRadius (startPoint: Point = Autodesk.DesignScript.Geometry.Point.ByCoordinates(0, 0, 0), endPoint: Point = Autodesk.DesignScript.Geometry.Point.ByCoordinates(0, 0, 1), startRadius: double = 1): Cone" }, { "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "adcf9c630b9d4e4bace0a4064aac9857", "NodeType": "FunctionNode", - "FunctionSignature": "Autodesk.DesignScript.Geometry.Point.ByCoordinates@double,double,double", - "Id": "fb784abe345a49ce9476f22cbf49e7a9", "Inputs": [ { - "Id": "6f2f3bfdd11c4576a178a27a1805cb6a", + "Id": "68ce183826c54fe3a9571e11c725c072", "Name": "x", - "Description": "double\nDefault value : 0", + "Description": "X coordinate\n\ndouble\nDefault value : 0", "UsingDefaultValue": true, "Level": 2, "UseLevels": false, "KeepListStructure": false }, { - "Id": "c50fc310539a4db1a5b78dff000ca8ce", + "Id": "de2d0ac4bc504be3bb4c115abe5ed20c", "Name": "y", - "Description": "double\nDefault value : 0", + "Description": "Y coordinate\n\ndouble\nDefault value : 0", "UsingDefaultValue": true, "Level": 2, "UseLevels": false, "KeepListStructure": false }, { - "Id": "7fec0b935e8b481483fadd38cfcbd4cc", + "Id": "f95d7cbdc89f4a25b4a40ed8d18530dc", "Name": "z", - "Description": "double\nDefault value : 0", + "Description": "Z coordinate\n\ndouble\nDefault value : 0", "UsingDefaultValue": true, "Level": 2, "UseLevels": false, @@ -105,27 +106,27 @@ ], "Outputs": [ { - "Id": "2b60b52b0600433798e5ddce3f1fe550", + "Id": "3bd1cd12408a4e1f93168d615035d0b9", "Name": "Point", - "Description": "Point", + "Description": "Point created by coordinates", "UsingDefaultValue": false, "Level": 2, "UseLevels": false, "KeepListStructure": false } ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Point.ByCoordinates@double,double,double", "Replication": "Auto", "Description": "Form a Point given 3 cartesian coordinates\n\nPoint.ByCoordinates (x: double = 0, y: double = 0, z: double = 0): Point" }, { "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "b94e4620241549b7905446bacd8f2575", "NodeType": "CodeBlockNode", - "Code": "5;\n2;\n8;", - "Id": "47226805f4414bd689711e386a9009d1", "Inputs": [], "Outputs": [ { - "Id": "bc835189d5d24b24a1521efe63628e3c", + "Id": "87df79e8990c478287cf7e01edfacc59", "Name": "", "Description": "Value of expression at line 1", "UsingDefaultValue": false, @@ -134,7 +135,7 @@ "KeepListStructure": false }, { - "Id": "52f09761461f43ab8b87df485721a507", + "Id": "c8f154b66c6c40b29357c9ec144558f3", "Name": "", "Description": "Value of expression at line 2", "UsingDefaultValue": false, @@ -143,7 +144,7 @@ "KeepListStructure": false }, { - "Id": "918aaed3f0864478ac9586aa4c1d4b82", + "Id": "0f69dc552dbb4135be93bfe0ec9ae0a4", "Name": "", "Description": "Value of expression at line 3", "UsingDefaultValue": false, @@ -153,36 +154,36 @@ } ], "Replication": "Disabled", - "Description": "Allows for DesignScript code to be authored directly" + "Description": "Allows for DesignScript code to be authored directly", + "Code": "5;\n2;\n8;" }, { "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "ac757ce7226c48f3b97e86b9c5d0ec22", "NodeType": "FunctionNode", - "FunctionSignature": "Autodesk.DesignScript.Geometry.Point.ByCoordinates@double,double,double", - "Id": "af36d39a902b41c5adef72edc68ceae5", "Inputs": [ { - "Id": "5ca0d0382ae94e5dab2cd5154be5de74", + "Id": "f7031972ca38460284f142e4b005dab5", "Name": "x", - "Description": "double\nDefault value : 0", + "Description": "X coordinate\n\ndouble\nDefault value : 0", "UsingDefaultValue": true, "Level": 2, "UseLevels": false, "KeepListStructure": false }, { - "Id": "25e446c5464d4b1e87af86f6810b0e34", + "Id": "b382d33270724877acf5fe22f78f4257", "Name": "y", - "Description": "double\nDefault value : 0", + "Description": "Y coordinate\n\ndouble\nDefault value : 0", "UsingDefaultValue": true, "Level": 2, "UseLevels": false, "KeepListStructure": false }, { - "Id": "64f2cb7656084b279259bf0d103e6099", + "Id": "230590fd1dd344c1bce924a1cecf8451", "Name": "z", - "Description": "double\nDefault value : 0", + "Description": "Z coordinate\n\ndouble\nDefault value : 0", "UsingDefaultValue": true, "Level": 2, "UseLevels": false, @@ -191,27 +192,27 @@ ], "Outputs": [ { - "Id": "a72354c4e2b6423793ce398f1064d6ee", + "Id": "7e5fbdee2f3e45a8944635556b380c30", "Name": "Point", - "Description": "Point", + "Description": "Point created by coordinates", "UsingDefaultValue": false, "Level": 2, "UseLevels": false, "KeepListStructure": false } ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Point.ByCoordinates@double,double,double", "Replication": "Auto", "Description": "Form a Point given 3 cartesian coordinates\n\nPoint.ByCoordinates (x: double = 0, y: double = 0, z: double = 0): Point" }, { "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "28a600d8493b48448e946bbd7fe3813b", "NodeType": "CodeBlockNode", - "Code": "8;\n2;\n5;", - "Id": "3273b2aa4cfd4c3c91550de1891faeaa", "Inputs": [], "Outputs": [ { - "Id": "826d6c116d1943cdbe6effaf3f9afa7f", + "Id": "47604dc0a1314d16a015e3f49c0b861c", "Name": "", "Description": "Value of expression at line 1", "UsingDefaultValue": false, @@ -220,7 +221,7 @@ "KeepListStructure": false }, { - "Id": "ff94a5e205554c09a9e71cdcc3fbfca4", + "Id": "f080e54da77d4f5fbcfc7e6b8d537c86", "Name": "", "Description": "Value of expression at line 2", "UsingDefaultValue": false, @@ -229,7 +230,7 @@ "KeepListStructure": false }, { - "Id": "94a921e2ebc64d189e8324d0076dbf2c", + "Id": "2260968bd1a14802a09752e4a5c315ef", "Name": "", "Description": "Value of expression at line 3", "UsingDefaultValue": false, @@ -239,16 +240,16 @@ } ], "Replication": "Disabled", - "Description": "Allows for DesignScript code to be authored directly" + "Description": "Allows for DesignScript code to be authored directly", + "Code": "8;\n2;\n5;" }, { "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "55a85a8cedfa4400a461d6765209c8eb", "NodeType": "FunctionNode", - "FunctionSignature": "Autodesk.DesignScript.Geometry.Geometry.Translate@Autodesk.DesignScript.Geometry.Vector,double", - "Id": "0d1b9508affd4f4ebe765e670335f885", "Inputs": [ { - "Id": "91b66f10a73f41fd8c5c25f9fe3ebb7f", + "Id": "4e7c188102aa439a93392aba8f27c74d", "Name": "geometry", "Description": "Autodesk.DesignScript.Geometry.Geometry", "UsingDefaultValue": false, @@ -257,7 +258,7 @@ "KeepListStructure": false }, { - "Id": "17c11332bef44a8b97262688b4215aed", + "Id": "4f75f9a3c86849ebbd916cc89dba7780", "Name": "direction", "Description": "Displacement direction.\n\nVector", "UsingDefaultValue": false, @@ -266,7 +267,7 @@ "KeepListStructure": false }, { - "Id": "1c653c50ccc94d669a71746c1e25717b", + "Id": "825cc58617e6471f8549a597f6242987", "Name": "distance", "Description": "Displacement distance along given direction.\n\ndouble", "UsingDefaultValue": false, @@ -277,7 +278,7 @@ ], "Outputs": [ { - "Id": "c0d6183d94c64dfeadd9e16b65e73c10", + "Id": "08b7e1def0504ecd95ae5515e64260fb", "Name": "Geometry", "Description": "Transformed Geometry.", "UsingDefaultValue": false, @@ -286,18 +287,18 @@ "KeepListStructure": false } ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Geometry.Translate@Autodesk.DesignScript.Geometry.Vector,double", "Replication": "Auto", "Description": "Translates any geometry type by the given distance in the given direction.\n\nGeometry.Translate (direction: Vector, distance: double): Geometry" }, { "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "7f968b4f4b1a481eb1e13a7b44b136d6", "NodeType": "FunctionNode", - "FunctionSignature": "Autodesk.DesignScript.Geometry.Vector.XAxis", - "Id": "ccc15590db5b4e9a9f77d8e329120bc9", "Inputs": [], "Outputs": [ { - "Id": "4969f34e1c4a407ba3546ff755efa413", + "Id": "09145651f42c4c568e0d2b346f4b9286", "Name": "Vector", "Description": "Vector", "UsingDefaultValue": false, @@ -306,22 +307,22 @@ "KeepListStructure": false } ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Vector.XAxis", "Replication": "Auto", "Description": "Get the canonical X axis Vector (1,0,0)\n\nVector.XAxis ( ): Vector" }, { "ConcreteType": "CoreNodeModels.Input.DoubleSlider, CoreNodeModels", - "NodeType": "NumberInputNode", "NumberType": "Double", "MaximumValue": 100.0, "MinimumValue": 0.0, "StepValue": 0.1, - "InputValue": 13.1, - "Id": "bf4c316cbccb4c17893587d6b187fabe", + "Id": "2162904aca0a42fda1ae5835a3fd68f0", + "NodeType": "NumberInputNode", "Inputs": [], "Outputs": [ { - "Id": "9632fc7d45684e549e34d158bfb9acd2", + "Id": "6dd57310868d4fa0bfefd20ea5aa9ed1", "Name": "", "Description": "Double", "UsingDefaultValue": false, @@ -331,179 +332,211 @@ } ], "Replication": "Disabled", - "Description": "A slider that produces numeric values." + "Description": "Produces numeric values", + "InputValue": 13.1 } ], "Connectors": [ { - "Start": "d03cba1082134a9ab293149231fe287a", - "End": "91b66f10a73f41fd8c5c25f9fe3ebb7f", - "Id": "1c870d69fd71430d9164aad29cd07994" + "Start": "4102fd6c1b3a430991edbd7b40c93b50", + "End": "4e7c188102aa439a93392aba8f27c74d", + "Id": "ba7f46da90624d7fae5d0fed5b4b4260", + "IsHidden": "False" }, { - "Start": "2b60b52b0600433798e5ddce3f1fe550", - "End": "b340e8dd778e4163bc65756508acd971", - "Id": "db54418866624041970275291bf4e9f8" + "Start": "3bd1cd12408a4e1f93168d615035d0b9", + "End": "203be63b51464090b297630c1a1013de", + "Id": "8526d02f28bb4f2cb574e770ffbe6ae8", + "IsHidden": "False" }, { - "Start": "bc835189d5d24b24a1521efe63628e3c", - "End": "6f2f3bfdd11c4576a178a27a1805cb6a", - "Id": "b8b1dcabc0d349569d8ed058f7d4c1c6" + "Start": "87df79e8990c478287cf7e01edfacc59", + "End": "68ce183826c54fe3a9571e11c725c072", + "Id": "9634996205e345159121e033a144f7ac", + "IsHidden": "False" }, { - "Start": "bc835189d5d24b24a1521efe63628e3c", - "End": "f1055d35b3174d20adf8c4268d2ba6a0", - "Id": "5ad7470b5a864b91a18a69b00e7fe87b" + "Start": "87df79e8990c478287cf7e01edfacc59", + "End": "9b398f2c25b3465a947dc78385670e7f", + "Id": "7e7c3ee1b39b41b58375ed2ed3d0c478", + "IsHidden": "False" }, { - "Start": "52f09761461f43ab8b87df485721a507", - "End": "c50fc310539a4db1a5b78dff000ca8ce", - "Id": "be620d4e2aad4d9d8147861a78cef3e0" + "Start": "c8f154b66c6c40b29357c9ec144558f3", + "End": "de2d0ac4bc504be3bb4c115abe5ed20c", + "Id": "c13868696ad34f189f9700e27df41ddd", + "IsHidden": "False" }, { - "Start": "918aaed3f0864478ac9586aa4c1d4b82", - "End": "7fec0b935e8b481483fadd38cfcbd4cc", - "Id": "09b84e5a870f44e99d1035d5238752d6" + "Start": "0f69dc552dbb4135be93bfe0ec9ae0a4", + "End": "f95d7cbdc89f4a25b4a40ed8d18530dc", + "Id": "9ced69408bab4642a85c3e50c1287065", + "IsHidden": "False" }, { - "Start": "a72354c4e2b6423793ce398f1064d6ee", - "End": "33757a8167484292b9ba10cf5d6f6c5a", - "Id": "d614c32b91da43c9a3794ed8a0204247" + "Start": "7e5fbdee2f3e45a8944635556b380c30", + "End": "772a12cae84a43fca9bf2dde08fca415", + "Id": "6cfbb6f219f7402c97a721ad745b44fc", + "IsHidden": "False" }, { - "Start": "826d6c116d1943cdbe6effaf3f9afa7f", - "End": "5ca0d0382ae94e5dab2cd5154be5de74", - "Id": "4c7b1202b1a143c0932ceb3bb6707931" + "Start": "47604dc0a1314d16a015e3f49c0b861c", + "End": "f7031972ca38460284f142e4b005dab5", + "Id": "d011333c6ff54f499b96e0feb162f466", + "IsHidden": "False" }, { - "Start": "ff94a5e205554c09a9e71cdcc3fbfca4", - "End": "25e446c5464d4b1e87af86f6810b0e34", - "Id": "96e0b99a010646d2aa444677ada99bdf" + "Start": "f080e54da77d4f5fbcfc7e6b8d537c86", + "End": "b382d33270724877acf5fe22f78f4257", + "Id": "1a9615e6fbbf4fc59c6e38fe574ec4bc", + "IsHidden": "False" }, { - "Start": "94a921e2ebc64d189e8324d0076dbf2c", - "End": "64f2cb7656084b279259bf0d103e6099", - "Id": "1c5c29a9876b4a1cb1412a9c6253e300" + "Start": "2260968bd1a14802a09752e4a5c315ef", + "End": "230590fd1dd344c1bce924a1cecf8451", + "Id": "b15402baaeb24e3f8a316de61fdd816e", + "IsHidden": "False" }, { - "Start": "4969f34e1c4a407ba3546ff755efa413", - "End": "17c11332bef44a8b97262688b4215aed", - "Id": "0a5f8a585899484aaf184c66d258f30e" + "Start": "09145651f42c4c568e0d2b346f4b9286", + "End": "4f75f9a3c86849ebbd916cc89dba7780", + "Id": "e9bc0f443b1c4a9db1d35ae2f357e206", + "IsHidden": "False" }, { - "Start": "9632fc7d45684e549e34d158bfb9acd2", - "End": "1c653c50ccc94d669a71746c1e25717b", - "Id": "fddc4b5a5b8b41ff9ebb24b104b536c0" + "Start": "6dd57310868d4fa0bfefd20ea5aa9ed1", + "End": "825cc58617e6471f8549a597f6242987", + "Id": "dbd7ab44e7b0414e99bfff1c9bdb16a3", + "IsHidden": "False" } ], "Dependencies": [], + "NodeLibraryDependencies": [], + "Thumbnail": "", + "GraphDocumentationURL": null, + "ExtensionWorkspaceData": [ + { + "ExtensionGuid": "28992e1d-abb9-417f-8b1b-05e053bee670", + "Name": "Properties", + "Version": "2.19", + "Data": {} + } + ], + "Author": "None provided", + "Linting": { + "activeLinter": "None", + "activeLinterId": "7b75fb44-43fd-4631-a878-29f4d5d8399a", + "warningCount": 0, + "errorCount": 0 + }, "Bindings": [], "View": { "Dynamo": { "ScaleFactor": 1.0, "HasRunWithoutCrash": true, "IsVisibleInDynamoLibrary": true, - "Version": "2.0.1.5055", + "Version": "2.19.0.5874", "RunType": "Automatic", "RunPeriod": "1000" }, "Camera": { - "Name": "Background Preview", - "EyeX": -14.566726684570313, - "EyeY": 9.7403774261474609, - "EyeZ": 11.442461967468262, - "LookX": 15.551612854003906, - "LookY": -2.5172150135040283, - "LookZ": -16.279880523681641, - "UpX": -0.07220284640789032, - "UpY": 0.9945218563079834, - "UpZ": 0.0755840316414833 + "Name": "_Background Preview", + "EyeX": -7.6729857921600342, + "EyeY": 16.727499961853027, + "EyeZ": 40.840293884277344, + "LookX": -0.26518034934997559, + "LookY": -0.32398033142089844, + "LookZ": -48.911052703857422, + "UpX": 0.001127219176851213, + "UpY": 0.97814762592315674, + "UpZ": 0.20790864527225494 }, + "ConnectorPins": [], "NodeViews": [ { - "ShowGeometry": true, + "Id": "da4ec7f7f02d4a99b48f89e947fac347", "Name": "Cone.ByPointsRadius", - "Id": "9353c4dfe5c94c3b89718f7d9b2123ba", "IsSetAsInput": false, "IsSetAsOutput": false, "Excluded": false, - "X": 799.202088104533, - "Y": 269.595469803525 + "ShowGeometry": true, + "X": 845.702088104533, + "Y": 238.09546980352502 }, { - "ShowGeometry": false, + "Id": "adcf9c630b9d4e4bace0a4064aac9857", "Name": "Point.ByCoordinates", - "Id": "fb784abe345a49ce9476f22cbf49e7a9", "IsSetAsInput": false, "IsSetAsOutput": false, "Excluded": false, - "X": 541.202088104533, - "Y": 362.595469803525 + "ShowGeometry": false, + "X": 520.702088104533, + "Y": 367.095469803525 }, { - "ShowGeometry": true, + "Id": "b94e4620241549b7905446bacd8f2575", "Name": "Code Block", - "Id": "47226805f4414bd689711e386a9009d1", "IsSetAsInput": false, "IsSetAsOutput": false, "Excluded": false, - "X": 362.202088104533, - "Y": 371.02213647019164 + "ShowGeometry": true, + "X": 266.702088104533, + "Y": 375.750469803525 }, { - "ShowGeometry": false, + "Id": "ac757ce7226c48f3b97e86b9c5d0ec22", "Name": "Point.ByCoordinates", - "Id": "af36d39a902b41c5adef72edc68ceae5", "IsSetAsInput": false, "IsSetAsOutput": false, "Excluded": false, - "X": 541.202088104533, - "Y": 202.59546980352502 + "ShowGeometry": false, + "X": 520.702088104533, + "Y": 143.09546980352502 }, { - "ShowGeometry": true, + "Id": "28a600d8493b48448e946bbd7fe3813b", "Name": "Code Block", - "Id": "3273b2aa4cfd4c3c91550de1891faeaa", "IsSetAsInput": false, "IsSetAsOutput": false, "Excluded": false, - "X": 362.202088104533, - "Y": 215.235469803525 + "ShowGeometry": true, + "X": 266.702088104533, + "Y": 160.57796980352498 }, { - "ShowGeometry": true, + "Id": "55a85a8cedfa4400a461d6765209c8eb", "Name": "Geometry.Translate", - "Id": "0d1b9508affd4f4ebe765e670335f885", "IsSetAsInput": false, "IsSetAsOutput": false, "Excluded": false, - "X": 1198.202088104533, - "Y": 386.595469803525 + "ShowGeometry": true, + "X": 1293.702088104533, + "Y": 395.095469803525 }, { - "ShowGeometry": true, + "Id": "7f968b4f4b1a481eb1e13a7b44b136d6", "Name": "Vector.XAxis", - "Id": "ccc15590db5b4e9a9f77d8e329120bc9", "IsSetAsInput": false, "IsSetAsOutput": false, "Excluded": false, - "X": 799.202088104533, - "Y": 429.595469803525 + "ShowGeometry": true, + "X": 845.702088104533, + "Y": 451.09546980352496 }, { - "ShowGeometry": true, + "Id": "2162904aca0a42fda1ae5835a3fd68f0", "Name": "Number Slider", - "Id": "bf4c316cbccb4c17893587d6b187fabe", "IsSetAsInput": true, "IsSetAsOutput": false, "Excluded": false, - "X": 799.202088104533, - "Y": 538.595469803525 + "ShowGeometry": true, + "X": 845.702088104533, + "Y": 598.095469803525 } ], "Annotations": [], - "X": -420.292892733909, - "Y": -192.826868877269, - "Zoom": 1.1988764122517 + "X": 78.336366016445254, + "Y": 15.229919779664613, + "Zoom": 0.60122796620338959 } } \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.Translate(direction, distance).md b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.Translate(direction, distance).md index 0565fee4cd5..d698cc3e03f 100644 --- a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.Translate(direction, distance).md +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.Translate(direction, distance).md @@ -1,7 +1,11 @@ ## In Depth -Translates any geometry type by the given distance in the given direction. +`Geometry.Translate (direction, distance)` moves input geometry to a given vector direction. The `distance` input controls the move distance. + +In the example below, a cone is translated along the X-axis. Its distance from the original cone is controlled with a number slider. + +In the example below, a cuboid is converted into a Solid Def. Copy the contents of the Watch node to use the Solid Def string representation in another graph. + ___ ## Example File -![Translate (direction, distance)](./Autodesk.DesignScript.Geometry.Geometry.Translate(direction,%20distance)_img.jpg) - +![Geometry.Translate](./Autodesk.DesignScript.Geometry.Geometry.Translate(direction,%20distance)_img.jpg) \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.Translate(direction, distance)_img.jpg b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.Translate(direction, distance)_img.jpg index 390c7aafd61..6dc49068825 100644 Binary files a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.Translate(direction, distance)_img.jpg and b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.Translate(direction, distance)_img.jpg differ diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.Translate(direction).dyn b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.Translate(geometry, direction, distance).dyn similarity index 54% rename from doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.Translate(direction).dyn rename to doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.Translate(geometry, direction, distance).dyn index fe7a73a3023..d1a1e3838b4 100644 --- a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.Translate(direction).dyn +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.Translate(geometry, direction, distance).dyn @@ -1,22 +1,35 @@ { - "Uuid": "3c9d0464-8643-5ffe-96e5-ab1769818209", + "Uuid": "661a4b7a-902d-4b55-bebf-475ea8a56e37", "IsCustomNode": false, "Description": "", - "Name": "Translate", + "Name": "Autodesk.DesignScript.Geometry.Geometry.Translate", "ElementResolver": { "ResolutionMap": {} }, - "Inputs": [], + "Inputs": [ + { + "Id": "2162904aca0a42fda1ae5835a3fd68f0", + "Name": "Number Slider", + "Type": "number", + "Type2": "number", + "Value": "13.1", + "MaximumValue": 100.0, + "MinimumValue": 0.0, + "StepValue": 0.1, + "NumberType": "Double", + "Description": "Produces numeric values", + "SelectedIndex": 0 + } + ], "Outputs": [], "Nodes": [ { "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "da4ec7f7f02d4a99b48f89e947fac347", "NodeType": "FunctionNode", - "FunctionSignature": "Autodesk.DesignScript.Geometry.Cone.ByPointsRadius@Autodesk.DesignScript.Geometry.Point,Autodesk.DesignScript.Geometry.Point,double", - "Id": "9353c4dfe5c94c3b89718f7d9b2123ba", "Inputs": [ { - "Id": "e87437f4bc194fbdaacb1755e034378e", + "Id": "772a12cae84a43fca9bf2dde08fca415", "Name": "startPoint", "Description": "Point\nDefault value : Autodesk.DesignScript.Geometry.Point.ByCoordinates(0, 0, 0)", "UsingDefaultValue": true, @@ -25,7 +38,7 @@ "KeepListStructure": false }, { - "Id": "48b9e50b6b5c43c08312475833dce8bb", + "Id": "203be63b51464090b297630c1a1013de", "Name": "endPoint", "Description": "Point\nDefault value : Autodesk.DesignScript.Geometry.Point.ByCoordinates(0, 0, 1)", "UsingDefaultValue": true, @@ -34,7 +47,7 @@ "KeepListStructure": false }, { - "Id": "5c75059887a047679d815da0ccb4ee1f", + "Id": "9b398f2c25b3465a947dc78385670e7f", "Name": "startRadius", "Description": "double\nDefault value : 1", "UsingDefaultValue": true, @@ -45,7 +58,7 @@ ], "Outputs": [ { - "Id": "a942ae9486114bf0ad27044ff1c8bd9d", + "Id": "4102fd6c1b3a430991edbd7b40c93b50", "Name": "Cone", "Description": "Cone", "UsingDefaultValue": false, @@ -54,37 +67,37 @@ "KeepListStructure": false } ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Cone.ByPointsRadius@Autodesk.DesignScript.Geometry.Point,Autodesk.DesignScript.Geometry.Point,double", "Replication": "Auto", "Description": "Create a Cone with given base radius at start Point, extending to a apex at end Point.\n\nCone.ByPointsRadius (startPoint: Point = Autodesk.DesignScript.Geometry.Point.ByCoordinates(0, 0, 0), endPoint: Point = Autodesk.DesignScript.Geometry.Point.ByCoordinates(0, 0, 1), startRadius: double = 1): Cone" }, { "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "adcf9c630b9d4e4bace0a4064aac9857", "NodeType": "FunctionNode", - "FunctionSignature": "Autodesk.DesignScript.Geometry.Point.ByCoordinates@double,double,double", - "Id": "fb784abe345a49ce9476f22cbf49e7a9", "Inputs": [ { - "Id": "e62ab938590348a6870a2001e9b6f267", + "Id": "68ce183826c54fe3a9571e11c725c072", "Name": "x", - "Description": "double\nDefault value : 0", + "Description": "X coordinate\n\ndouble\nDefault value : 0", "UsingDefaultValue": true, "Level": 2, "UseLevels": false, "KeepListStructure": false }, { - "Id": "e1519910d9ff440c9a7f4164faa64194", + "Id": "de2d0ac4bc504be3bb4c115abe5ed20c", "Name": "y", - "Description": "double\nDefault value : 0", + "Description": "Y coordinate\n\ndouble\nDefault value : 0", "UsingDefaultValue": true, "Level": 2, "UseLevels": false, "KeepListStructure": false }, { - "Id": "8e490955570a4e12b8619e96a2ea98a3", + "Id": "f95d7cbdc89f4a25b4a40ed8d18530dc", "Name": "z", - "Description": "double\nDefault value : 0", + "Description": "Z coordinate\n\ndouble\nDefault value : 0", "UsingDefaultValue": true, "Level": 2, "UseLevels": false, @@ -93,27 +106,27 @@ ], "Outputs": [ { - "Id": "ea1274b321e3434ab1feb45cfbf5c423", + "Id": "3bd1cd12408a4e1f93168d615035d0b9", "Name": "Point", - "Description": "Point", + "Description": "Point created by coordinates", "UsingDefaultValue": false, "Level": 2, "UseLevels": false, "KeepListStructure": false } ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Point.ByCoordinates@double,double,double", "Replication": "Auto", "Description": "Form a Point given 3 cartesian coordinates\n\nPoint.ByCoordinates (x: double = 0, y: double = 0, z: double = 0): Point" }, { "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "b94e4620241549b7905446bacd8f2575", "NodeType": "CodeBlockNode", - "Code": "5;\n2;\n8;", - "Id": "47226805f4414bd689711e386a9009d1", "Inputs": [], "Outputs": [ { - "Id": "fda37bde3bff4918bae30cd10c1797c8", + "Id": "87df79e8990c478287cf7e01edfacc59", "Name": "", "Description": "Value of expression at line 1", "UsingDefaultValue": false, @@ -122,7 +135,7 @@ "KeepListStructure": false }, { - "Id": "c1187922df394733ac3de443be39d50c", + "Id": "c8f154b66c6c40b29357c9ec144558f3", "Name": "", "Description": "Value of expression at line 2", "UsingDefaultValue": false, @@ -131,7 +144,7 @@ "KeepListStructure": false }, { - "Id": "499f49a8c89142b68ffe13bf693f7518", + "Id": "0f69dc552dbb4135be93bfe0ec9ae0a4", "Name": "", "Description": "Value of expression at line 3", "UsingDefaultValue": false, @@ -141,36 +154,36 @@ } ], "Replication": "Disabled", - "Description": "Allows for DesignScript code to be authored directly" + "Description": "Allows for DesignScript code to be authored directly", + "Code": "5;\n2;\n8;" }, { "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "ac757ce7226c48f3b97e86b9c5d0ec22", "NodeType": "FunctionNode", - "FunctionSignature": "Autodesk.DesignScript.Geometry.Point.ByCoordinates@double,double,double", - "Id": "af36d39a902b41c5adef72edc68ceae5", "Inputs": [ { - "Id": "d3b7fd707ee143d58930b85a1d4b738a", + "Id": "f7031972ca38460284f142e4b005dab5", "Name": "x", - "Description": "double\nDefault value : 0", + "Description": "X coordinate\n\ndouble\nDefault value : 0", "UsingDefaultValue": true, "Level": 2, "UseLevels": false, "KeepListStructure": false }, { - "Id": "ff6b509237604652942a32eea7896138", + "Id": "b382d33270724877acf5fe22f78f4257", "Name": "y", - "Description": "double\nDefault value : 0", + "Description": "Y coordinate\n\ndouble\nDefault value : 0", "UsingDefaultValue": true, "Level": 2, "UseLevels": false, "KeepListStructure": false }, { - "Id": "0c1f7b6396364a00b7542fdf9678a295", + "Id": "230590fd1dd344c1bce924a1cecf8451", "Name": "z", - "Description": "double\nDefault value : 0", + "Description": "Z coordinate\n\ndouble\nDefault value : 0", "UsingDefaultValue": true, "Level": 2, "UseLevels": false, @@ -179,27 +192,27 @@ ], "Outputs": [ { - "Id": "68c03f4f216a494dbf28a2f18ba24b22", + "Id": "7e5fbdee2f3e45a8944635556b380c30", "Name": "Point", - "Description": "Point", + "Description": "Point created by coordinates", "UsingDefaultValue": false, "Level": 2, "UseLevels": false, "KeepListStructure": false } ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Point.ByCoordinates@double,double,double", "Replication": "Auto", "Description": "Form a Point given 3 cartesian coordinates\n\nPoint.ByCoordinates (x: double = 0, y: double = 0, z: double = 0): Point" }, { "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "28a600d8493b48448e946bbd7fe3813b", "NodeType": "CodeBlockNode", - "Code": "8;\n2;\n5;", - "Id": "3273b2aa4cfd4c3c91550de1891faeaa", "Inputs": [], "Outputs": [ { - "Id": "c8f6486305c8463d84f06e7a93ed12ce", + "Id": "47604dc0a1314d16a015e3f49c0b861c", "Name": "", "Description": "Value of expression at line 1", "UsingDefaultValue": false, @@ -208,7 +221,7 @@ "KeepListStructure": false }, { - "Id": "2fdd8102d97046cf821179fa02144891", + "Id": "f080e54da77d4f5fbcfc7e6b8d537c86", "Name": "", "Description": "Value of expression at line 2", "UsingDefaultValue": false, @@ -217,7 +230,7 @@ "KeepListStructure": false }, { - "Id": "fa0357eb14ae4d8993150647e386609d", + "Id": "2260968bd1a14802a09752e4a5c315ef", "Name": "", "Description": "Value of expression at line 3", "UsingDefaultValue": false, @@ -227,16 +240,16 @@ } ], "Replication": "Disabled", - "Description": "Allows for DesignScript code to be authored directly" + "Description": "Allows for DesignScript code to be authored directly", + "Code": "8;\n2;\n5;" }, { "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "55a85a8cedfa4400a461d6765209c8eb", "NodeType": "FunctionNode", - "FunctionSignature": "Autodesk.DesignScript.Geometry.Geometry.Translate@Autodesk.DesignScript.Geometry.Vector", - "Id": "f3839b60bb8549689e40029318b3a205", "Inputs": [ { - "Id": "6c979f317c26445c9202704290478e1a", + "Id": "4e7c188102aa439a93392aba8f27c74d", "Name": "geometry", "Description": "Autodesk.DesignScript.Geometry.Geometry", "UsingDefaultValue": false, @@ -245,9 +258,18 @@ "KeepListStructure": false }, { - "Id": "5125db967a9348859d713b5828340245", + "Id": "4f75f9a3c86849ebbd916cc89dba7780", "Name": "direction", - "Description": "Vector", + "Description": "Displacement direction.\n\nVector", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "825cc58617e6471f8549a597f6242987", + "Name": "distance", + "Description": "Displacement distance along given direction.\n\ndouble", "UsingDefaultValue": false, "Level": 2, "UseLevels": false, @@ -256,223 +278,265 @@ ], "Outputs": [ { - "Id": "a78dce82bc2d4d179ae6b5cc6d128798", + "Id": "08b7e1def0504ecd95ae5515e64260fb", "Name": "Geometry", - "Description": "Geometry", + "Description": "Transformed Geometry.", "UsingDefaultValue": false, "Level": 2, "UseLevels": false, "KeepListStructure": false } ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Geometry.Translate@Autodesk.DesignScript.Geometry.Vector,double", "Replication": "Auto", - "Description": "Translate geometry in the given direction by the vector length\n\nGeometry.Translate (direction: Vector): Geometry" + "Description": "Translates any geometry type by the given distance in the given direction.\n\nGeometry.Translate (direction: Vector, distance: double): Geometry" }, { "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "7f968b4f4b1a481eb1e13a7b44b136d6", "NodeType": "FunctionNode", - "FunctionSignature": "Autodesk.DesignScript.Geometry.Vector.ByTwoPoints@Autodesk.DesignScript.Geometry.Point,Autodesk.DesignScript.Geometry.Point", - "Id": "a488bb48b6c549a0949332e00a23d213", - "Inputs": [ - { - "Id": "1ba8f5f72b73464a8326f9ba13ec6568", - "Name": "start", - "Description": "Point", - "UsingDefaultValue": false, - "Level": 2, - "UseLevels": false, - "KeepListStructure": false - }, + "Inputs": [], + "Outputs": [ { - "Id": "7e414d62b73044b1b14e6eac10ef6b37", - "Name": "end", - "Description": "Point", + "Id": "09145651f42c4c568e0d2b346f4b9286", + "Name": "Vector", + "Description": "Vector", "UsingDefaultValue": false, "Level": 2, "UseLevels": false, "KeepListStructure": false } ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Vector.XAxis", + "Replication": "Auto", + "Description": "Get the canonical X axis Vector (1,0,0)\n\nVector.XAxis ( ): Vector" + }, + { + "ConcreteType": "CoreNodeModels.Input.DoubleSlider, CoreNodeModels", + "NumberType": "Double", + "MaximumValue": 100.0, + "MinimumValue": 0.0, + "StepValue": 0.1, + "Id": "2162904aca0a42fda1ae5835a3fd68f0", + "NodeType": "NumberInputNode", + "Inputs": [], "Outputs": [ { - "Id": "250e3039ace44c62a979f274c389b670", - "Name": "Vector", - "Description": "Vector", + "Id": "6dd57310868d4fa0bfefd20ea5aa9ed1", + "Name": "", + "Description": "Double", "UsingDefaultValue": false, "Level": 2, "UseLevels": false, "KeepListStructure": false } ], - "Replication": "Auto", - "Description": "Form a Vector by two end points. The result is a vector from the start to the end point.\n\nVector.ByTwoPoints (start: Point, end: Point): Vector" + "Replication": "Disabled", + "Description": "Produces numeric values", + "InputValue": 13.1 } ], "Connectors": [ { - "Start": "a942ae9486114bf0ad27044ff1c8bd9d", - "End": "6c979f317c26445c9202704290478e1a", - "Id": "de90e5bd41d84dfcb86ad5cee85e4f02" - }, - { - "Start": "ea1274b321e3434ab1feb45cfbf5c423", - "End": "48b9e50b6b5c43c08312475833dce8bb", - "Id": "47307997fcb345d6be6663ccc4b3256f" + "Start": "4102fd6c1b3a430991edbd7b40c93b50", + "End": "4e7c188102aa439a93392aba8f27c74d", + "Id": "ba7f46da90624d7fae5d0fed5b4b4260", + "IsHidden": "False" }, { - "Start": "ea1274b321e3434ab1feb45cfbf5c423", - "End": "7e414d62b73044b1b14e6eac10ef6b37", - "Id": "565585a505ac429aa8cd4060fc8988f7" + "Start": "3bd1cd12408a4e1f93168d615035d0b9", + "End": "203be63b51464090b297630c1a1013de", + "Id": "8526d02f28bb4f2cb574e770ffbe6ae8", + "IsHidden": "False" }, { - "Start": "fda37bde3bff4918bae30cd10c1797c8", - "End": "e62ab938590348a6870a2001e9b6f267", - "Id": "cb6f6c75993e4d6698aa65ca34b66464" + "Start": "87df79e8990c478287cf7e01edfacc59", + "End": "68ce183826c54fe3a9571e11c725c072", + "Id": "9634996205e345159121e033a144f7ac", + "IsHidden": "False" }, { - "Start": "fda37bde3bff4918bae30cd10c1797c8", - "End": "5c75059887a047679d815da0ccb4ee1f", - "Id": "53c42e7934da4f3ca3774a86ab8520f3" + "Start": "87df79e8990c478287cf7e01edfacc59", + "End": "9b398f2c25b3465a947dc78385670e7f", + "Id": "7e7c3ee1b39b41b58375ed2ed3d0c478", + "IsHidden": "False" }, { - "Start": "c1187922df394733ac3de443be39d50c", - "End": "e1519910d9ff440c9a7f4164faa64194", - "Id": "954dac3367844ee496d684ec345f16bc" + "Start": "c8f154b66c6c40b29357c9ec144558f3", + "End": "de2d0ac4bc504be3bb4c115abe5ed20c", + "Id": "c13868696ad34f189f9700e27df41ddd", + "IsHidden": "False" }, { - "Start": "499f49a8c89142b68ffe13bf693f7518", - "End": "8e490955570a4e12b8619e96a2ea98a3", - "Id": "5e67a4e0855f49a0a695e97bcc412378" + "Start": "0f69dc552dbb4135be93bfe0ec9ae0a4", + "End": "f95d7cbdc89f4a25b4a40ed8d18530dc", + "Id": "9ced69408bab4642a85c3e50c1287065", + "IsHidden": "False" }, { - "Start": "68c03f4f216a494dbf28a2f18ba24b22", - "End": "e87437f4bc194fbdaacb1755e034378e", - "Id": "5c3580ee685e4cbab3b2646158b5327a" + "Start": "7e5fbdee2f3e45a8944635556b380c30", + "End": "772a12cae84a43fca9bf2dde08fca415", + "Id": "6cfbb6f219f7402c97a721ad745b44fc", + "IsHidden": "False" }, { - "Start": "68c03f4f216a494dbf28a2f18ba24b22", - "End": "1ba8f5f72b73464a8326f9ba13ec6568", - "Id": "6b915edf426c4839a55d98f7cbe6496a" + "Start": "47604dc0a1314d16a015e3f49c0b861c", + "End": "f7031972ca38460284f142e4b005dab5", + "Id": "d011333c6ff54f499b96e0feb162f466", + "IsHidden": "False" }, { - "Start": "c8f6486305c8463d84f06e7a93ed12ce", - "End": "d3b7fd707ee143d58930b85a1d4b738a", - "Id": "04a0d249b22b4ff0b285e33fd366544b" + "Start": "f080e54da77d4f5fbcfc7e6b8d537c86", + "End": "b382d33270724877acf5fe22f78f4257", + "Id": "1a9615e6fbbf4fc59c6e38fe574ec4bc", + "IsHidden": "False" }, { - "Start": "2fdd8102d97046cf821179fa02144891", - "End": "ff6b509237604652942a32eea7896138", - "Id": "7ce28f5a55eb42efb798d05d76102835" + "Start": "2260968bd1a14802a09752e4a5c315ef", + "End": "230590fd1dd344c1bce924a1cecf8451", + "Id": "b15402baaeb24e3f8a316de61fdd816e", + "IsHidden": "False" }, { - "Start": "fa0357eb14ae4d8993150647e386609d", - "End": "0c1f7b6396364a00b7542fdf9678a295", - "Id": "8d1b212f45274b31a41e8cd393d0e2ac" + "Start": "09145651f42c4c568e0d2b346f4b9286", + "End": "4f75f9a3c86849ebbd916cc89dba7780", + "Id": "e9bc0f443b1c4a9db1d35ae2f357e206", + "IsHidden": "False" }, { - "Start": "250e3039ace44c62a979f274c389b670", - "End": "5125db967a9348859d713b5828340245", - "Id": "902dbec3ceba4e6d9541bcfffed1c16c" + "Start": "6dd57310868d4fa0bfefd20ea5aa9ed1", + "End": "825cc58617e6471f8549a597f6242987", + "Id": "dbd7ab44e7b0414e99bfff1c9bdb16a3", + "IsHidden": "False" } ], "Dependencies": [], + "NodeLibraryDependencies": [], + "Thumbnail": "", + "GraphDocumentationURL": null, + "ExtensionWorkspaceData": [ + { + "ExtensionGuid": "28992e1d-abb9-417f-8b1b-05e053bee670", + "Name": "Properties", + "Version": "2.19", + "Data": {} + } + ], + "Author": "None provided", + "Linting": { + "activeLinter": "None", + "activeLinterId": "7b75fb44-43fd-4631-a878-29f4d5d8399a", + "warningCount": 0, + "errorCount": 0 + }, "Bindings": [], "View": { "Dynamo": { "ScaleFactor": 1.0, "HasRunWithoutCrash": true, "IsVisibleInDynamoLibrary": true, - "Version": "2.0.1.5055", + "Version": "2.19.0.5874", "RunType": "Automatic", "RunPeriod": "1000" }, "Camera": { - "Name": "Background Preview", - "EyeX": -17.001012802124023, - "EyeY": 10.430407524108887, - "EyeZ": 13.431360244750977, - "LookX": 18.684045791625977, - "LookY": -3.7516071796417236, - "LookZ": -17.30805778503418, - "UpX": -0.051173605024814606, - "UpY": 0.99756401777267456, - "UpZ": 0.047404918819665909 + "Name": "_Background Preview", + "EyeX": -7.6729857921600342, + "EyeY": 16.727499961853027, + "EyeZ": 40.840293884277344, + "LookX": -0.26518034934997559, + "LookY": -0.32398033142089844, + "LookZ": -48.911052703857422, + "UpX": 0.001127219176851213, + "UpY": 0.97814762592315674, + "UpZ": 0.20790864527225494 }, + "ConnectorPins": [], "NodeViews": [ { - "ShowGeometry": true, + "Id": "da4ec7f7f02d4a99b48f89e947fac347", "Name": "Cone.ByPointsRadius", - "Id": "9353c4dfe5c94c3b89718f7d9b2123ba", "IsSetAsInput": false, "IsSetAsOutput": false, "Excluded": false, - "X": 782.37335266502, - "Y": 201.87359689327548 + "ShowGeometry": true, + "X": 845.702088104533, + "Y": 238.09546980352502 }, { - "ShowGeometry": false, + "Id": "adcf9c630b9d4e4bace0a4064aac9857", "Name": "Point.ByCoordinates", - "Id": "fb784abe345a49ce9476f22cbf49e7a9", "IsSetAsInput": false, "IsSetAsOutput": false, "Excluded": false, - "X": 524.37335266502, - "Y": 374.87359689327548 + "ShowGeometry": false, + "X": 520.702088104533, + "Y": 367.095469803525 }, { - "ShowGeometry": true, + "Id": "b94e4620241549b7905446bacd8f2575", "Name": "Code Block", - "Id": "47226805f4414bd689711e386a9009d1", "IsSetAsInput": false, "IsSetAsOutput": false, "Excluded": false, - "X": 345.37335266502, - "Y": 383.3002635599421 + "ShowGeometry": true, + "X": 266.702088104533, + "Y": 375.750469803525 }, { - "ShowGeometry": false, + "Id": "ac757ce7226c48f3b97e86b9c5d0ec22", "Name": "Point.ByCoordinates", - "Id": "af36d39a902b41c5adef72edc68ceae5", "IsSetAsInput": false, "IsSetAsOutput": false, "Excluded": false, - "X": 524.37335266502, - "Y": 214.87359689327545 + "ShowGeometry": false, + "X": 520.702088104533, + "Y": 143.09546980352502 }, { - "ShowGeometry": true, + "Id": "28a600d8493b48448e946bbd7fe3813b", "Name": "Code Block", - "Id": "3273b2aa4cfd4c3c91550de1891faeaa", "IsSetAsInput": false, "IsSetAsOutput": false, "Excluded": false, - "X": 345.37335266502, - "Y": 227.51359689327543 + "ShowGeometry": true, + "X": 266.702088104533, + "Y": 160.57796980352498 }, { - "ShowGeometry": true, + "Id": "55a85a8cedfa4400a461d6765209c8eb", "Name": "Geometry.Translate", - "Id": "f3839b60bb8549689e40029318b3a205", "IsSetAsInput": false, "IsSetAsOutput": false, "Excluded": false, - "X": 1101.3733526650199, - "Y": 268.87359689327548 + "ShowGeometry": true, + "X": 1293.702088104533, + "Y": 395.095469803525 }, { - "ShowGeometry": true, - "Name": "Vector.ByTwoPoints", - "Id": "a488bb48b6c549a0949332e00a23d213", + "Id": "7f968b4f4b1a481eb1e13a7b44b136d6", + "Name": "Vector.XAxis", "IsSetAsInput": false, "IsSetAsOutput": false, "Excluded": false, - "X": 782.37335266502, - "Y": 361.87359689327548 + "ShowGeometry": true, + "X": 845.702088104533, + "Y": 451.09546980352496 + }, + { + "Id": "2162904aca0a42fda1ae5835a3fd68f0", + "Name": "Number Slider", + "IsSetAsInput": true, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 845.702088104533, + "Y": 598.095469803525 } ], "Annotations": [], - "X": -432.787822928817, - "Y": -214.872131636168, - "Zoom": 1.25584483561315 + "X": 78.336366016445254, + "Y": 15.229919779664613, + "Zoom": 0.60122796620338959 } } \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.Translate(geometry, direction, distance).md b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.Translate(geometry, direction, distance).md new file mode 100644 index 00000000000..97a9bb0d8a5 --- /dev/null +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.Translate(geometry, direction, distance).md @@ -0,0 +1,11 @@ +## In Depth +`Geometry.Translate (direction, distance)` moves input geometry to a given vector direction. The `distance` input controls the move distance. + +In the example below, a cone is translated along the X-axis. Its distance from the original cone is controlled with a number slider. + +In the example below, a cuboid is converted into a Solid Def. Copy the contents of the Watch node to use the Solid Def string representation in another graph. + +___ +## Example File + +![Geometry.Translate](./Autodesk.DesignScript.Geometry.Geometry.Translate(geometry,%20direction,%20distance)_img.jpg) \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.Translate(geometry, direction, distance)_img.jpg b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.Translate(geometry, direction, distance)_img.jpg new file mode 100644 index 00000000000..6dc49068825 Binary files /dev/null and b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.Translate(geometry, direction, distance)_img.jpg differ diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.Translate(geometry, xtranslation, ytranslation, ztranslation).dyn b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.Translate(geometry, xtranslation, ytranslation, ztranslation).dyn new file mode 100644 index 00000000000..e966064fe2c --- /dev/null +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.Translate(geometry, xtranslation, ytranslation, ztranslation).dyn @@ -0,0 +1,621 @@ +{ + "Uuid": "7f9b2664-3099-4afd-b6a1-95647f178dda", + "IsCustomNode": false, + "Description": "", + "Name": "Autodesk.DesignScript.Geometry.Geometry.Translate", + "ElementResolver": { + "ResolutionMap": {} + }, + "Inputs": [ + { + "Id": "fe39a2f8e74b4e93bbb86f7816b8ea39", + "Name": "Number Slider", + "Type": "number", + "Type2": "number", + "Value": "6", + "MaximumValue": 100.0, + "MinimumValue": 0.0, + "StepValue": 0.1, + "NumberType": "Double", + "Description": "Produces numeric values", + "SelectedIndex": 0 + }, + { + "Id": "2baa7eb93ca24735b2602d0a55144772", + "Name": "Number Slider", + "Type": "number", + "Type2": "number", + "Value": "0", + "MaximumValue": 100.0, + "MinimumValue": 0.0, + "StepValue": 0.1, + "NumberType": "Double", + "Description": "Produces numeric values", + "SelectedIndex": 0 + }, + { + "Id": "dec1992ff5564b72bdc04eb4a2eb6b79", + "Name": "Number Slider", + "Type": "number", + "Type2": "number", + "Value": "4.5", + "MaximumValue": 100.0, + "MinimumValue": 0.0, + "StepValue": 0.1, + "NumberType": "Double", + "Description": "Produces numeric values", + "SelectedIndex": 0 + } + ], + "Outputs": [], + "Nodes": [ + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "f20fc6756779434f9d734ece0b5707ff", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "6ddefcf70bc6464ea9cb033fd1262de1", + "Name": "startPoint", + "Description": "Point\nDefault value : Autodesk.DesignScript.Geometry.Point.ByCoordinates(0, 0, 0)", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "346b012075d046a197e39c4eac8d2c4a", + "Name": "endPoint", + "Description": "Point\nDefault value : Autodesk.DesignScript.Geometry.Point.ByCoordinates(0, 0, 1)", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "0afff9930100424cb30d073f0b042a74", + "Name": "startRadius", + "Description": "double\nDefault value : 1", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "112e801a8243426fada3f0c56e03b2c9", + "Name": "Cone", + "Description": "Cone", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Cone.ByPointsRadius@Autodesk.DesignScript.Geometry.Point,Autodesk.DesignScript.Geometry.Point,double", + "Replication": "Auto", + "Description": "Create a Cone with given base radius at start Point, extending to a apex at end Point.\n\nCone.ByPointsRadius (startPoint: Point = Autodesk.DesignScript.Geometry.Point.ByCoordinates(0, 0, 0), endPoint: Point = Autodesk.DesignScript.Geometry.Point.ByCoordinates(0, 0, 1), startRadius: double = 1): Cone" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "253dfbb801304c5b861a5d688f6e04ff", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "41c593f6cbac44fa871093ef93e197a4", + "Name": "x", + "Description": "X coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "e5d71bdad92749999bf5907dc60d9dde", + "Name": "y", + "Description": "Y coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "0f01ce7235bf437f9bc78120df5296d9", + "Name": "z", + "Description": "Z coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "56581031d6b142f8b59bc3ddbd8e927f", + "Name": "Point", + "Description": "Point created by coordinates", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Point.ByCoordinates@double,double,double", + "Replication": "Auto", + "Description": "Form a Point given 3 cartesian coordinates\n\nPoint.ByCoordinates (x: double = 0, y: double = 0, z: double = 0): Point" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "dcbd8228065142138e4c464c9c563a9d", + "NodeType": "CodeBlockNode", + "Inputs": [], + "Outputs": [ + { + "Id": "c61959f6878747ec89c56877bf4b85c3", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "79fd963952284d1caccd747cad9d548e", + "Name": "", + "Description": "Value of expression at line 2", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "52cd1bea4ad540a697709be4e92e159d", + "Name": "", + "Description": "Value of expression at line 3", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "5;\n2;\n8;" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "866139498be24e839f7afa8858e31e86", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "a43fe5d6c6dc4ed9881a4aaec441162a", + "Name": "x", + "Description": "X coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "29ff70b9e5cb46e29276d7f8909a947f", + "Name": "y", + "Description": "Y coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "d021aefb4500418d97afa649c4d3bd37", + "Name": "z", + "Description": "Z coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "98f7294a76054a698da43cc2eeea869a", + "Name": "Point", + "Description": "Point created by coordinates", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Point.ByCoordinates@double,double,double", + "Replication": "Auto", + "Description": "Form a Point given 3 cartesian coordinates\n\nPoint.ByCoordinates (x: double = 0, y: double = 0, z: double = 0): Point" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "2c3571831e3f4b25b3ad4f53290fb06a", + "NodeType": "CodeBlockNode", + "Inputs": [], + "Outputs": [ + { + "Id": "b2dc9a50886748b7b0fc17a7840ab9cd", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "7bae0cb5c907491096ac7da310f34411", + "Name": "", + "Description": "Value of expression at line 2", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "4fbccb1747af46568bdb39d1b1fe4439", + "Name": "", + "Description": "Value of expression at line 3", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "8;\n2;\n5;" + }, + { + "ConcreteType": "CoreNodeModels.Input.DoubleSlider, CoreNodeModels", + "NumberType": "Double", + "MaximumValue": 100.0, + "MinimumValue": 0.0, + "StepValue": 0.1, + "Id": "fe39a2f8e74b4e93bbb86f7816b8ea39", + "NodeType": "NumberInputNode", + "Inputs": [], + "Outputs": [ + { + "Id": "08d87207e5994515a75f1318ac325cc7", + "Name": "", + "Description": "Double", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Produces numeric values", + "InputValue": 6.0 + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "27c8c63205c940968bb40f6418e6302b", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "89a026fa0143491591aa4865203dde2f", + "Name": "geometry", + "Description": "Autodesk.DesignScript.Geometry.Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "80d0bd0c7ec64c74b116894d7f68b6d8", + "Name": "xTranslation", + "Description": "Displacement along X-axis.\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "fe6bd882d0de4fd8a84e64a37806b254", + "Name": "yTranslation", + "Description": "Displacement along Y-axis.\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "9de9db8c24014718a68dccef6f4ff71d", + "Name": "zTranslation", + "Description": "Displacement along Z-axis.\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "ecfea17f39bc454d8a839af515a7d1d9", + "Name": "Geometry", + "Description": "Transformed Geometry.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Geometry.Translate@double,double,double", + "Replication": "Auto", + "Description": "Translates any given geometry by the given displacements in the x, y, and z directions defined in WCS respectively.\n\nGeometry.Translate (xTranslation: double = 0, yTranslation: double = 0, zTranslation: double = 0): Geometry" + }, + { + "ConcreteType": "CoreNodeModels.Input.DoubleSlider, CoreNodeModels", + "NumberType": "Double", + "MaximumValue": 100.0, + "MinimumValue": 0.0, + "StepValue": 0.1, + "Id": "2baa7eb93ca24735b2602d0a55144772", + "NodeType": "NumberInputNode", + "Inputs": [], + "Outputs": [ + { + "Id": "561de80d180347c19457226be4f133ea", + "Name": "", + "Description": "Double", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Produces numeric values", + "InputValue": 0.0 + }, + { + "ConcreteType": "CoreNodeModels.Input.DoubleSlider, CoreNodeModels", + "NumberType": "Double", + "MaximumValue": 100.0, + "MinimumValue": 0.0, + "StepValue": 0.1, + "Id": "dec1992ff5564b72bdc04eb4a2eb6b79", + "NodeType": "NumberInputNode", + "Inputs": [], + "Outputs": [ + { + "Id": "6c66985b5f5548a0aa6831f7cae5820d", + "Name": "", + "Description": "Double", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Produces numeric values", + "InputValue": 4.5 + } + ], + "Connectors": [ + { + "Start": "112e801a8243426fada3f0c56e03b2c9", + "End": "89a026fa0143491591aa4865203dde2f", + "Id": "ea5ae4eeb5e048d2993b10625ff69137", + "IsHidden": "False" + }, + { + "Start": "56581031d6b142f8b59bc3ddbd8e927f", + "End": "346b012075d046a197e39c4eac8d2c4a", + "Id": "261d4cd857e941a5ae15ab365a4c33aa", + "IsHidden": "False" + }, + { + "Start": "c61959f6878747ec89c56877bf4b85c3", + "End": "41c593f6cbac44fa871093ef93e197a4", + "Id": "67c50679dcc844379edae0be4ff83bc9", + "IsHidden": "False" + }, + { + "Start": "c61959f6878747ec89c56877bf4b85c3", + "End": "0afff9930100424cb30d073f0b042a74", + "Id": "16a51335325a4ef5a6bead4171d71319", + "IsHidden": "False" + }, + { + "Start": "79fd963952284d1caccd747cad9d548e", + "End": "e5d71bdad92749999bf5907dc60d9dde", + "Id": "dede433cf5f74a16b2030b32a582db05", + "IsHidden": "False" + }, + { + "Start": "52cd1bea4ad540a697709be4e92e159d", + "End": "0f01ce7235bf437f9bc78120df5296d9", + "Id": "30d1b1385efd459e8bfc51be08bf50ec", + "IsHidden": "False" + }, + { + "Start": "98f7294a76054a698da43cc2eeea869a", + "End": "6ddefcf70bc6464ea9cb033fd1262de1", + "Id": "41646d16f5ac4011a5ce40464328aca3", + "IsHidden": "False" + }, + { + "Start": "b2dc9a50886748b7b0fc17a7840ab9cd", + "End": "a43fe5d6c6dc4ed9881a4aaec441162a", + "Id": "3fcb6e4897e74066b90fa7d3039e42a2", + "IsHidden": "False" + }, + { + "Start": "7bae0cb5c907491096ac7da310f34411", + "End": "29ff70b9e5cb46e29276d7f8909a947f", + "Id": "5ee355ab0a7247ee993690de72f7ce00", + "IsHidden": "False" + }, + { + "Start": "4fbccb1747af46568bdb39d1b1fe4439", + "End": "d021aefb4500418d97afa649c4d3bd37", + "Id": "887d54137d5b46519e304e565bfe5674", + "IsHidden": "False" + }, + { + "Start": "08d87207e5994515a75f1318ac325cc7", + "End": "9de9db8c24014718a68dccef6f4ff71d", + "Id": "dc52261a4eba4e9ebfe62f04a4a8506d", + "IsHidden": "False" + }, + { + "Start": "561de80d180347c19457226be4f133ea", + "End": "fe6bd882d0de4fd8a84e64a37806b254", + "Id": "e31ca245816146d99290c2d7c65bdc51", + "IsHidden": "False" + }, + { + "Start": "6c66985b5f5548a0aa6831f7cae5820d", + "End": "80d0bd0c7ec64c74b116894d7f68b6d8", + "Id": "d150e4f5feb34d8db950658b2ecd0980", + "IsHidden": "False" + } + ], + "Dependencies": [], + "NodeLibraryDependencies": [], + "Thumbnail": "", + "GraphDocumentationURL": null, + "ExtensionWorkspaceData": [ + { + "ExtensionGuid": "28992e1d-abb9-417f-8b1b-05e053bee670", + "Name": "Properties", + "Version": "2.19", + "Data": {} + } + ], + "Author": "None provided", + "Linting": { + "activeLinter": "None", + "activeLinterId": "7b75fb44-43fd-4631-a878-29f4d5d8399a", + "warningCount": 0, + "errorCount": 0 + }, + "Bindings": [], + "View": { + "Dynamo": { + "ScaleFactor": 1.0, + "HasRunWithoutCrash": true, + "IsVisibleInDynamoLibrary": true, + "Version": "2.19.4.6632", + "RunType": "Automatic", + "RunPeriod": "1000" + }, + "Camera": { + "Name": "_Background Preview", + "EyeX": -5.8434758186340332, + "EyeY": 16.81348991394043, + "EyeZ": 19.638652801513672, + "LookX": 3.5747978687286377, + "LookY": -5.7383012771606445, + "LookZ": -24.840076446533203, + "UpX": 0.0012430736096575856, + "UpY": 0.9999619722366333, + "UpZ": -0.0086375679820775986 + }, + "ConnectorPins": [], + "NodeViews": [ + { + "Id": "f20fc6756779434f9d734ece0b5707ff", + "Name": "Cone.ByPointsRadius", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 888.936195462029, + "Y": 133.49059604127851 + }, + { + "Id": "253dfbb801304c5b861a5d688f6e04ff", + "Name": "Point.ByCoordinates", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": false, + "X": 563.936195462029, + "Y": 262.49059604127848 + }, + { + "Id": "dcbd8228065142138e4c464c9c563a9d", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 309.936195462029, + "Y": 271.14559604127845 + }, + { + "Id": "866139498be24e839f7afa8858e31e86", + "Name": "Point.ByCoordinates", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": false, + "X": 563.936195462029, + "Y": 38.490596041278479 + }, + { + "Id": "2c3571831e3f4b25b3ad4f53290fb06a", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 309.936195462029, + "Y": 55.973096041278495 + }, + { + "Id": "fe39a2f8e74b4e93bbb86f7816b8ea39", + "Name": "Number Slider", + "IsSetAsInput": true, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 888.936195462029, + "Y": 640.49059604127842 + }, + { + "Id": "27c8c63205c940968bb40f6418e6302b", + "Name": "Geometry.Translate", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1336.936195462029, + "Y": 352.49059604127848 + }, + { + "Id": "2baa7eb93ca24735b2602d0a55144772", + "Name": "Number Slider", + "IsSetAsInput": true, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 888.936195462029, + "Y": 493.49059604127848 + }, + { + "Id": "dec1992ff5564b72bdc04eb4a2eb6b79", + "Name": "Number Slider", + "IsSetAsInput": true, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 888.936195462029, + "Y": 346.49059604127848 + } + ], + "Annotations": [], + "X": 148.2033863467193, + "Y": 158.66657132054763, + "Zoom": 0.73443653645446583 + } +} \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.Translate(geometry, xtranslation, ytranslation, ztranslation).md b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.Translate(geometry, xtranslation, ytranslation, ztranslation).md new file mode 100644 index 00000000000..e61adab955f --- /dev/null +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.Translate(geometry, xtranslation, ytranslation, ztranslation).md @@ -0,0 +1,8 @@ +## In Depth +`Geometry.Translate (xTranslation, yTranslation, zTranslation)` moves input geometry according to given displacements along the X, Y, and Z axes. + +In the example below, a cone is moved in the X and Z axis directions by a distance controlled by number sliders. +___ +## Example File + +![Geometry.Translate(xTranslation, yTranslation, zTranslation)](./Autodesk.DesignScript.Geometry.Geometry.Translate(geometry,%20xtranslation,%20ytranslation,%20ztranslation)_img.jpg) \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.Translate(geometry, xtranslation, ytranslation, ztranslation)_img.jpg b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.Translate(geometry, xtranslation, ytranslation, ztranslation)_img.jpg new file mode 100644 index 00000000000..23f1c15dfad Binary files /dev/null and b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Geometry.Translate(geometry, xtranslation, ytranslation, ztranslation)_img.jpg differ diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Helix.Radius.md b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Helix.Radius.md index 1d5ba3f35b8..2e165447063 100644 --- a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Helix.Radius.md +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Helix.Radius.md @@ -1,5 +1,8 @@ ## In Depth -Radius will return the center of an input sphere. In the example below, we use a ByBestFit node to create a sphere based on a set of random points. We then use a Radius node to determine the size of the best fit sphere. +`Helix.Radius` returns the distance from the central axis to the point on the helix on a plane perpendicular to the axis. + +In the example below, we create a helix using `Helix.ByAxis`, then use `Helix.Radius` to find the radius of the helix. + ___ ## Example File diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Line.ByBestFitThroughPoints.md b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Line.ByBestFitThroughPoints.md index c4329c64777..af79f180a22 100644 --- a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Line.ByBestFitThroughPoints.md +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Line.ByBestFitThroughPoints.md @@ -1,5 +1,8 @@ ## In Depth -Plane By Best Fit Through Points uses a set of points and finds the plane that best approximates the set. In the example, we use a series of RandomList components to generate random x,y and z coordinates. The points are created By Coordinates, and the list of points is then used as an input for ByBestFitThroughPoints. +`Line.BestFitThroughPoints` creates a line by approximating a scatter plot of points. The input is a list of points. + +In the example below, we use a number slider to control the number of random points generated and then find the best fit line through the set of points. + ___ ## Example File diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Line.ByStartPointEndPoint.md b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Line.ByStartPointEndPoint.md index e8aaefa84cc..3f27a7b7f2f 100644 --- a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Line.ByStartPointEndPoint.md +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Line.ByStartPointEndPoint.md @@ -1,5 +1,8 @@ ## In Depth -Reference planes can be created in both Revit projects and families. The reference plane in Revit does not dynamically change with its Dynamo inputs. +`Line.ByStartPointEndPoint` creates a line between two input points. + +In the example below, we use two code blocks to specify the X, Y, and Z coordinates of two points and then create a line between the two points. + ___ ## Example File diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.NurbsCurve.ByControlPointsWeightsKnots.md b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.NurbsCurve.ByControlPointsWeightsKnots.md index 65aa1719614..a21ea2bc2f5 100644 --- a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.NurbsCurve.ByControlPointsWeightsKnots.md +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.NurbsCurve.ByControlPointsWeightsKnots.md @@ -1,5 +1,8 @@ ## In Depth -Add in-depth information about ByControlPointsWeightsKnots... +`NurbsCurve.ByControlPointsWeightsKnots` allows us to manually control the weights and knots of a NurbsCurve. The list of weights should be the same length as the list of control points. The size of the list of knots must be equal to the number of control points plus the degree plus 1. + +In the example below, we first create a NurbsCurve by interpolating between a series of random points. We use knots, weights, and control points to find the corresponding parts of that curve. We can use `List.ReplaceItemAtIndex` to modify the list of weights. Finally, we use `NurbsCurve.ByControlPointsWeightsKnots` to recreate a NurbsCurve with the modified weights. + ___ ## Example File diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.NurbsSurface.ByPointsTangents.dyn b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.NurbsSurface.ByPointsTangents.dyn index e6d1995df62..3597764d96c 100644 --- a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.NurbsSurface.ByPointsTangents.dyn +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.NurbsSurface.ByPointsTangents.dyn @@ -1,81 +1,621 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file +{ + "Uuid": "139aa0df-4b26-45f7-b486-f11ec05fb55f", + "IsCustomNode": false, + "Description": "", + "Name": "Autodesk.DesignScript.Geometry.NurbsSurface.ByPointsTangents", + "ElementResolver": { + "ResolutionMap": { + "Vector": { + "Key": "Autodesk.DesignScript.Geometry.Vector", + "Value": "ProtoGeometry.dll" + } + } + }, + "Inputs": [], + "Outputs": [], + "Nodes": [ + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "e65b8d5c43f6410da92f5c71a1e08e97", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "9dedbd1eb7b44c049138d793fdfe18b1", + "Name": "points", + "Description": "Point[][]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "df3780ef5f4740978dcdabc99f9c0dc5", + "Name": "startUTangents", + "Description": "Vector[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "424b9a0c69a84d7e8d38ce5322b8015a", + "Name": "endUTangents", + "Description": "Vector[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "c7cc031741394b919ba8c12deb6db88e", + "Name": "startVTangents", + "Description": "Vector[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "631b9050cd414403b3d69616b9b4d5ed", + "Name": "endVTangents", + "Description": "Vector[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "06d69a7ef4c94603aacb36dae14b952b", + "Name": "NurbsSurface", + "Description": "NurbsSurface", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.NurbsSurface.ByPointsTangents@Autodesk.DesignScript.Geometry.Point[][],Autodesk.DesignScript.Geometry.Vector[],Autodesk.DesignScript.Geometry.Vector[],Autodesk.DesignScript.Geometry.Vector[],Autodesk.DesignScript.Geometry.Vector[]", + "Replication": "Auto", + "Description": "Creates a NurbsSurface with specified interpolated points and U and V degrees. The resultant surface will pass through all of the points. The number of tangents must match the number of points in the corresponding direction. The resultant surface will be degree 3 in both the U and V direction.\n\nNurbsSurface.ByPointsTangents (points: Point[][], startUTangents: Vector[], endUTangents: Vector[], startVTangents: Vector[], endVTangents: Vector[]): NurbsSurface" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "1073f72361d841178f067c91f46f106f", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "8d4cff0f6d564e0fb68e027f0107c606", + "Name": "x", + "Description": "X coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "8817b6e2f80b4705b50a10de8b405038", + "Name": "y", + "Description": "Y coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "852e62b88f0f46808abbed7e76918806", + "Name": "z", + "Description": "Z coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "c2f0f95cf86b43aeb644b5cc537f97cf", + "Name": "Point", + "Description": "Point created by coordinates", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Point.ByCoordinates@double,double,double", + "Replication": "CrossProduct", + "Description": "Form a Point given 3 cartesian coordinates\n\nPoint.ByCoordinates (x: double = 0, y: double = 0, z: double = 0): Point" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "226bc7a252134fdc9cbb0bfc06747b03", + "NodeType": "CodeBlockNode", + "Inputs": [], + "Outputs": [ + { + "Id": "d53af992a87142ca816dfde94064362e", + "Name": "", + "Description": "xPoints", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "d22a1accec614d7fba5de3e2f92d2a45", + "Name": "", + "Description": "yPoints", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "xPoints = [-10,0,10];\nyPoints = [-10,0];" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "9647dfaa7b0641b8b05d66894647f218", + "NodeType": "CodeBlockNode", + "Inputs": [], + "Outputs": [ + { + "Id": "ae1012df66144c56860eeccde70475e4", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "352044ad6b5c4ef89f7f3a929e2017d8", + "Name": "", + "Description": "Value of expression at line 2", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "90618cc70cc4432abe4493bcc6238cb5", + "Name": "", + "Description": "Value of expression at line 3", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "31e337fead2647c9ac653051434a4e57", + "Name": "", + "Description": "Value of expression at line 4", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "Vector.ByCoordinates(1, 0, 1);\nVector.ByCoordinates(1, 0, -1);\nVector.ByCoordinates(0, 1, 1);\nVector.ByCoordinates(0, 1, -1);" + }, + { + "ConcreteType": "CoreNodeModels.CreateList, CoreNodeModels", + "VariableInputPorts": true, + "Id": "6e2ec52e9d8241c4b88d8356a2d7c3cb", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "c7bdf57e4dd9461c9ab6a95576cdff53", + "Name": "item0", + "Description": "Item Index #0", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "6428b68adfb8445ba38ddd8604399f3e", + "Name": "item1", + "Description": "Item Index #1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "ba44f097731b4c00aaba97247285be87", + "Name": "list", + "Description": "A list (type: var[]..[])", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Makes a new list from the given inputs" + }, + { + "ConcreteType": "CoreNodeModels.CreateList, CoreNodeModels", + "VariableInputPorts": true, + "Id": "abb8a1efddf44b5ca424e3954d0a4664", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "9e8760f3086a41c6897b7ae64abd943a", + "Name": "item0", + "Description": "Item Index #0", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "a88edb46265f449484fdc7e993ba5cfd", + "Name": "item1", + "Description": "Item Index #1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "8a7a1f44f0c14117bc73c82eb3a85ae2", + "Name": "item2", + "Description": "Item Index #2", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "4ebe7ef90ffd4fb0bb169f868cef0631", + "Name": "list", + "Description": "A list (type: var[]..[])", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Makes a new list from the given inputs" + }, + { + "ConcreteType": "CoreNodeModels.CreateList, CoreNodeModels", + "VariableInputPorts": true, + "Id": "1eb53eae24f64958972f730df928de1b", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "c3c0d73bb2ed45c0b14484166c104e2c", + "Name": "item0", + "Description": "Item Index #0", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "9aa4292ce82c4d4fbcb836d56b834e1e", + "Name": "item1", + "Description": "Item Index #1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "19fef117ae814a85988620d1566bc4b2", + "Name": "list", + "Description": "A list (type: var[]..[])", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Makes a new list from the given inputs" + }, + { + "ConcreteType": "CoreNodeModels.CreateList, CoreNodeModels", + "VariableInputPorts": true, + "Id": "461b7caa5e784739abe593a24fde85ed", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "c19a1613bf8344a8a4dcd09b757bde5a", + "Name": "item0", + "Description": "Item Index #0", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "7c93c2f80a404bb5a5050abfd115030c", + "Name": "item1", + "Description": "Item Index #1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "814e8dedd3994739a2e6a18153c074da", + "Name": "item2", + "Description": "Item Index #2", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "876df1e6312d407f92646289ad36a148", + "Name": "list", + "Description": "A list (type: var[]..[])", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Makes a new list from the given inputs" + } + ], + "Connectors": [ + { + "Start": "c2f0f95cf86b43aeb644b5cc537f97cf", + "End": "9dedbd1eb7b44c049138d793fdfe18b1", + "Id": "6d1b60e119104583beb799367abc7af7", + "IsHidden": "False" + }, + { + "Start": "d53af992a87142ca816dfde94064362e", + "End": "8d4cff0f6d564e0fb68e027f0107c606", + "Id": "d0a392345dbc4bcb8b6efaf2abaec453", + "IsHidden": "False" + }, + { + "Start": "d22a1accec614d7fba5de3e2f92d2a45", + "End": "8817b6e2f80b4705b50a10de8b405038", + "Id": "470b0767a7884d20a4a22a3c76900a46", + "IsHidden": "False" + }, + { + "Start": "ae1012df66144c56860eeccde70475e4", + "End": "c3c0d73bb2ed45c0b14484166c104e2c", + "Id": "d9a516a3edc14e878a4744ae8103b01a", + "IsHidden": "False" + }, + { + "Start": "ae1012df66144c56860eeccde70475e4", + "End": "9aa4292ce82c4d4fbcb836d56b834e1e", + "Id": "47f5df2494474924ad2f35522e6dd84c", + "IsHidden": "False" + }, + { + "Start": "352044ad6b5c4ef89f7f3a929e2017d8", + "End": "c7bdf57e4dd9461c9ab6a95576cdff53", + "Id": "7267382642fb438588798273ff461d1c", + "IsHidden": "False" + }, + { + "Start": "352044ad6b5c4ef89f7f3a929e2017d8", + "End": "6428b68adfb8445ba38ddd8604399f3e", + "Id": "754c9109ee2041b4b3da4a2bf07834fe", + "IsHidden": "False" + }, + { + "Start": "90618cc70cc4432abe4493bcc6238cb5", + "End": "9e8760f3086a41c6897b7ae64abd943a", + "Id": "871da3db24fc491cb5aedfc9fceecf5b", + "IsHidden": "False" + }, + { + "Start": "90618cc70cc4432abe4493bcc6238cb5", + "End": "8a7a1f44f0c14117bc73c82eb3a85ae2", + "Id": "5ee0186231a744f981daa4928f3f03fb", + "IsHidden": "False" + }, + { + "Start": "90618cc70cc4432abe4493bcc6238cb5", + "End": "c19a1613bf8344a8a4dcd09b757bde5a", + "Id": "7787c6ac2f28404c8a89dc815d21c364", + "IsHidden": "False" + }, + { + "Start": "90618cc70cc4432abe4493bcc6238cb5", + "End": "7c93c2f80a404bb5a5050abfd115030c", + "Id": "ffb9f4aaf678487f96ca417cb59946f3", + "IsHidden": "False" + }, + { + "Start": "90618cc70cc4432abe4493bcc6238cb5", + "End": "814e8dedd3994739a2e6a18153c074da", + "Id": "8dcd7f1fa786460cb23344c71088706e", + "IsHidden": "False" + }, + { + "Start": "31e337fead2647c9ac653051434a4e57", + "End": "a88edb46265f449484fdc7e993ba5cfd", + "Id": "81e8b5ac920f45baa55d224b633cce95", + "IsHidden": "False" + }, + { + "Start": "ba44f097731b4c00aaba97247285be87", + "End": "631b9050cd414403b3d69616b9b4d5ed", + "Id": "8c656e8a9cdc4b82affbb11cea5700ce", + "IsHidden": "False" + }, + { + "Start": "4ebe7ef90ffd4fb0bb169f868cef0631", + "End": "df3780ef5f4740978dcdabc99f9c0dc5", + "Id": "a3ed56e73ab94153bcb00563193f79e3", + "IsHidden": "False" + }, + { + "Start": "19fef117ae814a85988620d1566bc4b2", + "End": "c7cc031741394b919ba8c12deb6db88e", + "Id": "af295549bc544298b6bcac00e6e3438a", + "IsHidden": "False" + }, + { + "Start": "876df1e6312d407f92646289ad36a148", + "End": "424b9a0c69a84d7e8d38ce5322b8015a", + "Id": "50c4a445f50e4d8d82f0e860e286efbe", + "IsHidden": "False" + } + ], + "Dependencies": [], + "NodeLibraryDependencies": [], + "Thumbnail": "", + "GraphDocumentationURL": null, + "ExtensionWorkspaceData": [ + { + "ExtensionGuid": "28992e1d-abb9-417f-8b1b-05e053bee670", + "Name": "Properties", + "Version": "3.0", + "Data": {} + }, + { + "ExtensionGuid": "DFBD9CC0-DB40-457A-939E-8C8555555A9D", + "Name": "Generative Design", + "Version": "1.2", + "Data": {} + } + ], + "Author": "", + "Linting": { + "activeLinter": "None", + "activeLinterId": "7b75fb44-43fd-4631-a878-29f4d5d8399a", + "warningCount": 0, + "errorCount": 0 + }, + "Bindings": [], + "View": { + "Dynamo": { + "ScaleFactor": 1.0, + "HasRunWithoutCrash": true, + "IsVisibleInDynamoLibrary": true, + "Version": "2.19.4.6632", + "RunType": "Automatic", + "RunPeriod": "1000" + }, + "Camera": { + "Name": "_Background Preview", + "EyeX": -24.607419967651367, + "EyeY": 18.742544174194336, + "EyeZ": 24.380161285400391, + "LookX": 12.4334716796875, + "LookY": -22.468406677246094, + "LookZ": -29.738014221191406, + "UpX": 0.14761900901794434, + "UpY": 0.92387807369232178, + "UpZ": -0.35306951403617859 + }, + "ConnectorPins": [], + "NodeViews": [ + { + "Id": "e65b8d5c43f6410da92f5c71a1e08e97", + "Name": "NurbsSurface.ByPointsTangents", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 642.46989114363782, + "Y": 642.07014983825218 + }, + { + "Id": "1073f72361d841178f067c91f46f106f", + "Name": "Point.ByCoordinates", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 254.23717479918491, + "Y": 361.60201788790584 + }, + { + "Id": "226bc7a252134fdc9cbb0bfc06747b03", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -141.91207690459345, + "Y": 373.4394804730947 + }, + { + "Id": "9647dfaa7b0641b8b05d66894647f218", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -241.02660259946924, + "Y": 663.31007029105763 + }, + { + "Id": "6e2ec52e9d8241c4b88d8356a2d7c3cb", + "Name": "List Create", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 307.47385082604796, + "Y": 726.91581222865761 + }, + { + "Id": "abb8a1efddf44b5ca424e3954d0a4664", + "Name": "List Create", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 307.44183174349894, + "Y": 888.00466968781313 + }, + { + "Id": "1eb53eae24f64958972f730df928de1b", + "Name": "List Create", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 304.78385020161238, + "Y": 573.43189852076284 + }, + { + "Id": "461b7caa5e784739abe593a24fde85ed", + "Name": "List Create", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 314.43060565733447, + "Y": 1092.9848485927082 + } + ], + "Annotations": [], + "X": 226.36047026720104, + "Y": -113.7022393531912, + "Zoom": 0.639847040084828 + } +} \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.NurbsSurface.ByPointsTangents.md b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.NurbsSurface.ByPointsTangents.md index c403311c8af..2361698c780 100644 --- a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.NurbsSurface.ByPointsTangents.md +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.NurbsSurface.ByPointsTangents.md @@ -1,7 +1,9 @@ ## In Depth -Creates a NurbsSurface with specified interpolated points and U and V degrees. The resultant surface will pass through all of the points. The number of tangents must match the number of points in the corresponding direction. The resultant surface will be degree 3 in both the U and V direction. -___ -## Example File +`NurbsSurface.ByPointsTangents` creates a smooth surface that passes through each of a grid (list of lists) of points. Specify tangent vectors to control the surface direction at the edges. The number of tangents must match the number of points in the corresponding direction (U - number of lists, V - number of points in each list). +In the example below, a NurbsSurface is created from given points and U and V tangents. +___ +## Example File +![NurbsSurface.ByPointsTangents](./Autodesk.DesignScript.Geometry.NurbsSurface.ByPointsTangents_img.jpg) \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.NurbsSurface.ByPointsTangents_img.jpg b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.NurbsSurface.ByPointsTangents_img.jpg index 98a233e9d12..a9a07510c9b 100644 Binary files a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.NurbsSurface.ByPointsTangents_img.jpg and b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.NurbsSurface.ByPointsTangents_img.jpg differ diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Point.Add.md b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Point.Add.md index b005968ece5..bb1ecf4e4a3 100644 --- a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Point.Add.md +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Point.Add.md @@ -1,5 +1,8 @@ ## In Depth -Add will return a Vector that is the sum of two other Vectors. In the example below, the sum of the WCS Z axis and X axis Vectors results in a Vector with coordinates of (1,0,1). The new Vector is represented as a Line. +`Point.Add` adds the x, y, and z components of an input vector to the corresponding coordinates of the input point. This is the same as translating the point by the given vector and is equivalent to using `Geometry.Translate (vector)`. + +In the example below, we create a point using a code block to specify the x, y, and z coordinates, then add a world XAxis vector as the `vectorToAdd`. The result is the point translated by a distance of 1 in the positive x-direction. + ___ ## Example File diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Point.Subtract.md b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Point.Subtract.md index 9dff06df98a..79b7e0c3b3c 100644 --- a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Point.Subtract.md +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Point.Subtract.md @@ -1,5 +1,8 @@ ## In Depth -Subtract will return a Vector that is the difference of two other Vectors. In the example below, the difference of the a Vector with coordinates (1,0,1) and WCS Z axis results in a Vector with coordinates of (1,0,0). Adjusting the Vector Direction slider will change the vector's coordinate values and return a different subtracted vector. The Vectors are represented as Lines. +`Point.Subtract` subtracts the x, y, and z components of an input vector from the corresponding coordinates of the input point. This is the same as translating the point by the reverse of a given vector. + +In the example below, we create a point using a code block to specify the x, y, and z coordinates, then add a world XAxis vector as the `vectorToSubtract`. The result is the point translated by a distance of 1 in the negative-x direction. + ___ ## Example File diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Point.X.md b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Point.X.md index 7913cd97397..e42ec2237a7 100644 --- a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Point.X.md +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Point.X.md @@ -1,5 +1,8 @@ ## In Depth -X returns a double representing a reference point's X coordinate value in the Revit conceptual design environment. +`Point.X` returns the world space x value of an input point. + +In the example below, we use `Point.BySphericalCoordinates` to create a point and then use `Point.X` to return its x coordinate. + ___ ## Example File diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Point.Y.md b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Point.Y.md index 606d59f76a7..d868af516bb 100644 --- a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Point.Y.md +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Point.Y.md @@ -1,5 +1,8 @@ ## In Depth -Y returns a double representing a reference point's Y coordinate value in the Revit conceptual design environment. +`Point.Y` returns the world space y value of an input point. + +In the example below, we use `Point.BySphericalCoordinates` to create a point and then use `Point.Y` to return the y coordinate. + ___ ## Example File diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Point.Z.md b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Point.Z.md index 5b301cae8df..84b4af59627 100644 --- a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Point.Z.md +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Point.Z.md @@ -1,5 +1,8 @@ ## In Depth -Z returns a double representing a reference point's Z coordinate value in the Revit conceptual design environment. +`Point.Z` returns the world space z value of an input point. + +In the example below, we use `Point.BySphericalCoordinates` to create a point and then use `Point.Z` to return its z coordinate. + ___ ## Example File diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.PolyCurve.ByGroupedCurves(curves, joinTolerance, trimCurves, trimLength).dyn b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.PolyCurve.ByGroupedCurves(curves, joinTolerance, trimCurves, trimLength).dyn new file mode 100644 index 00000000000..0d219596c75 --- /dev/null +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.PolyCurve.ByGroupedCurves(curves, joinTolerance, trimCurves, trimLength).dyn @@ -0,0 +1,448 @@ +{ + "Uuid": "ece24c9b-d93e-4fa1-b16e-71cd10d2af16", + "IsCustomNode": false, + "Description": "", + "Name": "Autodesk.DesignScript.Geometry.PolyCurve.ByGroupedCurves", + "ElementResolver": { + "ResolutionMap": {} + }, + "Inputs": [], + "Outputs": [], + "Nodes": [ + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "dc4a442c37e84394ad07a302e20a6f8b", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "9784079fe97a46c3a22d0a0e45f4ed3c", + "Name": "circle", + "Description": "Circle", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "65f8d02ebb5940148f47645f2d784ad1", + "Name": "numberSides", + "Description": "int\nDefault value : 5", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "d151ff5499504c9b9df740c8c356b1cd", + "Name": "Polygon", + "Description": "Polygon", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Polygon.RegularPolygon@Autodesk.DesignScript.Geometry.Circle,int", + "Replication": "Auto", + "Description": "Construct an inscribed Polygon Curve within a circle.\n\nPolygon.RegularPolygon (circle: Circle, numberSides: int = 5): Polygon" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "b1d759dfde434ef69437cf238612a5c4", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "54c4b5d6359a46d5ba55420ffdf2f4f3", + "Name": "centerPoint", + "Description": "Center point of circle\n\nPoint\nDefault value : Autodesk.DesignScript.Geometry.Point.ByCoordinates(0, 0, 0)", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "5c011c76e4ce461f9e8dbc3d0d18cd20", + "Name": "radius", + "Description": "Radius\n\ndouble\nDefault value : 1", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "b540749554364616a1fb3544c5b71a93", + "Name": "Circle", + "Description": "Circle created with center point and radius", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Circle.ByCenterPointRadius@Autodesk.DesignScript.Geometry.Point,double", + "Replication": "Auto", + "Description": "Creates a Circle with input center Point and radius in the world XY plane, with world Z as normal.\n\nCircle.ByCenterPointRadius (centerPoint: Point = Autodesk.DesignScript.Geometry.Point.ByCoordinates(0, 0, 0), radius: double = 1): Circle" + }, + { + "ConcreteType": "CoreNodeModels.Input.DoubleSlider, CoreNodeModels", + "NumberType": "Double", + "MaximumValue": 100.0, + "MinimumValue": 0.0, + "StepValue": 0.1, + "Id": "f7194dc99489408d8178b17fe8ad7b67", + "NodeType": "NumberInputNode", + "Inputs": [], + "Outputs": [ + { + "Id": "cfb5ead61e1d486e918fe5406d11d448", + "Name": "", + "Description": "Double", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Produces numeric values", + "InputValue": 5.0 + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "b7ab4ba94b0c440a864bd977ed4fbcb5", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "1e11a702229844d8864bda95258a31da", + "Name": "geometry", + "Description": "Autodesk.DesignScript.Geometry.Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "fe7ea0724167405e8286c90a5bcc3f97", + "Name": "Geometry[]", + "Description": "Geometry[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Geometry.Explode", + "Replication": "Auto", + "Description": "Separates compound or non-separated elements into their component parts.\n\nGeometry.Explode ( ): Geometry[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "6671c6bb1ad0486383be9b14c20f6c90", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "6079ad5b8f2049a9a7c0e1c278ccbaa1", + "Name": "list", + "Description": "List to shuffle.\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "232e7e9a8c6943c188e95c16da3018ce", + "Name": "list", + "Description": "Randomized list.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.List.Shuffle@var[]..[]", + "Replication": "Auto", + "Description": "Shuffles a list, randomizing the order of its items.\n\nList.Shuffle (list: var[]..[]): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "663c199ddc3040cba375dacb6e307c82", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "ecb20e97f60f4dc88e98d2f0763fa8cf", + "Name": "curves", + "Description": "Curves to group together to create one or more PolyCurves\n\nCurve[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "4d925950694f4ae18518e7ff1226f5b1", + "Name": "joinTolerance", + "Description": "Tolerance to determine size of gap allowed between curves to be joined\n\ndouble\nDefault value : 0.001", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "aec70093cac74b20999296f6969c5df3", + "Name": "trimCurves", + "Description": "bool\nDefault value : false", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "540825a8fa3c4952b2cb72ff1214ca2f", + "Name": "trimLength", + "Description": "double\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "e6ce669af362485cb312cfc259214773", + "Name": "PolyCurve[]..[]", + "Description": "PolyCurve[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.PolyCurve.ByGroupedCurves@Autodesk.DesignScript.Geometry.Curve[],double,bool,double", + "Replication": "Auto", + "Description": "Make one or more polycurves by grouping connected curves. Choose a preferred join tolerance between 1e-6 and 1e-3 units.\n\nPolyCurve.ByGroupedCurves (curves: Curve[], joinTolerance: double = 0.001, trimCurves: bool = false, trimLength: double = 0): PolyCurve[]..[]" + } + ], + "Connectors": [ + { + "Start": "d151ff5499504c9b9df740c8c356b1cd", + "End": "1e11a702229844d8864bda95258a31da", + "Id": "d6f2bd8421f344d596164c383b75fe68", + "IsHidden": "False" + }, + { + "Start": "b540749554364616a1fb3544c5b71a93", + "End": "9784079fe97a46c3a22d0a0e45f4ed3c", + "Id": "b07f2eb1a4014e85bc88d1281aa0b231", + "IsHidden": "False" + }, + { + "Start": "cfb5ead61e1d486e918fe5406d11d448", + "End": "5c011c76e4ce461f9e8dbc3d0d18cd20", + "Id": "977f938c8e3749d98571be14d011fa76", + "IsHidden": "False" + }, + { + "Start": "cfb5ead61e1d486e918fe5406d11d448", + "End": "65f8d02ebb5940148f47645f2d784ad1", + "Id": "9ef92bfd51784d32ba8633d89a9456e4", + "IsHidden": "False" + }, + { + "Start": "fe7ea0724167405e8286c90a5bcc3f97", + "End": "6079ad5b8f2049a9a7c0e1c278ccbaa1", + "Id": "4c6f6f42918a49e0871000b36bae1d2d", + "IsHidden": "False" + }, + { + "Start": "232e7e9a8c6943c188e95c16da3018ce", + "End": "ecb20e97f60f4dc88e98d2f0763fa8cf", + "Id": "9c340984557248b59699414653037026", + "IsHidden": "False" + } + ], + "Dependencies": [], + "NodeLibraryDependencies": [], + "Thumbnail": "", + "GraphDocumentationURL": null, + "ExtensionWorkspaceData": [ + { + "ExtensionGuid": "28992e1d-abb9-417f-8b1b-05e053bee670", + "Name": "Properties", + "Version": "2.19", + "Data": {} + } + ], + "Author": "", + "Linting": { + "activeLinter": "None", + "activeLinterId": "7b75fb44-43fd-4631-a878-29f4d5d8399a", + "warningCount": 0, + "errorCount": 0 + }, + "Bindings": [], + "View": { + "Dynamo": { + "ScaleFactor": 100.0, + "HasRunWithoutCrash": true, + "IsVisibleInDynamoLibrary": true, + "Version": "2.19.0.5874", + "RunType": "Manual", + "RunPeriod": "1000" + }, + "Camera": { + "Name": "_Background Preview", + "EyeX": -21.393106460571289, + "EyeY": 61.044334411621094, + "EyeZ": 28.072494506835938, + "LookX": 16.393106460571289, + "LookY": -50.044334411621094, + "LookZ": -36.072494506835938, + "UpX": 0.26176926493644714, + "UpY": 0.77439266443252563, + "UpZ": -0.57601475715637207 + }, + "ConnectorPins": [], + "NodeViews": [ + { + "Id": "dc4a442c37e84394ad07a302e20a6f8b", + "Name": "Polygon.RegularPolygon", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": false, + "X": 970.375, + "Y": 289.0 + }, + { + "Id": "b1d759dfde434ef69437cf238612a5c4", + "Name": "Circle.ByCenterPointRadius", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": false, + "X": 593.875, + "Y": 141.5 + }, + { + "Id": "f7194dc99489408d8178b17fe8ad7b67", + "Name": "Number Slider", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": false, + "X": 145.875, + "Y": 323.0 + }, + { + "Id": "b7ab4ba94b0c440a864bd977ed4fbcb5", + "Name": "Geometry.Explode", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1301.0, + "Y": 289.0 + }, + { + "Id": "6671c6bb1ad0486383be9b14c20f6c90", + "Name": "List.Shuffle", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1630.5, + "Y": 289.0 + }, + { + "Id": "663c199ddc3040cba375dacb6e307c82", + "Name": "PolyCurve.ByGroupedCurves", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2022.5, + "Y": 289.0 + } + ], + "Annotations": [ + { + "Id": "89ece4adfd1140659fbe17344abd5f1e", + "Title": "Creating a pentagon, exploding it and randomizing the curves", + "DescriptionText": " ", + "IsExpanded": true, + "WidthAdjustment": 0.0, + "HeightAdjustment": 0.0, + "Nodes": [ + "dc4a442c37e84394ad07a302e20a6f8b", + "b1d759dfde434ef69437cf238612a5c4", + "f7194dc99489408d8178b17fe8ad7b67", + "b7ab4ba94b0c440a864bd977ed4fbcb5", + "6671c6bb1ad0486383be9b14c20f6c90", + "5d3c8627243e431ba68a170bec2b7398" + ], + "HasNestedGroups": false, + "Left": 135.875, + "Top": 68.5, + "Width": 1724.625, + "Height": 398.5, + "FontSize": 36.0, + "GroupStyleId": "bc688959-ce34-4bf5-90f8-6ddd23f80989", + "InitialTop": 141.5, + "InitialHeight": 326.5, + "TextblockHeight": 63.0, + "Background": "#FFA4E1FF" + }, + { + "Id": "5d3c8627243e431ba68a170bec2b7398", + "Title": "All curves are random and thus do not have an ordered way of being joined together. ", + "DescriptionText": null, + "IsExpanded": true, + "WidthAdjustment": 0.0, + "HeightAdjustment": 0.0, + "Nodes": [], + "HasNestedGroups": false, + "Left": 1579.5, + "Top": 224.0, + "Width": 0.0, + "Height": 0.0, + "FontSize": 36.0, + "GroupStyleId": "00000000-0000-0000-0000-000000000000", + "InitialTop": 0.0, + "InitialHeight": 0.0, + "TextblockHeight": 0.0, + "Background": "#FFC1D676", + "PinnedNode": "6671c6bb1ad0486383be9b14c20f6c90" + }, + { + "Id": "29b69a89b6db459b86f2b8b83145b7a5", + "Title": "This node will group curves based on their proximity to other curves, either touching or within a join tolerance to correct re-order and connect them into a single PolyCurve.", + "DescriptionText": null, + "IsExpanded": true, + "WidthAdjustment": 0.0, + "HeightAdjustment": 0.0, + "Nodes": [], + "HasNestedGroups": false, + "Left": 2019.0, + "Top": 195.0, + "Width": 0.0, + "Height": 0.0, + "FontSize": 36.0, + "GroupStyleId": "00000000-0000-0000-0000-000000000000", + "InitialTop": 0.0, + "InitialHeight": 0.0, + "TextblockHeight": 0.0, + "Background": "#FFC1D676" + } + ], + "X": 85.857822538222308, + "Y": 159.35939758889697, + "Zoom": 0.48393088887524149 + } +} \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.PolyCurve.ByGroupedCurves(curves, joinTolerance, trimCurves, trimLength).md b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.PolyCurve.ByGroupedCurves(curves, joinTolerance, trimCurves, trimLength).md new file mode 100644 index 00000000000..4cbae5d85d9 --- /dev/null +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.PolyCurve.ByGroupedCurves(curves, joinTolerance, trimCurves, trimLength).md @@ -0,0 +1,8 @@ +## In Depth +`PolyCurve.ByGroupedCurves` creates a new PolyCurve by grouping multiple connected curves. It groups curves based on their proximity to other curves, either touching or within a given join tolerance, to connect them into a single PolyCurve. + +In the example below, a pentagon is exploded and its curves are randomized. `PolyCurve.ByGroupedCurves` is then used to group them into a PolyCurve. +___ +## Example File + +![PolyCurve.ByGroupedCurves](./Autodesk.DesignScript.Geometry.PolyCurve.ByGroupedCurves(curves,%20joinTolerance,%20trimCurves,%20trimLength)_img.jpg) \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.PolyCurve.ByGroupedCurves(curves, joinTolerance, trimCurves, trimLength)_img.jpg b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.PolyCurve.ByGroupedCurves(curves, joinTolerance, trimCurves, trimLength)_img.jpg new file mode 100644 index 00000000000..b72b5742594 Binary files /dev/null and b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.PolyCurve.ByGroupedCurves(curves, joinTolerance, trimCurves, trimLength)_img.jpg differ diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.PolyCurve.ByGroupedCurves.md b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.PolyCurve.ByGroupedCurves.md deleted file mode 100644 index 7d895f63ca1..00000000000 --- a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.PolyCurve.ByGroupedCurves.md +++ /dev/null @@ -1,6 +0,0 @@ -## In Depth -PolyCurve.ByGroupedCurves will make one or more polycurves by grouping connected curves, (includes lines, arcs, etc.) with a given tolerance. -___ -## Example File - -![PolyCurve.ByGroupedCurves](./Autodesk.DesignScript.Geometry.PolyCurve.ByGroupedCurves_img.png) \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.PolyCurve.ByJoinedCurves.dyn b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.PolyCurve.ByJoinedCurves(curves, joinTolerance, trimCurves, trimLength).dyn similarity index 73% rename from doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.PolyCurve.ByJoinedCurves.dyn rename to doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.PolyCurve.ByJoinedCurves(curves, joinTolerance, trimCurves, trimLength).dyn index c9c8a7ea34b..bd130ab0465 100644 --- a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.PolyCurve.ByJoinedCurves.dyn +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.PolyCurve.ByJoinedCurves(curves, joinTolerance, trimCurves, trimLength).dyn @@ -1,5 +1,5 @@ { - "Uuid": "3c9d0464-8643-5ffe-96e5-ab1769818209", + "Uuid": "7ced7b2d-a631-4369-9d77-6665e8e39744", "IsCustomNode": false, "Description": "", "Name": "Autodesk.DesignScript.Geometry.PolyCurve.ByJoinedCurves", @@ -8,7 +8,7 @@ }, "Inputs": [ { - "Id": "74d100b9320c42a19737c18253352c6c", + "Id": "fa16955cc9a7434681b29d3351dd8b71", "Name": "Number", "Type": "number", "Type2": "number", @@ -22,12 +22,11 @@ "Nodes": [ { "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "cea57dee0ce14bfeb1497c7c8ff0feed", "NodeType": "FunctionNode", - "FunctionSignature": "Autodesk.DesignScript.Geometry.Polygon.RegularPolygon@Autodesk.DesignScript.Geometry.Circle,int", - "Id": "e8bd67d92058495087d072431b062d5a", "Inputs": [ { - "Id": "028f3749073848838e7c5e1ed952c017", + "Id": "b84fc4a4aa9042f0a484b02dc621e657", "Name": "circle", "Description": "Circle", "UsingDefaultValue": false, @@ -36,7 +35,7 @@ "KeepListStructure": false }, { - "Id": "196b2caaa69c47da9b978b950d79813d", + "Id": "470ee6113fd34d608177756d3dd6dac2", "Name": "numberSides", "Description": "int\nDefault value : 5", "UsingDefaultValue": true, @@ -47,7 +46,7 @@ ], "Outputs": [ { - "Id": "885fe67deb624e16b2b770e5a776bcac", + "Id": "0fc71041a9764f28b462864676a656e5", "Name": "Polygon", "Description": "Polygon", "UsingDefaultValue": false, @@ -56,17 +55,17 @@ "KeepListStructure": false } ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Polygon.RegularPolygon@Autodesk.DesignScript.Geometry.Circle,int", "Replication": "Auto", "Description": "Construct an inscribed Polygon Curve within a circle.\n\nPolygon.RegularPolygon (circle: Circle, numberSides: int = 5): Polygon" }, { "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "3eb0c793c1834954bcae07ad9b471654", "NodeType": "FunctionNode", - "FunctionSignature": "Autodesk.DesignScript.Geometry.Circle.ByCenterPointRadius@Autodesk.DesignScript.Geometry.Point,double", - "Id": "15359348927049f6873ee088814ec018", "Inputs": [ { - "Id": "a7c19a53b6d24743b3d2077a7c7b4e8e", + "Id": "7ecb38d047b744f88ab5fee2b3a0d924", "Name": "centerPoint", "Description": "Center point of circle\n\nPoint\nDefault value : Autodesk.DesignScript.Geometry.Point.ByCoordinates(0, 0, 0)", "UsingDefaultValue": true, @@ -75,7 +74,7 @@ "KeepListStructure": false }, { - "Id": "0c120af0b03e4d69adb0c86132fa7448", + "Id": "da0d349ece154541ae8bca8a394a8c37", "Name": "radius", "Description": "Radius\n\ndouble\nDefault value : 1", "UsingDefaultValue": true, @@ -86,7 +85,7 @@ ], "Outputs": [ { - "Id": "e8bce0bc0e6f4960b90d9fbfea32a4f7", + "Id": "0ac9bbc0c6964a47b51394bfab0808b4", "Name": "Circle", "Description": "Circle created with center point and radius", "UsingDefaultValue": false, @@ -95,17 +94,17 @@ "KeepListStructure": false } ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Circle.ByCenterPointRadius@Autodesk.DesignScript.Geometry.Point,double", "Replication": "Auto", "Description": "Creates a Circle with input center Point and radius in the world XY plane, with world Z as normal.\n\nCircle.ByCenterPointRadius (centerPoint: Point = Autodesk.DesignScript.Geometry.Point.ByCoordinates(0, 0, 0), radius: double = 1): Circle" }, { "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "db852272f12d4658b8e25db0b5471ac1", "NodeType": "FunctionNode", - "FunctionSignature": "Autodesk.DesignScript.Geometry.Point.ByCoordinates@double,double", - "Id": "ae2cf4d3605b412d995e3dfbda63b359", "Inputs": [ { - "Id": "7a32aef3fe6b412da72e9b2446f69901", + "Id": "56446a9139b94014b7ad13e5db0e4aff", "Name": "x", "Description": "X coordinate\n\ndouble\nDefault value : 0", "UsingDefaultValue": true, @@ -114,7 +113,7 @@ "KeepListStructure": false }, { - "Id": "07ffe30b5185419bb7305bd0a5cf0f70", + "Id": "d13c75a657bb4df5befd296f3e5cf173", "Name": "y", "Description": "Y coordinate\n\ndouble\nDefault value : 0", "UsingDefaultValue": true, @@ -125,7 +124,7 @@ ], "Outputs": [ { - "Id": "488e8561195d4e5da83aa49be51fc691", + "Id": "9dd7cdcb5c344552baa81ea81d81a314", "Name": "Point", "Description": "Point created by coordinates", "UsingDefaultValue": false, @@ -134,18 +133,18 @@ "KeepListStructure": false } ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Point.ByCoordinates@double,double", "Replication": "Auto", "Description": "Form a Point in the XY plane given two 2 cartesian coordinates. The Z component is 0.\n\nPoint.ByCoordinates (x: double = 0, y: double = 0): Point" }, { "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "2eb4a46c56e14511b867475fb22d0de9", "NodeType": "CodeBlockNode", - "Code": "1;\n3;", - "Id": "1b45a3194e6c4429ae3cb3322157dced", "Inputs": [], "Outputs": [ { - "Id": "88e962e0cfda488f91f5d5d72667562d", + "Id": "bc44e22f90d642eeb697182ef9290b66", "Name": "", "Description": "Value of expression at line 1", "UsingDefaultValue": false, @@ -154,7 +153,7 @@ "KeepListStructure": false }, { - "Id": "ef6a38994a9d400abd89fd096675d424", + "Id": "c15a70d741b7449abeddf7367f56a56d", "Name": "", "Description": "Value of expression at line 2", "UsingDefaultValue": false, @@ -164,18 +163,18 @@ } ], "Replication": "Disabled", - "Description": "Allows for DesignScript code to be authored directly" + "Description": "Allows for DesignScript code to be authored directly", + "Code": "1;\n3;" }, { "ConcreteType": "CoreNodeModels.Input.DoubleInput, CoreNodeModels", - "NodeType": "NumberInputNode", "NumberType": "Double", - "InputValue": 5.0, - "Id": "74d100b9320c42a19737c18253352c6c", + "Id": "fa16955cc9a7434681b29d3351dd8b71", + "NodeType": "NumberInputNode", "Inputs": [], "Outputs": [ { - "Id": "419351d39fc3422f87e3767efafafb2d", + "Id": "f7a961de4b81420883d5a8c53e8fd822", "Name": "", "Description": "Double", "UsingDefaultValue": false, @@ -185,16 +184,16 @@ } ], "Replication": "Disabled", - "Description": "Creates a number" + "Description": "Creates a number", + "InputValue": 5.0 }, { "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "f8c951af36d54b87822eacd2fcc28bca", "NodeType": "FunctionNode", - "FunctionSignature": "Autodesk.DesignScript.Geometry.Geometry.Explode", - "Id": "0edebe63c1174265802646b6e9e1f086", "Inputs": [ { - "Id": "895cdf3c4a7f4a18bf155a6c58d80401", + "Id": "6b273a63e8bc46a29bec564748b47d69", "Name": "geometry", "Description": "Autodesk.DesignScript.Geometry.Geometry", "UsingDefaultValue": false, @@ -205,7 +204,7 @@ ], "Outputs": [ { - "Id": "652be9c443b545e29e3c961ff3064f41", + "Id": "c5aa598011ad4c62aca920e571d0979f", "Name": "Geometry[]", "Description": "Geometry[]", "UsingDefaultValue": false, @@ -214,17 +213,17 @@ "KeepListStructure": false } ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Geometry.Explode", "Replication": "Auto", "Description": "Separates compound or non-separated elements into their component parts.\n\nGeometry.Explode ( ): Geometry[]" }, { "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "4787fcbe7acf463d877516db6706d220", "NodeType": "FunctionNode", - "FunctionSignature": "Autodesk.DesignScript.Geometry.PolyCurve.ByJoinedCurves@Autodesk.DesignScript.Geometry.Curve[],double,bool,double", - "Id": "f7dba8d5ff44407c9a337edd06c62f60", "Inputs": [ { - "Id": "f906dfaff37244f5abc832ca6449fb33", + "Id": "f5df868a2745417684448ca9b85ddbd9", "Name": "curves", "Description": "Curves to join into polycurve\n\nCurve[]", "UsingDefaultValue": false, @@ -233,7 +232,7 @@ "KeepListStructure": false }, { - "Id": "3fa28aee75f7443eb5d5faa2da0238ca", + "Id": "55edd51dd4034031846d67aaabb04594", "Name": "joinTolerance", "Description": "Tolerance to determine size of gap allowed between curves to be joined\n\ndouble\nDefault value : 0.001", "UsingDefaultValue": true, @@ -242,7 +241,7 @@ "KeepListStructure": false }, { - "Id": "cc79d3efb7fa4dccbf7af9a8facbd4e9", + "Id": "551e4cb01c8f40e2a967cedf31c61cac", "Name": "trimCurves", "Description": "bool\nDefault value : false", "UsingDefaultValue": true, @@ -251,7 +250,7 @@ "KeepListStructure": false }, { - "Id": "20ca032e6719457e9edadd41ab05a43c", + "Id": "e82b43ec7c944b18bd245181aa14bc73", "Name": "trimLength", "Description": "double\nDefault value : 0", "UsingDefaultValue": true, @@ -262,7 +261,7 @@ ], "Outputs": [ { - "Id": "11b3687a3596436ebef77218e828687e", + "Id": "a25c8ef8278e40559fc63b6aa98f2f2f", "Name": "PolyCurve", "Description": "Polycurve created by joined curves", "UsingDefaultValue": false, @@ -271,69 +270,70 @@ "KeepListStructure": false } ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.PolyCurve.ByJoinedCurves@Autodesk.DesignScript.Geometry.Curve[],double,bool,double", "Replication": "Auto", "Description": "Make PolyCurve by joining curves. Flips curve as needed for connectivity. Choose a preferred join tolerance between 1e-6 and 1e-3 units.\n\nPolyCurve.ByJoinedCurves (curves: Curve[], joinTolerance: double = 0.001, trimCurves: bool = false, trimLength: double = 0): PolyCurve" } ], "Connectors": [ { - "Start": "885fe67deb624e16b2b770e5a776bcac", - "End": "895cdf3c4a7f4a18bf155a6c58d80401", - "Id": "ab9d6311986949b1be7828fb95577674", + "Start": "0fc71041a9764f28b462864676a656e5", + "End": "6b273a63e8bc46a29bec564748b47d69", + "Id": "032c0c3460864f2abd5786480a0434f2", "IsHidden": "False" }, { - "Start": "e8bce0bc0e6f4960b90d9fbfea32a4f7", - "End": "028f3749073848838e7c5e1ed952c017", - "Id": "85c3189780464b0e94c877c834294503", + "Start": "0ac9bbc0c6964a47b51394bfab0808b4", + "End": "b84fc4a4aa9042f0a484b02dc621e657", + "Id": "62f3bb53d3074f49b26810dae69dedd0", "IsHidden": "False" }, { - "Start": "488e8561195d4e5da83aa49be51fc691", - "End": "a7c19a53b6d24743b3d2077a7c7b4e8e", - "Id": "9ab75dd6fe574f269d0044ea1fc5dd2e", + "Start": "9dd7cdcb5c344552baa81ea81d81a314", + "End": "7ecb38d047b744f88ab5fee2b3a0d924", + "Id": "c9fe4f085b6840ccb5160b0027759f89", "IsHidden": "False" }, { - "Start": "88e962e0cfda488f91f5d5d72667562d", - "End": "7a32aef3fe6b412da72e9b2446f69901", - "Id": "09b46a30c910413f90cb07ee6a699de1", + "Start": "bc44e22f90d642eeb697182ef9290b66", + "End": "56446a9139b94014b7ad13e5db0e4aff", + "Id": "d5df2643a6da4354ab7a80b96ccc21cb", "IsHidden": "False" }, { - "Start": "ef6a38994a9d400abd89fd096675d424", - "End": "07ffe30b5185419bb7305bd0a5cf0f70", - "Id": "5f0cd0e7d8014365a4be87c2cdbe295f", + "Start": "c15a70d741b7449abeddf7367f56a56d", + "End": "d13c75a657bb4df5befd296f3e5cf173", + "Id": "cdf5878308704f83ae2f6a3a93f1965c", "IsHidden": "False" }, { - "Start": "419351d39fc3422f87e3767efafafb2d", - "End": "0c120af0b03e4d69adb0c86132fa7448", - "Id": "24b7152b5e884b42af43ae207130fc8b", + "Start": "f7a961de4b81420883d5a8c53e8fd822", + "End": "da0d349ece154541ae8bca8a394a8c37", + "Id": "1019084bcc364246826e6ea1cf29a06f", "IsHidden": "False" }, { - "Start": "419351d39fc3422f87e3767efafafb2d", - "End": "196b2caaa69c47da9b978b950d79813d", - "Id": "d0f16d97efd8496cb68fa03ca9ba65b6", + "Start": "f7a961de4b81420883d5a8c53e8fd822", + "End": "470ee6113fd34d608177756d3dd6dac2", + "Id": "4f1d15f464814fd7aa187847f63670dc", "IsHidden": "False" }, { - "Start": "652be9c443b545e29e3c961ff3064f41", - "End": "f906dfaff37244f5abc832ca6449fb33", - "Id": "ffa4811af30d4409b789a6d7bcec012e", + "Start": "c5aa598011ad4c62aca920e571d0979f", + "End": "f5df868a2745417684448ca9b85ddbd9", + "Id": "735d78c82caa4ac4bcbdd0a55c7c2a27", "IsHidden": "False" } ], "Dependencies": [], "NodeLibraryDependencies": [], - "Thumbnail": null, + "Thumbnail": "", "GraphDocumentationURL": null, "ExtensionWorkspaceData": [ { "ExtensionGuid": "28992e1d-abb9-417f-8b1b-05e053bee670", "Name": "Properties", - "Version": "2.17", + "Version": "2.19", "Data": {} } ], @@ -350,15 +350,15 @@ "ScaleFactor": 1.0, "HasRunWithoutCrash": true, "IsVisibleInDynamoLibrary": true, - "Version": "2.17.0.3255", - "RunType": "Manual", + "Version": "2.19.0.5874", + "RunType": "Automatic", "RunPeriod": "1000" }, "Camera": { "Name": "_Background Preview", - "EyeX": -1.3467477338674225, - "EyeY": 9.1670795838008026, - "EyeZ": 4.8400235098915392, + "EyeX": -5.2865187525749207, + "EyeY": 8.4793238639831543, + "EyeZ": 3.4582529067993164, "LookX": 3.300147533416748, "LookY": -5.7156438827514648, "LookZ": -6.5646471977233887, @@ -369,79 +369,79 @@ "ConnectorPins": [], "NodeViews": [ { + "Id": "cea57dee0ce14bfeb1497c7c8ff0feed", "Name": "Polygon.RegularPolygon", - "ShowGeometry": true, - "Id": "e8bd67d92058495087d072431b062d5a", "IsSetAsInput": false, "IsSetAsOutput": false, "Excluded": false, - "X": 287.19563845001596, - "Y": -99.557196209511176 + "ShowGeometry": true, + "X": 288.46612959296908, + "Y": -104.02052099892569 }, { + "Id": "3eb0c793c1834954bcae07ad9b471654", "Name": "Circle.ByCenterPointRadius", - "ShowGeometry": false, - "Id": "15359348927049f6873ee088814ec018", "IsSetAsInput": false, "IsSetAsOutput": false, "Excluded": false, - "X": -88.804361549984037, - "Y": -99.557196209511176 + "ShowGeometry": false, + "X": -95.8617772852532, + "Y": -165.88497209429113 }, { + "Id": "db852272f12d4658b8e25db0b5471ac1", "Name": "Point.ByCoordinates", - "ShowGeometry": false, - "Id": "ae2cf4d3605b412d995e3dfbda63b359", "IsSetAsInput": false, "IsSetAsOutput": false, "Excluded": false, - "X": -413.60436154998411, - "Y": -177.55719620951118 + "ShowGeometry": false, + "X": -412.53387040703092, + "Y": -182.02052099892569 }, { + "Id": "2eb4a46c56e14511b867475fb22d0de9", "Name": "Code Block", - "ShowGeometry": false, - "Id": "1b45a3194e6c4429ae3cb3322157dced", "IsSetAsInput": false, "IsSetAsOutput": false, "Excluded": false, - "X": -668.00436154998408, - "Y": -168.90219620951117 + "ShowGeometry": false, + "X": -666.53387040703092, + "Y": -173.36552099892569 }, { + "Id": "fa16955cc9a7434681b29d3351dd8b71", "Name": "Number", - "ShowGeometry": false, - "Id": "74d100b9320c42a19737c18253352c6c", "IsSetAsInput": true, "IsSetAsOutput": false, "Excluded": false, - "X": -413.60436154998411, - "Y": 12.442803790488824 + "ShowGeometry": false, + "X": -412.53387040703092, + "Y": 7.97947900107431 }, { + "Id": "f8c951af36d54b87822eacd2fcc28bca", "Name": "Geometry.Explode", - "ShowGeometry": true, - "Id": "0edebe63c1174265802646b6e9e1f086", "IsSetAsInput": false, "IsSetAsOutput": false, "Excluded": false, - "X": 643.195638450016, - "Y": -99.557196209511176 + "ShowGeometry": true, + "X": 644.46612959296908, + "Y": -104.02052099892569 }, { + "Id": "4787fcbe7acf463d877516db6706d220", "Name": "PolyCurve.ByJoinedCurves", - "ShowGeometry": true, - "Id": "f7dba8d5ff44407c9a337edd06c62f60", "IsSetAsInput": false, "IsSetAsOutput": false, "Excluded": false, - "X": 995.99563845001592, - "Y": -99.557196209511176 + "ShowGeometry": true, + "X": 994.118477263776, + "Y": -113.0827926873597 } ], "Annotations": [], - "X": 461.68605612107274, - "Y": 215.59470836825085, - "Zoom": 0.66060355518809433 + "X": 414.4583702778699, + "Y": 195.04424511807269, + "Zoom": 0.58161697902844367 } } \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.PolyCurve.ByJoinedCurves(curves, joinTolerance, trimCurves, trimLength).md b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.PolyCurve.ByJoinedCurves(curves, joinTolerance, trimCurves, trimLength).md new file mode 100644 index 00000000000..b744112606c --- /dev/null +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.PolyCurve.ByJoinedCurves(curves, joinTolerance, trimCurves, trimLength).md @@ -0,0 +1,8 @@ +## In Depth +`PolyCurve.ByJoinedCurves` creates joined curves from a set of curves with matching vertices. You can determine the permissible size of the gap between curves to be joined with the ‘joinTolerance` input. + +In the example below, a `Polygon.RegularPolygon` is exploded into a curve list and is then rejoined into a PolyCurve. +___ +## Example File + +![PolyCurve.ByJoinedCurves](./Autodesk.DesignScript.Geometry.PolyCurve.ByJoinedCurves(curves,%20joinTolerance,%20trimCurves,%20trimLength)_img.jpg) \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.PolyCurve.ByJoinedCurves(curves, joinTolerance, trimCurves, trimLength)_img.jpg b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.PolyCurve.ByJoinedCurves(curves, joinTolerance, trimCurves, trimLength)_img.jpg new file mode 100644 index 00000000000..4ddc60f7921 Binary files /dev/null and b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.PolyCurve.ByJoinedCurves(curves, joinTolerance, trimCurves, trimLength)_img.jpg differ diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.PolyCurve.ByJoinedCurves.md b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.PolyCurve.ByJoinedCurves.md deleted file mode 100644 index bdb213243f4..00000000000 --- a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.PolyCurve.ByJoinedCurves.md +++ /dev/null @@ -1,7 +0,0 @@ -## In Depth -Polycurve By Joined Curves creates joined curves from a set of curves with matching vertices. In this example, a RegularPolygon is exploded into a curve list and is then rejoined into a Polycurve. -___ -## Example File - -![ByJoinedCurves](./Autodesk.DesignScript.Geometry.PolyCurve.ByJoinedCurves_img.jpg) - diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.PolyCurve.ByJoinedCurves_img.jpg b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.PolyCurve.ByJoinedCurves_img.jpg deleted file mode 100644 index 57168292208..00000000000 Binary files a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.PolyCurve.ByJoinedCurves_img.jpg and /dev/null differ diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.PolyCurve.ByPoints.md b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.PolyCurve.ByPoints.md index 0229ce9e376..b96a29710a9 100644 --- a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.PolyCurve.ByPoints.md +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.PolyCurve.ByPoints.md @@ -1,5 +1,8 @@ ## In Depth -Revit will generate and contour a mesh from a list of supplied points. The points cannot be collinear. +`PolyCurve.ByPoints` creates joined curves from a set of vertices. This node also enables toggling between a closed and an open shape with the `connectLastToFirst` input. + +In the example below, points are created along a circle and are redrawn with a `PolyCurve.ByPoints` node, creating a closed polygon shape. + ___ ## Example File diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.PolyCurve.Curves.md b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.PolyCurve.Curves.md index 2899b31d92e..9d17eac521b 100644 --- a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.PolyCurve.Curves.md +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.PolyCurve.Curves.md @@ -1,5 +1,8 @@ ## In Depth -A revision cloud's curves are returned as geometry in Dynamo. +`PolyCurve.Curves` returns a list of the individual curves that make up an input PolyCurve. + +In the example below, we generate a set of random points and then use `PolyCurve.ByPoints` to create an open PolyCurve. We then use `PolyCurve.Curves` to generate a list of the individual curves making up the PolyCurve. + ___ ## Example File diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.PolyCurve.Heal.dyn b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.PolyCurve.Heal.dyn new file mode 100644 index 00000000000..386d11f5cf8 --- /dev/null +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.PolyCurve.Heal.dyn @@ -0,0 +1,409 @@ +{ + "Uuid": "8e601d6f-3a54-4d0c-bbb1-f96ac106f176", + "IsCustomNode": false, + "Description": "", + "Name": "Autodesk.DesignScript.Geometry.PolyCurve.Heal", + "ElementResolver": { + "ResolutionMap": { + "Line": { + "Key": "Autodesk.DesignScript.Geometry.Line", + "Value": "ProtoGeometry.dll" + }, + "Point": { + "Key": "Autodesk.DesignScript.Geometry.Point", + "Value": "ProtoGeometry.dll" + }, + "PolyCurve": { + "Key": "Autodesk.DesignScript.Geometry.PolyCurve", + "Value": "ProtoGeometry.dll" + }, + "Color": { + "Key": "DSCore.Color", + "Value": "DSCoreNodes.dll" + } + } + }, + "Inputs": [], + "Outputs": [], + "Nodes": [ + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "fea628b9698d48abb9366011a5489be5", + "NodeType": "CodeBlockNode", + "Inputs": [], + "Outputs": [ + { + "Id": "cae171040f6e456b9a40d2b79e994593", + "Name": "", + "Description": "a", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "e2055df5216e4d57a76ed8e783b73d51", + "Name": "", + "Description": "b", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "c5384ee03f764bf98a8a6ffbb884cc9d", + "Name": "", + "Description": "c", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "94d811b052834ae89821e7f57e3bddfd", + "Name": "", + "Description": "d", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "7d47fccda7a34035b0fb75c7b66b8557", + "Name": "", + "Description": "t1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "a = Line.ByStartPointEndPoint(Point.ByCoordinates(0, 0, 0), Point.ByCoordinates(1000, 0, 0));\nb = Line.ByStartPointEndPoint(Point.ByCoordinates(1000, 0, 0), Point.ByCoordinates(1000, 1000, 0));\nc = Line.ByStartPointEndPoint(Point.ByCoordinates(1000, 1000, 0), Point.ByCoordinates(0, 1000, 0));\nd = Line.ByStartPointEndPoint(Point.ByCoordinates(0, 1000, 0), Point.ByCoordinates(100, -100, 0));\n\nt1 = [ a, b, c, d ];" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "f98f8afc9189497cacc68f861ef5b880", + "NodeType": "CodeBlockNode", + "Inputs": [ + { + "Id": "033cbdbd512f4650bff84bdaaadd3e65", + "Name": "t1", + "Description": "t1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "a467d37750d6446488c8dfc4d4c86d06", + "Name": "", + "Description": "polyCurve1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "polyCurve1 = PolyCurve.ByJoinedCurves(t1, 0.001, false, 0);" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "9ac0e47511c64d07a5faf0a3df5f1642", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "1603a57e3ebf495991e5d2fcaa77d707", + "Name": "polyCurve", + "Description": "Autodesk.DesignScript.Geometry.PolyCurve", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "38aca096029b4ae18732eefe72bf806c", + "Name": "Point[]", + "Description": "Point[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.PolyCurve.Points", + "Replication": "Auto", + "Description": "Returns the start point of the first component and the end points of every component curve. For a closed polycurve, as the start and end points are the same, the end point is excluded.\n\nPolyCurve.Points: Point[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "897ad78e9daf458eabcba15f1f9a5c03", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "7449a73b352549e7a93ffeba1d229109", + "Name": "polyCurve", + "Description": "Autodesk.DesignScript.Geometry.PolyCurve", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "63671c34b5d44cb1ab123950adebda9b", + "Name": "trimLength", + "Description": "If trimLength is greater than 0 then end segments longer than trimLength will not be trimmed.\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "c1c4948fb7e94173a7094bef6ad241d2", + "Name": "PolyCurve", + "Description": "Non-self-intersecting, non-overlapping PolyCurve", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.PolyCurve.Heal@double", + "Replication": "Auto", + "Description": "Heals a self-intersecting PolyCurve by returning a new one that isn't self-intersecting if the overlapping segment length is less than or equal to trimLength.\n\nPolyCurve.Heal (trimLength: double = 0): PolyCurve" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "1c30d89118404504ae845a2e69f5cd64", + "NodeType": "CodeBlockNode", + "Inputs": [], + "Outputs": [ + { + "Id": "e55e18df204f413883aabd5a6bf21604", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "Color.ByARGB(100,255,75,75);" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "0884cd9fd9a94df3b32d290c05e0c1de", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "f09b8deab8e343be9c5dde8cdaf23498", + "Name": "geometry", + "Description": "The geometry to which you would like to apply color.\n\nGeometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "c85f0fffd8564bf9ad78ca81012f2456", + "Name": "color", + "Description": "The color.\n\nColor", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "5298572523dc43a3bb717619d159a185", + "Name": "GeometryColor", + "Description": "A Display object.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Modifiers.GeometryColor.ByGeometryColor@Autodesk.DesignScript.Geometry.Geometry,DSCore.Color", + "Replication": "Auto", + "Description": "Display geometry using a color.\n\nGeometryColor.ByGeometryColor (geometry: Geometry, color: Color): GeometryColor" + } + ], + "Connectors": [ + { + "Start": "7d47fccda7a34035b0fb75c7b66b8557", + "End": "033cbdbd512f4650bff84bdaaadd3e65", + "Id": "528bace2aa044d02a8c386ba8131d16f", + "IsHidden": "False" + }, + { + "Start": "a467d37750d6446488c8dfc4d4c86d06", + "End": "7449a73b352549e7a93ffeba1d229109", + "Id": "640c47b1dfec4bd5a04796cda939dda5", + "IsHidden": "False" + }, + { + "Start": "a467d37750d6446488c8dfc4d4c86d06", + "End": "f09b8deab8e343be9c5dde8cdaf23498", + "Id": "db02e0118a1e451bb2597cf418ccb072", + "IsHidden": "False" + }, + { + "Start": "c1c4948fb7e94173a7094bef6ad241d2", + "End": "1603a57e3ebf495991e5d2fcaa77d707", + "Id": "43e0028cdb5c472fa572161bb8d20ae5", + "IsHidden": "False" + }, + { + "Start": "e55e18df204f413883aabd5a6bf21604", + "End": "c85f0fffd8564bf9ad78ca81012f2456", + "Id": "10fe9a6ecafd42dbabea47e4263ca5cc", + "IsHidden": "False" + } + ], + "Dependencies": [], + "NodeLibraryDependencies": [], + "Thumbnail": "", + "GraphDocumentationURL": null, + "ExtensionWorkspaceData": [ + { + "ExtensionGuid": "28992e1d-abb9-417f-8b1b-05e053bee670", + "Name": "Properties", + "Version": "3.0", + "Data": {} + } + ], + "Author": "", + "Linting": { + "activeLinter": "None", + "activeLinterId": "7b75fb44-43fd-4631-a878-29f4d5d8399a", + "warningCount": 0, + "errorCount": 0 + }, + "Bindings": [], + "View": { + "Dynamo": { + "ScaleFactor": 1.0, + "HasRunWithoutCrash": true, + "IsVisibleInDynamoLibrary": true, + "Version": "2.19.0.5874", + "RunType": "Automatic", + "RunPeriod": "1000" + }, + "Camera": { + "Name": "_Background Preview", + "EyeX": 2412.05712890625, + "EyeY": 2370.64111328125, + "EyeZ": 410.162353515625, + "LookX": -1656.14599609375, + "LookY": -2854.080078125, + "LookZ": -1060.75390625, + "UpX": -0.574835479259491, + "UpY": 0.73075836896896362, + "UpZ": -0.36817991733551025 + }, + "ConnectorPins": [], + "NodeViews": [ + { + "Id": "fea628b9698d48abb9366011a5489be5", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": false, + "X": 265.0030442174691, + "Y": -92.327868545668224 + }, + { + "Id": "f98f8afc9189497cacc68f861ef5b880", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": false, + "X": 1103.0030442174691, + "Y": -10.430368545668216 + }, + { + "Id": "9ac0e47511c64d07a5faf0a3df5f1642", + "Name": "PolyCurve.Points", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2131.5030442174689, + "Y": -10.257868545668146 + }, + { + "Id": "897ad78e9daf458eabcba15f1f9a5c03", + "Name": "PolyCurve.Heal", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1779.50304421747, + "Y": -10.257868545668202 + }, + { + "Id": "1c30d89118404504ae845a2e69f5cd64", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1683.5255841936626, + "Y": -187.9027767627224 + }, + { + "Id": "0884cd9fd9a94df3b32d290c05e0c1de", + "Name": "GeometryColor.ByGeometryColor", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2034.3341452874968, + "Y": -284.50106139311112 + } + ], + "Annotations": [ + { + "Id": "0838e1e22d53437dab4bbd059baeba27", + "Title": "Visualize overlapping PolyCurve", + "DescriptionText": " ", + "IsExpanded": true, + "WidthAdjustment": 0.0, + "HeightAdjustment": 0.0, + "Nodes": [ + "1c30d89118404504ae845a2e69f5cd64", + "0884cd9fd9a94df3b32d290c05e0c1de" + ], + "HasNestedGroups": false, + "Left": 1673.5255841936626, + "Top": -357.50106139311112, + "Width": 690.808561093834, + "Height": 301.59828463038872, + "FontSize": 36.0, + "GroupStyleId": "bc688959-ce34-4bf5-90f8-6ddd23f80989", + "InitialTop": -284.50106139311112, + "InitialHeight": 241.59828463038872, + "TextblockHeight": 63.0, + "Background": "#FFA4E1FF" + } + ], + "X": -66.552850919195407, + "Y": 331.49256042785674, + "Zoom": 0.52965074759975439 + } +} \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.PolyCurve.Heal.md b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.PolyCurve.Heal.md new file mode 100644 index 00000000000..5d14741c099 --- /dev/null +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.PolyCurve.Heal.md @@ -0,0 +1,8 @@ +## In Depth +`PolyCurve.Heal` takes a self-intersecting PolyCurve and returns a new PolyCurve that does not self-intersect. The input PolyCurve may not have more than 3 self-intersections. In other words, if any single segment of the PolyCurve meets or intersects more than 2 other segments, the heal won’t work. Input a `trimLength` greater than 0, and end segments longer than the `trimLength` will not be trimmed. + +In the example below, a self-intersecting PolyCurve is healed using `PolyCurve.Heal`. +___ +## Example File + +![PolyCurve.Heal](./Autodesk.DesignScript.Geometry.PolyCurve.Heal_img.jpg) \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.PolyCurve.Heal_img.jpg b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.PolyCurve.Heal_img.jpg new file mode 100644 index 00000000000..e3a2d7dc830 Binary files /dev/null and b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.PolyCurve.Heal_img.jpg differ diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.PolyCurve.Points.dyn b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.PolyCurve.Points.dyn new file mode 100644 index 00000000000..f700c93f8ed --- /dev/null +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.PolyCurve.Points.dyn @@ -0,0 +1,493 @@ +{ + "Uuid": "49b221a5-4e02-49a9-a49e-4593f84cf813", + "IsCustomNode": false, + "Description": "", + "Name": "Autodesk.DesignScript.Geometry.PolyCurve.Points", + "ElementResolver": { + "ResolutionMap": {} + }, + "Inputs": [ + { + "Id": "f3def252e475423586731ebbf342c5c1", + "Name": "Number", + "Type": "number", + "Type2": "number", + "Value": "5", + "NumberType": "Double", + "Description": "Creates a number", + "SelectedIndex": 0 + } + ], + "Outputs": [], + "Nodes": [ + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "a8d90c916f0c4bfe9147851c69965782", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "9a717b4e9acd432b91f06abab50daf46", + "Name": "centerPoint", + "Description": "Center point of circle\n\nPoint\nDefault value : Autodesk.DesignScript.Geometry.Point.ByCoordinates(0, 0, 0)", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "72c6901193454f389dbe2dfc2026e831", + "Name": "radius", + "Description": "Radius\n\ndouble\nDefault value : 1", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "36624f92be4c41618b2b0412bb013568", + "Name": "Circle", + "Description": "Circle created with center point and radius", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Circle.ByCenterPointRadius@Autodesk.DesignScript.Geometry.Point,double", + "Replication": "Auto", + "Description": "Creates a Circle with input center Point and radius in the world XY plane, with world Z as normal.\n\nCircle.ByCenterPointRadius (centerPoint: Point = Autodesk.DesignScript.Geometry.Point.ByCoordinates(0, 0, 0), radius: double = 1): Circle" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "f85ea29baa284e3e989c3e60af54e006", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "81ce03de9d7442db9fb94adadc817539", + "Name": "x", + "Description": "X coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "95f741c48ae14c0aa41d45be8c60a2b2", + "Name": "y", + "Description": "Y coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "b5b97679a4284a869e4363518071ef2c", + "Name": "Point", + "Description": "Point created by coordinates", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Point.ByCoordinates@double,double", + "Replication": "Auto", + "Description": "Form a Point in the XY plane given two 2 cartesian coordinates. The Z component is 0.\n\nPoint.ByCoordinates (x: double = 0, y: double = 0): Point" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "2c9a68952f4a4a4c892d97d7730c8a95", + "NodeType": "CodeBlockNode", + "Inputs": [], + "Outputs": [ + { + "Id": "2e53db3a408f46a3bedaba507ee71f48", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "e4b98094aa5f4654bfeec4f8ab15d953", + "Name": "", + "Description": "Value of expression at line 2", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "1;\n3;" + }, + { + "ConcreteType": "CoreNodeModels.Input.DoubleInput, CoreNodeModels", + "NumberType": "Double", + "Id": "f3def252e475423586731ebbf342c5c1", + "NodeType": "NumberInputNode", + "Inputs": [], + "Outputs": [ + { + "Id": "97a23f1b36294508913be939970de203", + "Name": "", + "Description": "Double", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Creates a number", + "InputValue": 5.0 + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "d45e5b2520674c5494fa7058e0b76db1", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "06e9db862a7a4c978454288f113c5702", + "Name": "circle", + "Description": "Circle", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "7a090bc713444de0af39c8e893aac759", + "Name": "numberSides", + "Description": "int\nDefault value : 5", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "b86fc9cdcc934c70a8b8aaed0a303e87", + "Name": "Polygon", + "Description": "Polygon", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Polygon.RegularPolygon@Autodesk.DesignScript.Geometry.Circle,int", + "Replication": "Auto", + "Description": "Construct an inscribed Polygon Curve within a circle.\n\nPolygon.RegularPolygon (circle: Circle, numberSides: int = 5): Polygon" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "44e102d6defe494891ed9658a2265909", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "ac5279e11e2b4d4783a70553e216d28e", + "Name": "geometry", + "Description": "Autodesk.DesignScript.Geometry.Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "a18538ffe56d40058c23d39d6af21894", + "Name": "Geometry[]", + "Description": "Geometry[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Geometry.Explode", + "Replication": "Auto", + "Description": "Separates compound or non-separated elements into their component parts.\n\nGeometry.Explode ( ): Geometry[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "26ad119ef2c249e1b37852ef626f75bf", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "e4aa146177724f96a0ac68bd91dc4e03", + "Name": "curves", + "Description": "Curves to join into polycurve\n\nCurve[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "75481ea4b59c4c51a87cede04046764a", + "Name": "joinTolerance", + "Description": "Tolerance to determine size of gap allowed between curves to be joined\n\ndouble\nDefault value : 0.001", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "2f87031cc27a4e17a0df49ff4075f20d", + "Name": "trimCurves", + "Description": "bool\nDefault value : false", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "140662c7671b4476a145b9afeeb27c5e", + "Name": "trimLength", + "Description": "double\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "5c681a4bbf6743fea363e9f2f3570833", + "Name": "PolyCurve", + "Description": "Polycurve created by joined curves", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.PolyCurve.ByJoinedCurves@Autodesk.DesignScript.Geometry.Curve[],double,bool,double", + "Replication": "Auto", + "Description": "Make PolyCurve by joining curves. Flips curve as needed for connectivity. Choose a preferred join tolerance between 1e-6 and 1e-3 units.\n\nPolyCurve.ByJoinedCurves (curves: Curve[], joinTolerance: double = 0.001, trimCurves: bool = false, trimLength: double = 0): PolyCurve" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "af46bb1f48d84d40b04d6d260c58a7e5", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "b0245fe67b864cfeb7b4e81bcc5874fd", + "Name": "polyCurve", + "Description": "Autodesk.DesignScript.Geometry.PolyCurve", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "3f8f69f5ee0444498d7771951d5c224c", + "Name": "Point[]", + "Description": "Point[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.PolyCurve.Points", + "Replication": "Auto", + "Description": "Returns the start point of the first component and the end points of every component curve. For a closed polycurve, as the start and end points are the same, the end point is excluded.\n\nPolyCurve.Points: Point[]" + } + ], + "Connectors": [ + { + "Start": "36624f92be4c41618b2b0412bb013568", + "End": "06e9db862a7a4c978454288f113c5702", + "Id": "22b5d55fc85e476287febe27df77a621", + "IsHidden": "False" + }, + { + "Start": "b5b97679a4284a869e4363518071ef2c", + "End": "9a717b4e9acd432b91f06abab50daf46", + "Id": "dba5979c34a9493eb1c9b9c69bb7d3b5", + "IsHidden": "False" + }, + { + "Start": "2e53db3a408f46a3bedaba507ee71f48", + "End": "81ce03de9d7442db9fb94adadc817539", + "Id": "02e03e9a425d41c3bbc20df2ca1a78cc", + "IsHidden": "False" + }, + { + "Start": "e4b98094aa5f4654bfeec4f8ab15d953", + "End": "95f741c48ae14c0aa41d45be8c60a2b2", + "Id": "9b108c3646984b3dbc7e314a3ce86348", + "IsHidden": "False" + }, + { + "Start": "97a23f1b36294508913be939970de203", + "End": "72c6901193454f389dbe2dfc2026e831", + "Id": "3505ec4303c0427fb063d5a2b67c636c", + "IsHidden": "False" + }, + { + "Start": "97a23f1b36294508913be939970de203", + "End": "7a090bc713444de0af39c8e893aac759", + "Id": "a26160c40a974e3281a4ff5ff9b851cb", + "IsHidden": "False" + }, + { + "Start": "b86fc9cdcc934c70a8b8aaed0a303e87", + "End": "ac5279e11e2b4d4783a70553e216d28e", + "Id": "a4a1e26657e64144a554ae99a913b757", + "IsHidden": "False" + }, + { + "Start": "a18538ffe56d40058c23d39d6af21894", + "End": "e4aa146177724f96a0ac68bd91dc4e03", + "Id": "04a29a40427a4d0fb1bf313f9aba8086", + "IsHidden": "False" + }, + { + "Start": "5c681a4bbf6743fea363e9f2f3570833", + "End": "b0245fe67b864cfeb7b4e81bcc5874fd", + "Id": "85f87768a6c240d785b7b80e15077670", + "IsHidden": "False" + } + ], + "Dependencies": [], + "NodeLibraryDependencies": [], + "Thumbnail": "", + "GraphDocumentationURL": null, + "ExtensionWorkspaceData": [ + { + "ExtensionGuid": "28992e1d-abb9-417f-8b1b-05e053bee670", + "Name": "Properties", + "Version": "2.19", + "Data": {} + } + ], + "Author": "", + "Linting": { + "activeLinter": "None", + "activeLinterId": "7b75fb44-43fd-4631-a878-29f4d5d8399a", + "warningCount": 0, + "errorCount": 0 + }, + "Bindings": [], + "View": { + "Dynamo": { + "ScaleFactor": 1.0, + "HasRunWithoutCrash": true, + "IsVisibleInDynamoLibrary": true, + "Version": "2.19.0.5874", + "RunType": "Manual", + "RunPeriod": "1000" + }, + "Camera": { + "Name": "_Background Preview", + "EyeX": -17.0, + "EyeY": 24.0, + "EyeZ": 50.0, + "LookX": 12.0, + "LookY": -13.0, + "LookZ": -58.0, + "UpX": 0.0, + "UpY": 1.0, + "UpZ": 0.0 + }, + "ConnectorPins": [], + "NodeViews": [ + { + "Id": "a8d90c916f0c4bfe9147851c69965782", + "Name": "Circle.ByCenterPointRadius", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": false, + "X": 1155.6720931217778, + "Y": 370.135548904635 + }, + { + "Id": "f85ea29baa284e3e989c3e60af54e006", + "Name": "Point.ByCoordinates", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": false, + "X": 839.0, + "Y": 354.0 + }, + { + "Id": "2c9a68952f4a4a4c892d97d7730c8a95", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": false, + "X": 584.99999999999989, + "Y": 362.65500000000003 + }, + { + "Id": "f3def252e475423586731ebbf342c5c1", + "Name": "Number", + "IsSetAsInput": true, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": false, + "X": 839.0, + "Y": 544.00000000000034 + }, + { + "Id": "d45e5b2520674c5494fa7058e0b76db1", + "Name": "Polygon.RegularPolygon", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1540.0, + "Y": 432.0 + }, + { + "Id": "44e102d6defe494891ed9658a2265909", + "Name": "Geometry.Explode", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1896.0, + "Y": 432.0 + }, + { + "Id": "26ad119ef2c249e1b37852ef626f75bf", + "Name": "PolyCurve.ByJoinedCurves", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2245.6523476708071, + "Y": 422.93772831156605 + }, + { + "Id": "af46bb1f48d84d40b04d6d260c58a7e5", + "Name": "PolyCurve.Points", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2580.0, + "Y": 423.0 + } + ], + "Annotations": [], + "X": -222.82321595941494, + "Y": 37.274299624301818, + "Zoom": 0.48391633011669033 + } +} \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.PolyCurve.Points.md b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.PolyCurve.Points.md index d8e27e8fbd8..e888591c245 100644 --- a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.PolyCurve.Points.md +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.PolyCurve.Points.md @@ -1,5 +1,8 @@ ## In Depth -Returns start point for first component curve, and end points for all other component curves. Does not return duplicate points in the case of closed polycurve. -___ +`PolyCurve.Points` returns the start point for the first component curve, and end points for all other component curves. It does not return duplicate points for closed PolyCurves. +In the example below, a `Polygon.RegularPolygon` is exploded into a curve list and is then rejoined into a PolyCurve. The PolyCurve’s points are then returned using `PolyCurve.Points`. +___ +## Example File +![PolyCurve.Points](./Autodesk.DesignScript.Geometry.PolyCurve.Points_img.jpg) \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.PolyCurve.Points_img.jpg b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.PolyCurve.Points_img.jpg new file mode 100644 index 00000000000..ab47cb61a48 Binary files /dev/null and b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.PolyCurve.Points_img.jpg differ diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.PolySurface.ByJoinedSurfaces.md b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.PolySurface.ByJoinedSurfaces.md index c26289925bb..9c92444e1e7 100644 --- a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.PolySurface.ByJoinedSurfaces.md +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.PolySurface.ByJoinedSurfaces.md @@ -1,5 +1,8 @@ ## In Depth -Solid by Joined Surfaces takes a list of surfaces as an input and will return a single solid defined by the surfaces. The surfaces must define a closed surface. In the example below, we start with a circle as a base geometry. The circle is patched to create a surface, and that surface is translated in the z-direction. We then extrude the circle to produce the sides. List.Create is used to make a list consisting of the base, side, and top surfaces, and then we use ByJoinedSurfaces to turn the list into a single closed solid. +`PolySurface.ByJoinedSurfaces` returns a new PolySurface joined from a list of surfaces. + +In the example below, two surface patches and an extrusion are joined into a PolySurface resembling a cylinder. + ___ ## Example File diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.PolySurface.ByLoft(crossSections).md b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.PolySurface.ByLoft(crossSections).md index 5d77064a18e..4345f2c7254 100644 --- a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.PolySurface.ByLoft(crossSections).md +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.PolySurface.ByLoft(crossSections).md @@ -1,5 +1,8 @@ ## In Depth -Surface ByLoft with cross sections takes a list of curves as an input. It will produce a surface by lofting between the list of curves in order. In the example below we create two curves, a line and a sine curve. We use List.Create to combine these two curves into a list, which we use as an input for Surface ByLoft. The result is a surface that is lofted between a sine curve on one side, and a line on the other. +`PolySurface.ByLoft (crossSections)` returns a new PolySurface by lofting between curves in a list. + +In the example below, a PolySurface is returned from lofting between two circles. + ___ ## Example File diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.PolySurface.BySweep.dyn b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.PolySurface.BySweep.dyn new file mode 100644 index 00000000000..cbe5761591b --- /dev/null +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.PolySurface.BySweep.dyn @@ -0,0 +1,476 @@ +{ + "Uuid": "1e9207cc-2f7a-4768-aed4-f3edb74f0de4", + "IsCustomNode": false, + "Description": "", + "Name": "Autodesk.DesignScript.Geometry.PolySurface.BySweep", + "ElementResolver": { + "ResolutionMap": { + "Point.Origin": { + "Key": "Autodesk.DesignScript.Geometry.Point", + "Value": "ProtoGeometry.dll" + }, + "Vector.ZAxis": { + "Key": "Autodesk.DesignScript.Geometry.Vector", + "Value": "ProtoGeometry.dll" + }, + "Point": { + "Key": "Autodesk.DesignScript.Geometry.Point", + "Value": "ProtoGeometry.dll" + } + } + }, + "Inputs": [], + "Outputs": [], + "Nodes": [ + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "9702af921dba4a4ab35f6f0a73e59b3f", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "f55e8fdc041149d5a228d8f4332ab547", + "Name": "center", + "Description": "Center point of arc\n\nPoint\nDefault value : Autodesk.DesignScript.Geometry.Point.ByCoordinates(0, 0, 0) (disabled)", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "e83772784a3f4969bf236ce9cfd821a8", + "Name": "radius", + "Description": "Radius of the arc\n\ndouble\nDefault value : 1 (disabled)", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "e5d4b4a0ff46494288feb174eac52e41", + "Name": "startAngle", + "Description": "Start angle in degrees\n\ndouble\nDefault value : 0 (disabled)", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "5277d73a935b4b8686b00b5c1c7f3f6f", + "Name": "endAngle", + "Description": "End angle in degrees\n\ndouble\nDefault value : 90 (disabled)", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "d66d6a5331f6462e8c10f80ddbe29fcf", + "Name": "normal", + "Description": "A vector defining the normal of the arc\n\nVector\nDefault value : Autodesk.DesignScript.Geometry.Vector.ByCoordinates(0, 0, 1) (disabled)", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "858655dc7e944fc881f4ae4b44c3fbfa", + "Name": "Arc", + "Description": "Arc created by center point, radius, and angle", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Arc.ByCenterPointRadiusAngle@Autodesk.DesignScript.Geometry.Point,double,double,double,Autodesk.DesignScript.Geometry.Vector", + "Replication": "Auto", + "Description": "Create an arc by providing it's center point, radius, angle sweep, and normal vector\n\nArc.ByCenterPointRadiusAngle (center: Point = Autodesk.DesignScript.Geometry.Point.ByCoordinates(0, 0, 0), radius: double = 1, startAngle: double = 0, endAngle: double = 90, normal: Vector = Autodesk.DesignScript.Geometry.Vector.ByCoordinates(0, 0, 1)): Arc" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "256ba66635fa484c843ef722de60bb71", + "NodeType": "FunctionNode", + "Inputs": [], + "Outputs": [ + { + "Id": "4f18f3f762b64aa6aeb274115d77dd32", + "Name": "Point", + "Description": "Origin point", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Point.Origin", + "Replication": "Auto", + "Description": "Get the Origin point (0,0,0)\n\nPoint.Origin ( ): Point" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "2d0da3d9ceb2491c85dbd424e835b9aa", + "NodeType": "FunctionNode", + "Inputs": [], + "Outputs": [ + { + "Id": "7f51ff68513d4d359fe24e3c3fd5ba9f", + "Name": "Vector", + "Description": "Vector", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Vector.ZAxis", + "Replication": "Auto", + "Description": "Get the canonical Z axis Vector (0,0,1)\n\nVector.ZAxis ( ): Vector" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "35530a1991d146b48295ddcb678ef1b2", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "9f4a201f967541debad7f30c9662c79b", + "Name": "centerPoint", + "Description": "Center point of arc\n\nPoint\nDefault value : Autodesk.DesignScript.Geometry.Point.ByCoordinates(0, 0, 0) (disabled)", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "e418e4f3731b41d6b73001dc8820c803", + "Name": "startPoint", + "Description": "Start point of arc\n\nPoint\nDefault value : Autodesk.DesignScript.Geometry.Point.ByCoordinates(1, 0, 0) (disabled)", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "ab6c8d4120214964b1ce32c0e97a71bf", + "Name": "endPoint", + "Description": "End point of arc\n\nPoint\nDefault value : Autodesk.DesignScript.Geometry.Point.ByCoordinates(0, 1, 0) (disabled)", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "12c3f584fcfe42418e0a465edb6557b1", + "Name": "Arc", + "Description": "Arc created with center point, start point, and end point", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Arc.ByCenterPointStartPointEndPoint@Autodesk.DesignScript.Geometry.Point,Autodesk.DesignScript.Geometry.Point,Autodesk.DesignScript.Geometry.Point", + "Replication": "Auto", + "Description": "Create an arc by providing it's center point, start point, and end point\n\nArc.ByCenterPointStartPointEndPoint (centerPoint: Point = Autodesk.DesignScript.Geometry.Point.ByCoordinates(0, 0, 0), startPoint: Point = Autodesk.DesignScript.Geometry.Point.ByCoordinates(1, 0, 0), endPoint: Point = Autodesk.DesignScript.Geometry.Point.ByCoordinates(0, 1, 0)): Arc" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "05df4541cb514087aa863f31885b7a05", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "3610a5b87aea4017983c3fb66fa31ce2", + "Name": "rail", + "Description": "Curve to sweep along\n\nCurve", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "c4bc17757dc4447e8e9f89e6b69019b1", + "Name": "crossSection", + "Description": "Sweep profile\n\nCurve[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "8b24e3aa3933428e9cc447be7abdd6f5", + "Name": "PolySurface", + "Description": "PolySurface", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.PolySurface.BySweep@Autodesk.DesignScript.Geometry.Curve,Autodesk.DesignScript.Geometry.Curve[]", + "Replication": "Auto", + "Description": "Make Polysurface by sweeping curves along rail.\n\nPolySurface.BySweep (rail: Curve, crossSection: Curve[]): PolySurface" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "c91db8ef52614b5c9aafcd0f66ea98a2", + "NodeType": "CodeBlockNode", + "Inputs": [], + "Outputs": [ + { + "Id": "ce8d5be7c00d40d09b698601ffcef2e9", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "df2ebd917f784a728c46683465304dc2", + "Name": "", + "Description": "Value of expression at line 2", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "48cd66c5b60548e4aa2db4c11238939f", + "Name": "", + "Description": "Value of expression at line 3", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "4;\n0;\n120;" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "e8912cda3ad3444b97318e8e4e3de0e5", + "NodeType": "CodeBlockNode", + "Inputs": [], + "Outputs": [ + { + "Id": "3ebde811022a49eabde102a19ce5fa17", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "efd819ee849b4439adf511f6934b5ad1", + "Name": "", + "Description": "Value of expression at line 2", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "4727e1ec34e240e4a98a13edd0474cc9", + "Name": "", + "Description": "Value of expression at line 3", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "Point.ByCoordinates(2, 0, 4);\nPoint.ByCoordinates(4, 0, 0);\nPoint.ByCoordinates(4, 0, 8);" + } + ], + "Connectors": [ + { + "Start": "858655dc7e944fc881f4ae4b44c3fbfa", + "End": "c4bc17757dc4447e8e9f89e6b69019b1", + "Id": "a96d6a0a926d40a9b02dca6b5453a855", + "IsHidden": "False" + }, + { + "Start": "4f18f3f762b64aa6aeb274115d77dd32", + "End": "f55e8fdc041149d5a228d8f4332ab547", + "Id": "e9af132a90f74a5ca5552a3ee17580e3", + "IsHidden": "False" + }, + { + "Start": "7f51ff68513d4d359fe24e3c3fd5ba9f", + "End": "d66d6a5331f6462e8c10f80ddbe29fcf", + "Id": "27c3ba26b55f4c3b8ae4c2391eb49487", + "IsHidden": "False" + }, + { + "Start": "12c3f584fcfe42418e0a465edb6557b1", + "End": "3610a5b87aea4017983c3fb66fa31ce2", + "Id": "cc0915e35ae342579648a4b8fbe79fc6", + "IsHidden": "False" + }, + { + "Start": "ce8d5be7c00d40d09b698601ffcef2e9", + "End": "e83772784a3f4969bf236ce9cfd821a8", + "Id": "9ef9584aea00424b8f5dfcb487e7d4e2", + "IsHidden": "False" + }, + { + "Start": "df2ebd917f784a728c46683465304dc2", + "End": "e5d4b4a0ff46494288feb174eac52e41", + "Id": "107cfc00a4714a839651392e697e70a6", + "IsHidden": "False" + }, + { + "Start": "48cd66c5b60548e4aa2db4c11238939f", + "End": "5277d73a935b4b8686b00b5c1c7f3f6f", + "Id": "8dc5572e84d7404dbce0fbc476a25cb5", + "IsHidden": "False" + }, + { + "Start": "3ebde811022a49eabde102a19ce5fa17", + "End": "9f4a201f967541debad7f30c9662c79b", + "Id": "120ec69f08ec46b18f24b7754ab5b48e", + "IsHidden": "False" + }, + { + "Start": "efd819ee849b4439adf511f6934b5ad1", + "End": "e418e4f3731b41d6b73001dc8820c803", + "Id": "4566a0d293814a35ba30d0a40c24931d", + "IsHidden": "False" + }, + { + "Start": "4727e1ec34e240e4a98a13edd0474cc9", + "End": "ab6c8d4120214964b1ce32c0e97a71bf", + "Id": "365772a8eea0426c99f91a3d8be03a68", + "IsHidden": "False" + } + ], + "Dependencies": [], + "NodeLibraryDependencies": [], + "Thumbnail": "", + "GraphDocumentationURL": null, + "ExtensionWorkspaceData": [ + { + "ExtensionGuid": "28992e1d-abb9-417f-8b1b-05e053bee670", + "Name": "Properties", + "Version": "2.19", + "Data": {} + } + ], + "Author": "None provided", + "Linting": { + "activeLinter": "None", + "activeLinterId": "7b75fb44-43fd-4631-a878-29f4d5d8399a", + "warningCount": 0, + "errorCount": 0 + }, + "Bindings": [], + "View": { + "Dynamo": { + "ScaleFactor": 1.0, + "HasRunWithoutCrash": true, + "IsVisibleInDynamoLibrary": true, + "Version": "2.19.4.6632", + "RunType": "Automatic", + "RunPeriod": "1000" + }, + "Camera": { + "Name": "_Background Preview", + "EyeX": 5.1350412368774414, + "EyeY": 18.239358901977539, + "EyeZ": -27.682285308837891, + "LookX": 7.8001508712768555, + "LookY": -19.142274856567383, + "LookZ": 30.915164947509766, + "UpX": 0.078032352030277252, + "UpY": 0.947767972946167, + "UpZ": 0.30926841497421265 + }, + "ConnectorPins": [], + "NodeViews": [ + { + "Id": "9702af921dba4a4ab35f6f0a73e59b3f", + "Name": "Arc.ByCenterPointRadiusAngle", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1827.7218801032991, + "Y": 3592.3876187759988 + }, + { + "Id": "256ba66635fa484c843ef722de60bb71", + "Name": "Point.Origin", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1417.2218801032991, + "Y": 3515.1721020131963 + }, + { + "Id": "2d0da3d9ceb2491c85dbd424e835b9aa", + "Name": "Vector.ZAxis", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1417.2218801032991, + "Y": 3837.1721020131963 + }, + { + "Id": "35530a1991d146b48295ddcb678ef1b2", + "Name": "Arc.ByCenterPointStartPointEndPoint", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1827.7218801032991, + "Y": 3342.8701187759989 + }, + { + "Id": "05df4541cb514087aa863f31885b7a05", + "Name": "PolySurface.BySweep", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2280.2218801032991, + "Y": 3341.6546020131964 + }, + { + "Id": "c91db8ef52614b5c9aafcd0f66ea98a2", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1417.2218801032991, + "Y": 3663.6546020131964 + }, + { + "Id": "e8912cda3ad3444b97318e8e4e3de0e5", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1417.2218801032991, + "Y": 3341.6546020131964 + } + ], + "Annotations": [], + "X": -1122.715081641478, + "Y": -2508.8590880447637, + "Zoom": 0.822695359375 + } +} \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.PolySurface.BySweep.md b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.PolySurface.BySweep.md index a681a5749db..83778397d4e 100644 --- a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.PolySurface.BySweep.md +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.PolySurface.BySweep.md @@ -1,7 +1,10 @@ ## In Depth -Surface by Sweep will create a surface by sweeping an input curve along a specfied path. In the example below, we use a sine curve in the y-direction as the profile curve. We rotate this curve by -90 degrees around the world z-axis to use as a path curve. Surface BySweep moves the profile curve along the path curve creating a surface. -___ -## Example File +`PolySurface.BySweep (rail, crossSection)` returns a PolySurface by sweeping a list of connected, non-intersecting lines along a rail. The `crossSection` input can receive a list of connected curves that must meet at a start or end point, or the node will not return a PolySurface. This node is similar to `PolySurface.BySweep (rail, profile)` with the only difference being that the `crossSection` input takes a list of curves while `profile` only takes one curve. + +In the example below, a PolySurface is created by sweeping along an arc. +___ +## Example File +![PolySurface.BySweep](./Autodesk.DesignScript.Geometry.PolySurface.BySweep_img.jpg) \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.PolySurface.BySweep_img.jpg b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.PolySurface.BySweep_img.jpg new file mode 100644 index 00000000000..8389c93a14d Binary files /dev/null and b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.PolySurface.BySweep_img.jpg differ diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.PolySurface.Chamfer.dyn b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.PolySurface.Chamfer.dyn new file mode 100644 index 00000000000..76d8b6c5483 --- /dev/null +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.PolySurface.Chamfer.dyn @@ -0,0 +1,490 @@ +{ + "Uuid": "2028d521-9ac9-45ee-9b7c-7952abcc1a4c", + "IsCustomNode": false, + "Description": "", + "Name": "Autodesk.DesignScript.Geometry.PolySurface.Chamfer", + "ElementResolver": { + "ResolutionMap": {} + }, + "Inputs": [], + "Outputs": [], + "Nodes": [ + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "f1a8cc0b6efb4e0b8a980a769e819143", + "NodeType": "FunctionNode", + "Inputs": [], + "Outputs": [ + { + "Id": "54f4321d782346feba59a9cf91c311df", + "Name": "Point", + "Description": "Origin point", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Point.Origin", + "Replication": "Auto", + "Description": "Get the Origin point (0,0,0)\n\nPoint.Origin ( ): Point" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "8ec862a38f4142ba9b92445953e5d47f", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "22ed5c428481471292eb5a78cede57b1", + "Name": "centerPoint", + "Description": "Center point of circle\n\nPoint\nDefault value : Autodesk.DesignScript.Geometry.Point.ByCoordinates(0, 0, 0)", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "a9848cfcd7a34aa992b7961ce302a5d5", + "Name": "radius", + "Description": "Radius\n\ndouble\nDefault value : 1", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "146f991abb23401e991688e295dc5d77", + "Name": "Circle", + "Description": "Circle created with center point and radius", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Circle.ByCenterPointRadius@Autodesk.DesignScript.Geometry.Point,double", + "Replication": "Auto", + "Description": "Creates a Circle with input center Point and radius in the world XY plane, with world Z as normal.\n\nCircle.ByCenterPointRadius (centerPoint: Point = Autodesk.DesignScript.Geometry.Point.ByCoordinates(0, 0, 0), radius: double = 1): Circle" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "1248e73f513843fd9908d6a1bcc26e09", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "7833ce1104d54219a99f8e8030a0b18b", + "Name": "polySurface", + "Description": "Autodesk.DesignScript.Geometry.PolySurface", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "dd6791aaa00a4ea9bb917beab6c2730e", + "Name": "edges", + "Description": "Edge[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "431e402e3d014cebb8b803d90f7747d3", + "Name": "offset", + "Description": "double", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "bceb369f79db4ea5b7de54dbb204dc61", + "Name": "PolySurface", + "Description": "PolySurface", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.PolySurface.Chamfer@Autodesk.DesignScript.Geometry.Edge[],double", + "Replication": "Auto", + "Description": "Chamfers a PolySurface along input Edges with a given offset from the edge corner.\n\nPolySurface.Chamfer (edges: Edge[], offset: double): PolySurface" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "61c7139acf3f45b998a8e5dc95f3bc9b", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "01a78340907840ab84d97bcee031fde0", + "Name": "curve", + "Description": "Autodesk.DesignScript.Geometry.Curve", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "064767fa517e461bb21a294b3f15680a", + "Name": "distance", + "Description": "Distance to extrude\n\ndouble\nDefault value : 1", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "8f0b953932c042388dd764693516a95f", + "Name": "Solid", + "Description": "The extruded Solid", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Curve.ExtrudeAsSolid@double", + "Replication": "Auto", + "Description": "Extrudes a Curve in the Normal direction by the specified distance. Curve must be closed.\n\nCurve.ExtrudeAsSolid (distance: double = 1): Solid" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "08aa111c87074bc5b5bd2b2075189c19", + "NodeType": "CodeBlockNode", + "Inputs": [], + "Outputs": [ + { + "Id": "719e7d0837c648eba55f206d16ff321c", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "4;" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "97444bb44b1f44d3aaff32612ff1e05f", + "NodeType": "CodeBlockNode", + "Inputs": [], + "Outputs": [ + { + "Id": "83cf7f5c26064a5ea531f7a9bc90e48b", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "0.5;" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "6d29d6f9bfa64db0879935ce88a7d720", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "4fb6e2a2358c457bbe75e74853d8c948", + "Name": "topology", + "Description": "Autodesk.DesignScript.Geometry.Topology", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "65cccd93470741988f9448257a05da53", + "Name": "Edge[]", + "Description": "Edge[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Topology.Edges", + "Replication": "Auto", + "Description": "The Edges of the Topology\n\nTopology.Edges: Edge[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "30e881f9ce40432aa228cd4755c6640f", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "07aefa3efbb742d5a9a19f329b8d0aaf", + "Name": "geometry", + "Description": "Autodesk.DesignScript.Geometry.Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "d75073adf91c43d2b814a9d2b7f4013b", + "Name": "Geometry[]", + "Description": "Geometry[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Geometry.Explode", + "Replication": "Auto", + "Description": "Separates compound or non-separated elements into their component parts.\n\nGeometry.Explode ( ): Geometry[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "45042abf60674769a0a2fdfd616993b3", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "bd91f588950b4170b8ece3d1ca072f96", + "Name": "surfaces", + "Description": "Surfaces to join into polysurface\n\nSurface[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "0c4fb81dc3de4fba8b87229b53f1d678", + "Name": "PolySurface", + "Description": "PolySurface", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.PolySurface.ByJoinedSurfaces@Autodesk.DesignScript.Geometry.Surface[]", + "Replication": "Auto", + "Description": "Make Polysurface by joining surfaces.\n\nPolySurface.ByJoinedSurfaces (surfaces: Surface[]): PolySurface" + } + ], + "Connectors": [ + { + "Start": "54f4321d782346feba59a9cf91c311df", + "End": "22ed5c428481471292eb5a78cede57b1", + "Id": "87b9c38db56840e990250b40fee5fc7f", + "IsHidden": "False" + }, + { + "Start": "146f991abb23401e991688e295dc5d77", + "End": "01a78340907840ab84d97bcee031fde0", + "Id": "97e20aafcd3f463a888c60a64b23bc9c", + "IsHidden": "False" + }, + { + "Start": "8f0b953932c042388dd764693516a95f", + "End": "4fb6e2a2358c457bbe75e74853d8c948", + "Id": "c47dbfb688634a50854a69a81b7d6536", + "IsHidden": "False" + }, + { + "Start": "8f0b953932c042388dd764693516a95f", + "End": "07aefa3efbb742d5a9a19f329b8d0aaf", + "Id": "3027c23fed25458aad0d8b4d9d9ebd54", + "IsHidden": "False" + }, + { + "Start": "719e7d0837c648eba55f206d16ff321c", + "End": "064767fa517e461bb21a294b3f15680a", + "Id": "da32c1d4964243f59f1b727ee431142c", + "IsHidden": "False" + }, + { + "Start": "719e7d0837c648eba55f206d16ff321c", + "End": "a9848cfcd7a34aa992b7961ce302a5d5", + "Id": "f0f31fa0a26e4a82a4a4e1200bfa4ff4", + "IsHidden": "False" + }, + { + "Start": "83cf7f5c26064a5ea531f7a9bc90e48b", + "End": "431e402e3d014cebb8b803d90f7747d3", + "Id": "d163a255db6e496e89c4fe81899efb80", + "IsHidden": "False" + }, + { + "Start": "65cccd93470741988f9448257a05da53", + "End": "dd6791aaa00a4ea9bb917beab6c2730e", + "Id": "0d8d8da0c6814f85a9cf405418573ad9", + "IsHidden": "False" + }, + { + "Start": "d75073adf91c43d2b814a9d2b7f4013b", + "End": "bd91f588950b4170b8ece3d1ca072f96", + "Id": "72d1701f321c45e08474428ece10f5b1", + "IsHidden": "False" + }, + { + "Start": "0c4fb81dc3de4fba8b87229b53f1d678", + "End": "7833ce1104d54219a99f8e8030a0b18b", + "Id": "10b9ebe6cdeb4c638f54c0b76056b452", + "IsHidden": "False" + } + ], + "Dependencies": [], + "NodeLibraryDependencies": [], + "Thumbnail": "", + "GraphDocumentationURL": null, + "ExtensionWorkspaceData": [ + { + "ExtensionGuid": "28992e1d-abb9-417f-8b1b-05e053bee670", + "Name": "Properties", + "Version": "2.19", + "Data": {} + } + ], + "Author": "None provided", + "Linting": { + "activeLinter": "None", + "activeLinterId": "7b75fb44-43fd-4631-a878-29f4d5d8399a", + "warningCount": 0, + "errorCount": 0 + }, + "Bindings": [], + "View": { + "Dynamo": { + "ScaleFactor": 1.0, + "HasRunWithoutCrash": true, + "IsVisibleInDynamoLibrary": true, + "Version": "2.19.4.6632", + "RunType": "Automatic", + "RunPeriod": "1000" + }, + "Camera": { + "Name": "_Background Preview", + "EyeX": -8.3436689376831055, + "EyeY": 6.9886860847473145, + "EyeZ": 8.8846864700317383, + "LookX": 12.983955383300781, + "LookY": -5.8967127799987793, + "LookZ": -15.98281192779541, + "UpX": 0.039591424167156219, + "UpY": 0.99802666902542114, + "UpZ": -0.04873570054769516 + }, + "ConnectorPins": [], + "NodeViews": [ + { + "Id": "f1a8cc0b6efb4e0b8a980a769e819143", + "Name": "Point.Origin", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -598.36946681259155, + "Y": 93.332310710060781 + }, + { + "Id": "8ec862a38f4142ba9b92445953e5d47f", + "Name": "Circle.ByCenterPointRadius", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": false, + "X": -336.36946681259155, + "Y": 150.33231071006077 + }, + { + "Id": "1248e73f513843fd9908d6a1bcc26e09", + "Name": "PolySurface.Chamfer", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1126.6305331874084, + "Y": 196.3323107100608 + }, + { + "Id": "61c7139acf3f45b998a8e5dc95f3bc9b", + "Name": "Curve.ExtrudeAsSolid", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": false, + "X": 40.130533187408446, + "Y": 150.33231071006077 + }, + { + "Id": "08aa111c87074bc5b5bd2b2075189c19", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -598.36946681259155, + "Y": 241.15981071006081 + }, + { + "Id": "97444bb44b1f44d3aaff32612ff1e05f", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": false, + "X": 726.13053318740845, + "Y": 390.15981071006075 + }, + { + "Id": "6d29d6f9bfa64db0879935ce88a7d720", + "Name": "Topology.Edges", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": false, + "X": 726.13053318740845, + "Y": 230.33231071006077 + }, + { + "Id": "30e881f9ce40432aa228cd4755c6640f", + "Name": "Geometry.Explode", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": false, + "X": 373.63053318740845, + "Y": 70.332310710060767 + }, + { + "Id": "45042abf60674769a0a2fdfd616993b3", + "Name": "PolySurface.ByJoinedSurfaces", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": false, + "X": 726.13053318740845, + "Y": 70.332310710060824 + } + ], + "Annotations": [], + "X": 339.45311027464072, + "Y": 283.88853177132938, + "Zoom": 0.533456488110603 + } +} \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.PolySurface.Chamfer.md b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.PolySurface.Chamfer.md index 1d8fa195336..a9aacf1340c 100644 --- a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.PolySurface.Chamfer.md +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.PolySurface.Chamfer.md @@ -1,7 +1,9 @@ ## In Depth -Chamfer will return a new solid with chamfered edges. The edges input specifies which edges to chamfer, while the offset input determines the extent of the chamfer. In the example below, we start with a cube using the default inputs. To get the appropriate edges of the cube, we first explode the cube to get the faces as a list of surfaces. We then use a Face.Edges node to extract the edges of the cube. We extract the first edge of each face with GetItemAtIndex. A number slider controls the offset distance for the chamfer. -___ -## Example File +`PolySurface.Chamfer` returns a new PolySurface with chamfered edges defined by the `offset` input. +In the example below, a new PolySurface is returned by chamfering the top and bottom edges of a cylinder by a 0.5 offset. The offset input must be small enough to fit on the PolySurface. This node is similar to `PolySurface.Fillet`, but it returns a PolySurface with new edges. +___ +## Example File +![PolySurface.Chamfer](./Autodesk.DesignScript.Geometry.PolySurface.Chamfer_img.jpg) \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.PolySurface.Chamfer_img.jpg b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.PolySurface.Chamfer_img.jpg new file mode 100644 index 00000000000..bb1933440f5 Binary files /dev/null and b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.PolySurface.Chamfer_img.jpg differ diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.PolySurface.LocateSurfacesByLine.dyn b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.PolySurface.LocateSurfacesByLine.dyn new file mode 100644 index 00000000000..dab0c0d5881 --- /dev/null +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.PolySurface.LocateSurfacesByLine.dyn @@ -0,0 +1,692 @@ +{ + "Uuid": "d433bf67-a079-460c-b27a-e9053763a394", + "IsCustomNode": false, + "Description": "", + "Name": "Autodesk.DesignScript.Geometry.PolySurface.LocateSurfacesByLine", + "ElementResolver": { + "ResolutionMap": { + "Color": { + "Key": "DSCore.Color", + "Value": "DSCoreNodes.dll" + }, + "Display": { + "Key": "Display.Display", + "Value": "Display.dll" + }, + "Point": { + "Key": "Autodesk.DesignScript.Geometry.Point", + "Value": "ProtoGeometry.dll" + }, + "Vector": { + "Key": "Autodesk.DesignScript.Geometry.Vector", + "Value": "ProtoGeometry.dll" + } + } + }, + "Inputs": [], + "Outputs": [], + "Nodes": [ + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "5335df623fb34e2389e2a75a06a4a374", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "c70e3b3e9e1c4bf9aaeaf33ac7ccdf98", + "Name": "circle", + "Description": "Circle", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "be6e731892c74c30a3ebc9089a7d894c", + "Name": "numberSides", + "Description": "int\nDefault value : 5", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "8e7023db597f408cb0371dfa7aabf86b", + "Name": "Polygon", + "Description": "Polygon", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Polygon.RegularPolygon@Autodesk.DesignScript.Geometry.Circle,int", + "Replication": "Auto", + "Description": "Construct an inscribed Polygon Curve within a circle.\n\nPolygon.RegularPolygon (circle: Circle, numberSides: int = 5): Polygon" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "41292b5670ed4b039979e2440f38368f", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "76986b667c0a48feaf55a010f81fdfd6", + "Name": "centerPoint", + "Description": "Center point of circle\n\nPoint\nDefault value : Autodesk.DesignScript.Geometry.Point.ByCoordinates(0, 0, 0)", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "8a5c3310146a4f198601197afa30cdfa", + "Name": "radius", + "Description": "Radius\n\ndouble\nDefault value : 1", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "4165ea29ebe7494e962b5598719d45d5", + "Name": "Circle", + "Description": "Circle created with center point and radius", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Circle.ByCenterPointRadius@Autodesk.DesignScript.Geometry.Point,double", + "Replication": "Auto", + "Description": "Creates a Circle with input center Point and radius in the world XY plane, with world Z as normal.\n\nCircle.ByCenterPointRadius (centerPoint: Point = Autodesk.DesignScript.Geometry.Point.ByCoordinates(0, 0, 0), radius: double = 1): Circle" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "cc5766a5aaeb4a90a85ecb7abfb271a5", + "NodeType": "CodeBlockNode", + "Inputs": [], + "Outputs": [ + { + "Id": "8eb1117998ef4b9f94ad697143c29abc", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "6;" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "7fa20a53fdbc42458ecfb3b9a077203d", + "NodeType": "CodeBlockNode", + "Inputs": [], + "Outputs": [ + { + "Id": "11a1ad80ffe64af9b8efb3fa175cf52f", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "3;" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "1994817a228b4d43a3654b75f3fbed87", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "73457e6e328a4ae8b42c031bbdc74b57", + "Name": "curve", + "Description": "Autodesk.DesignScript.Geometry.Curve", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "8040be8c345a4c74ba830798e20cf62b", + "Name": "distance", + "Description": "Distance to extrude\n\ndouble\nDefault value : 1", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "f659bb8a4fd84e2f86af9e849464e5ba", + "Name": "Solid", + "Description": "The extruded Solid", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Curve.ExtrudeAsSolid@double", + "Replication": "Auto", + "Description": "Extrudes a Curve in the Normal direction by the specified distance. Curve must be closed.\n\nCurve.ExtrudeAsSolid (distance: double = 1): Solid" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "4defb0da28244b379d7f5cc562a90b24", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "dba692c9273b44d0ba1f5d91a632bb51", + "Name": "solid", + "Description": "Solid which surfaces to use\n\nSolid", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "4f7874f7e54645b589af7a1f38d6e8fc", + "Name": "PolySurface", + "Description": "PolySurface", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.PolySurface.BySolid@Autodesk.DesignScript.Geometry.Solid", + "Replication": "Auto", + "Description": "Make Polysurface by surfaces of Solid.\n\nPolySurface.BySolid (solid: Solid): PolySurface" + }, + { + "ConcreteType": "CoreNodeModels.Watch, CoreNodeModels", + "WatchWidth": 200.0, + "WatchHeight": 200.0, + "Id": "2e3a2203810c4873978076774444f826", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "584839803cdd4be9ac8d8034ff79ced6", + "Name": "", + "Description": "Node to show output from", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "ec3f5c5433154695992c9034339d6cbf", + "Name": "", + "Description": "Node output", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Visualizes a node's output" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "ea0e2f1c57d64b58b1cf6a7fece599e5", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "e9ea342e97e34df38449ea533ad64a73", + "Name": "polySurface", + "Description": "Autodesk.DesignScript.Geometry.PolySurface", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "330bb8b9e7d24834a9060a16e7c57889", + "Name": "line", + "Description": "Line", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "e49b6b494b5c431eb410ac941ed96bbe", + "Name": "Surface[]", + "Description": "Surface[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.PolySurface.LocateSurfacesByLine@Autodesk.DesignScript.Geometry.Line", + "Replication": "Auto", + "Description": "Locate Surfaces by Line. Takes all surfaces hit by line.\n\nPolySurface.LocateSurfacesByLine (line: Line): Surface[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "00d5772aba6e48ac9c1e291e32e94da1", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "e4c340f95eec4d55b7152cb945977524", + "Name": "startPoint", + "Description": "Line start point\n\nPoint", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "66932d262f8f4292a69ee05d98c299cf", + "Name": "direction", + "Description": "Direction vector\n\nVector", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "df4ff10ca431496e91a763a31942b7f5", + "Name": "length", + "Description": "Length of line\n\ndouble\nDefault value : 1", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "e5d705fb1e684ef9b1a8c470b5aa6a5a", + "Name": "Line", + "Description": "Line from start direction and length", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Line.ByStartPointDirectionLength@Autodesk.DesignScript.Geometry.Point,Autodesk.DesignScript.Geometry.Vector,double", + "Replication": "Auto", + "Description": "Create a straight Line starting at start Point, extending in Vector direction by specified length.\n\nLine.ByStartPointDirectionLength (startPoint: Point, direction: Vector, length: double = 1): Line" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "d14f7dd4492548cf9db42798b6397fd6", + "NodeType": "CodeBlockNode", + "Inputs": [], + "Outputs": [ + { + "Id": "a9cd28169e2149b0ba8534b30ac7c833", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "88610f3f6c364193a799d19d8a75504e", + "Name": "", + "Description": "Value of expression at line 2", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "d436f88450d94b908fd0851ffe620e7e", + "Name": "", + "Description": "Value of expression at line 3", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "Point.ByCoordinates(6,-6,3);\nVector.ByCoordinates(-6,6,0);\n20;" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "d8d755c4bd0a4506bf7bcc836cc00db7", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "160e08de96604ea5a675fed18ef24dab", + "Name": "geometry", + "Description": "The geometry to which you would like to apply color.\n\nGeometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "2e75f785a03a4faf8c7e8369c0697199", + "Name": "color", + "Description": "The color.\n\nColor", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "52e7ec45173940a794f7f5f567003a09", + "Name": "GeometryColor", + "Description": "A Display object.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Modifiers.GeometryColor.ByGeometryColor@Autodesk.DesignScript.Geometry.Geometry,DSCore.Color", + "Replication": "Auto", + "Description": "Display geometry using a color.\n\nGeometryColor.ByGeometryColor (geometry: Geometry, color: Color): GeometryColor" + }, + { + "ConcreteType": "CoreNodeModels.Input.ColorPalette, CoreNodeModels", + "InputValue": { + "R": 161, + "G": 196, + "B": 208, + "A": 255 + }, + "Id": "747bc3e75bcc46ccb21f971279deb65b", + "NodeType": "ColorInputNode", + "Inputs": [], + "Outputs": [ + { + "Id": "b660def6a84848d78cb578348573b418", + "Name": "Color", + "Description": "Selected Color.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Select a Color from the palette" + } + ], + "Connectors": [ + { + "Start": "8e7023db597f408cb0371dfa7aabf86b", + "End": "73457e6e328a4ae8b42c031bbdc74b57", + "Id": "86ea44b1ef764105b33b9743a79c83e5", + "IsHidden": "False" + }, + { + "Start": "4165ea29ebe7494e962b5598719d45d5", + "End": "c70e3b3e9e1c4bf9aaeaf33ac7ccdf98", + "Id": "737266716f624635be36d17d8792b737", + "IsHidden": "False" + }, + { + "Start": "8eb1117998ef4b9f94ad697143c29abc", + "End": "be6e731892c74c30a3ebc9089a7d894c", + "Id": "238a4cafa7c2403cb0f83e6fea1b54f6", + "IsHidden": "False" + }, + { + "Start": "8eb1117998ef4b9f94ad697143c29abc", + "End": "8040be8c345a4c74ba830798e20cf62b", + "Id": "58bda78034224a598ccc1c67ac8730ee", + "IsHidden": "False" + }, + { + "Start": "11a1ad80ffe64af9b8efb3fa175cf52f", + "End": "8a5c3310146a4f198601197afa30cdfa", + "Id": "32fa8b08a1734b54a381b3c1c8d7ad1a", + "IsHidden": "False" + }, + { + "Start": "f659bb8a4fd84e2f86af9e849464e5ba", + "End": "dba692c9273b44d0ba1f5d91a632bb51", + "Id": "ad08573869d14c468908ad486855be3e", + "IsHidden": "False" + }, + { + "Start": "4f7874f7e54645b589af7a1f38d6e8fc", + "End": "e9ea342e97e34df38449ea533ad64a73", + "Id": "f4e89d7924ba408aa0bd5de78d949b3a", + "IsHidden": "False" + }, + { + "Start": "4f7874f7e54645b589af7a1f38d6e8fc", + "End": "160e08de96604ea5a675fed18ef24dab", + "Id": "3c24e8d1333a45529ad65252d1106781", + "IsHidden": "False" + }, + { + "Start": "e49b6b494b5c431eb410ac941ed96bbe", + "End": "584839803cdd4be9ac8d8034ff79ced6", + "Id": "c3b553649756401a8c2e241d98a633f9", + "IsHidden": "False" + }, + { + "Start": "e5d705fb1e684ef9b1a8c470b5aa6a5a", + "End": "330bb8b9e7d24834a9060a16e7c57889", + "Id": "8c8d4bdec4e04bf0a9b6c10bd75327fb", + "IsHidden": "False" + }, + { + "Start": "a9cd28169e2149b0ba8534b30ac7c833", + "End": "e4c340f95eec4d55b7152cb945977524", + "Id": "acdd90456aed477ba1bd18a9ab743870", + "IsHidden": "False" + }, + { + "Start": "88610f3f6c364193a799d19d8a75504e", + "End": "66932d262f8f4292a69ee05d98c299cf", + "Id": "1c9c43d564b94245aa14078cd87e2154", + "IsHidden": "False" + }, + { + "Start": "d436f88450d94b908fd0851ffe620e7e", + "End": "df4ff10ca431496e91a763a31942b7f5", + "Id": "5ea9a2969a32476981fd43a47b50a4d0", + "IsHidden": "False" + }, + { + "Start": "b660def6a84848d78cb578348573b418", + "End": "2e75f785a03a4faf8c7e8369c0697199", + "Id": "50191ec37c0e4adca47550db48889a2e", + "IsHidden": "False" + } + ], + "Dependencies": [], + "NodeLibraryDependencies": [], + "Thumbnail": "", + "GraphDocumentationURL": null, + "ExtensionWorkspaceData": [ + { + "ExtensionGuid": "28992e1d-abb9-417f-8b1b-05e053bee670", + "Name": "Properties", + "Version": "2.19", + "Data": {} + } + ], + "Author": "None provided", + "Linting": { + "activeLinter": "None", + "activeLinterId": "7b75fb44-43fd-4631-a878-29f4d5d8399a", + "warningCount": 0, + "errorCount": 0 + }, + "Bindings": [], + "View": { + "Dynamo": { + "ScaleFactor": 1.0, + "HasRunWithoutCrash": true, + "IsVisibleInDynamoLibrary": true, + "Version": "2.19.4.6632", + "RunType": "Automatic", + "RunPeriod": "1000" + }, + "Camera": { + "Name": "_Background Preview", + "EyeX": 11.591912269592285, + "EyeY": 11.734637260437012, + "EyeZ": -1.7373466491699219, + "LookX": -17.052577972412109, + "LookY": -10.119429588317871, + "LookZ": 5.44566011428833, + "UpX": -0.28010433912277222, + "UpY": 0.95579308271408081, + "UpZ": 0.089450061321258545 + }, + "ConnectorPins": [], + "NodeViews": [ + { + "Id": "5335df623fb34e2389e2a75a06a4a374", + "Name": "Polygon.RegularPolygon", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": false, + "X": 1080.074274633665, + "Y": 3228.3836730245202 + }, + { + "Id": "41292b5670ed4b039979e2440f38368f", + "Name": "Circle.ByCenterPointRadius", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": false, + "X": 704.074274633665, + "Y": 3150.3836730245202 + }, + { + "Id": "cc5766a5aaeb4a90a85ecb7abfb271a5", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 704.074274633665, + "Y": 3340.21117302452 + }, + { + "Id": "7fa20a53fdbc42458ecfb3b9a077203d", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 450.074274633665, + "Y": 3184.21117302452 + }, + { + "Id": "1994817a228b4d43a3654b75f3fbed87", + "Name": "Curve.ExtrudeAsSolid", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": false, + "X": 1436.074274633665, + "Y": 3228.3836730245202 + }, + { + "Id": "4defb0da28244b379d7f5cc562a90b24", + "Name": "PolySurface.BySolid", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": false, + "X": 1847.074274633665, + "Y": 3235.3836730245202 + }, + { + "Id": "2e3a2203810c4873978076774444f826", + "Name": "Watch", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2701.074274633665, + "Y": 3340.3836730245202 + }, + { + "Id": "ea0e2f1c57d64b58b1cf6a7fece599e5", + "Name": "PolySurface.LocateSurfacesByLine", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2271.074274633665, + "Y": 3340.3836730245202 + }, + { + "Id": "00d5772aba6e48ac9c1e291e32e94da1", + "Name": "Line.ByStartPointDirectionLength", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1847.074274633665, + "Y": 3394.3836730245202 + }, + { + "Id": "d14f7dd4492548cf9db42798b6397fd6", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1436.074274633665, + "Y": 3418.8661730245203 + }, + { + "Id": "d8d755c4bd0a4506bf7bcc836cc00db7", + "Name": "GeometryColor.ByGeometryColor", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2661.3520936663367, + "Y": 2908.5314957599953 + }, + { + "Id": "747bc3e75bcc46ccb21f971279deb65b", + "Name": "Color Palette", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2403.0432328117213, + "Y": 3017.962883065522 + } + ], + "Annotations": [], + "X": -193.90336514270064, + "Y": -1148.3909416366, + "Zoom": 0.47965456062916917 + } +} \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.PolySurface.LocateSurfacesByLine.md b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.PolySurface.LocateSurfacesByLine.md index 9048379483b..a16f5bfe74e 100644 --- a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.PolySurface.LocateSurfacesByLine.md +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.PolySurface.LocateSurfacesByLine.md @@ -1,7 +1,9 @@ ## In Depth -LocateSurfacesByLine will return all Surface(s) that a Line intersects. In the example below, a line is found to pass through an extruded hexagon at two places and returns two Surfaces. -___ -## Example File +`PolySurface.LocateSurfacesByLine` returns all surfaces that a line intersects. +In the example below, a line is found to pass through an extruded hexagon at two places and returns two surfaces. +___ +## Example File +![PolySurface.LocateSurfacesByLine](./Autodesk.DesignScript.Geometry.PolySurface.LocateSurfacesByLine_img.jpg) \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.PolySurface.LocateSurfacesByLine_img.jpg b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.PolySurface.LocateSurfacesByLine_img.jpg new file mode 100644 index 00000000000..277158725a7 Binary files /dev/null and b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.PolySurface.LocateSurfacesByLine_img.jpg differ diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.PolySurface.LocateSurfacesByPoint.dyn b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.PolySurface.LocateSurfacesByPoint.dyn new file mode 100644 index 00000000000..88b38b826df --- /dev/null +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.PolySurface.LocateSurfacesByPoint.dyn @@ -0,0 +1,692 @@ +{ + "Uuid": "d66689a6-9314-4f3a-9376-bc79a0c66100", + "IsCustomNode": false, + "Description": "", + "Name": "Autodesk.DesignScript.Geometry.PolySurface.LocateSurfacesByPoint", + "ElementResolver": { + "ResolutionMap": { + "Point": { + "Key": "Autodesk.DesignScript.Geometry.Point", + "Value": "ProtoGeometry.dll" + }, + "Vector": { + "Key": "Autodesk.DesignScript.Geometry.Vector", + "Value": "ProtoGeometry.dll" + }, + "Color": { + "Key": "DSCore.Color", + "Value": "DSCoreNodes.dll" + }, + "Display": { + "Key": "Display.Display", + "Value": "Display.dll" + } + } + }, + "Inputs": [], + "Outputs": [], + "Nodes": [ + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "a71afaef304c4e0192c6931eb1d3a131", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "1100005e120449439d7d294062b020f7", + "Name": "circle", + "Description": "Circle", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "8bd91dd253534ef89441a37dad2f4ab4", + "Name": "numberSides", + "Description": "int\nDefault value : 5", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "0b2ba41df6bd40279915fd7a4dcafee8", + "Name": "Polygon", + "Description": "Polygon", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Polygon.RegularPolygon@Autodesk.DesignScript.Geometry.Circle,int", + "Replication": "Auto", + "Description": "Construct an inscribed Polygon Curve within a circle.\n\nPolygon.RegularPolygon (circle: Circle, numberSides: int = 5): Polygon" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "2dd79e9a8094462b8d9472b2fc2285c2", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "57042e2021e54a63bcc9be150d9afeef", + "Name": "centerPoint", + "Description": "Center point of circle\n\nPoint\nDefault value : Autodesk.DesignScript.Geometry.Point.ByCoordinates(0, 0, 0)", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "e7d046013cf547c182ade71edc901125", + "Name": "radius", + "Description": "Radius\n\ndouble\nDefault value : 1", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "fcd6ed369ce14b14b82f33876d97fefd", + "Name": "Circle", + "Description": "Circle created with center point and radius", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Circle.ByCenterPointRadius@Autodesk.DesignScript.Geometry.Point,double", + "Replication": "Auto", + "Description": "Creates a Circle with input center Point and radius in the world XY plane, with world Z as normal.\n\nCircle.ByCenterPointRadius (centerPoint: Point = Autodesk.DesignScript.Geometry.Point.ByCoordinates(0, 0, 0), radius: double = 1): Circle" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "d1fe1311b7e9430887a0043ee034c85f", + "NodeType": "CodeBlockNode", + "Inputs": [], + "Outputs": [ + { + "Id": "066bc9d53fc944dc91de3d987b15e8e5", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "6;" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "63b93ddc25e5437a87a96688ec933e8b", + "NodeType": "CodeBlockNode", + "Inputs": [], + "Outputs": [ + { + "Id": "edb613e1215249928ab1b7f520ad09b9", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "3;" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "c9ab3c343c2a4b6d9c018d8ebc3d77d9", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "ff8908ae35cb42e2a0cc554b3b3b4f6e", + "Name": "curve", + "Description": "Autodesk.DesignScript.Geometry.Curve", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "c4af169027d842c980ee2c866c13c44e", + "Name": "distance", + "Description": "Distance to extrude\n\ndouble\nDefault value : 1", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "09f15ca4b775415e997b0fe757ba49b5", + "Name": "Solid", + "Description": "The extruded Solid", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Curve.ExtrudeAsSolid@double", + "Replication": "Auto", + "Description": "Extrudes a Curve in the Normal direction by the specified distance. Curve must be closed.\n\nCurve.ExtrudeAsSolid (distance: double = 1): Solid" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "960562ff9d5546bb94d206e3b27d862a", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "4d1a9ad2b9bb4a2e97e02ce1842d1a4e", + "Name": "solid", + "Description": "Solid which surfaces to use\n\nSolid", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "b7c833c61bfb4573bbc19fbacf7995cd", + "Name": "PolySurface", + "Description": "PolySurface", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.PolySurface.BySolid@Autodesk.DesignScript.Geometry.Solid", + "Replication": "Auto", + "Description": "Make Polysurface by surfaces of Solid.\n\nPolySurface.BySolid (solid: Solid): PolySurface" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "3591bd2cd97643c5a60caca73979b09b", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "6abb96aa7c0c4605be19c413b59b59fd", + "Name": "polySurface", + "Description": "Autodesk.DesignScript.Geometry.PolySurface", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "aefd1966d5c943aea34abc0978186140", + "Name": "point", + "Description": "Point", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "4463fffad47b4e40af037900976c34fc", + "Name": "direction", + "Description": "Vector", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "69173906d6ff45858c8a24b49fbf19eb", + "Name": "Surface[]", + "Description": "Surface[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.PolySurface.LocateSurfacesByPoint@Autodesk.DesignScript.Geometry.Point,Autodesk.DesignScript.Geometry.Vector", + "Replication": "Auto", + "Description": "Locate Surfaces by point. Takes first intersection in forward direction. Returns one surface if hit surface interior, two if hit edge interior, and many if hit vertex\n\nPolySurface.LocateSurfacesByPoint (point: Point, direction: Vector): Surface[]" + }, + { + "ConcreteType": "CoreNodeModels.Watch, CoreNodeModels", + "WatchWidth": 200.0, + "WatchHeight": 200.0, + "Id": "f94559a906b643e79cd533f0a93402ad", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "7688bac2071b454cad2294ae5fc17eca", + "Name": "", + "Description": "Node to show output from", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "2aed917932ec430e857462a7ab79fe7d", + "Name": "", + "Description": "Node output", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Visualizes a node's output" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "d51ab135d91744c79f49ce3481fbeb09", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "4810e459919e439a8b0acea822f3ebc3", + "Name": "startPoint", + "Description": "Line start point\n\nPoint", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "f319dd2ce797434c9377f361f12fd8ec", + "Name": "direction", + "Description": "Direction vector\n\nVector", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "7467542c6e0440e4b7531b632abbb67a", + "Name": "length", + "Description": "Length of line\n\ndouble\nDefault value : 1", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "641ad24f28da4c25a00f451da5be4eef", + "Name": "Line", + "Description": "Line from start direction and length", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Line.ByStartPointDirectionLength@Autodesk.DesignScript.Geometry.Point,Autodesk.DesignScript.Geometry.Vector,double", + "Replication": "Auto", + "Description": "Create a straight Line starting at start Point, extending in Vector direction by specified length.\n\nLine.ByStartPointDirectionLength (startPoint: Point, direction: Vector, length: double = 1): Line" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "91c38d2d91264a3b894215fe8e7ece48", + "NodeType": "CodeBlockNode", + "Inputs": [], + "Outputs": [ + { + "Id": "54c8634404a746609f8ca34f5d609571", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "2a3b0483cb1643eb8d21f875d2bfb165", + "Name": "", + "Description": "Value of expression at line 2", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "Point.ByCoordinates(-6,1,1);\nVector.ByCoordinates(1,0,0.5);" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "f7f5615f8a5e45a4a961bbc6fa8654a1", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "b30f09f51e60413a8f13df402a100ea6", + "Name": "geometry", + "Description": "The geometry to which you would like to apply color.\n\nGeometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "8af67dd3fc37485c816cec145edd4759", + "Name": "color", + "Description": "The color.\n\nColor", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "3dca525a714945a8a0d00731687bce81", + "Name": "GeometryColor", + "Description": "A Display object.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Modifiers.GeometryColor.ByGeometryColor@Autodesk.DesignScript.Geometry.Geometry,DSCore.Color", + "Replication": "Auto", + "Description": "Display geometry using a color.\n\nGeometryColor.ByGeometryColor (geometry: Geometry, color: Color): GeometryColor" + }, + { + "ConcreteType": "CoreNodeModels.Input.ColorPalette, CoreNodeModels", + "InputValue": { + "R": 143, + "G": 189, + "B": 204, + "A": 255 + }, + "Id": "dcaa1b79179146cbba45e020711ef936", + "NodeType": "ColorInputNode", + "Inputs": [], + "Outputs": [ + { + "Id": "d7d3493d3c254cc08b635d96faf7bf98", + "Name": "Color", + "Description": "Selected Color.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Select a Color from the palette" + } + ], + "Connectors": [ + { + "Start": "0b2ba41df6bd40279915fd7a4dcafee8", + "End": "ff8908ae35cb42e2a0cc554b3b3b4f6e", + "Id": "c766f060a9d44b2ab5ebe2156a5d88a1", + "IsHidden": "False" + }, + { + "Start": "fcd6ed369ce14b14b82f33876d97fefd", + "End": "1100005e120449439d7d294062b020f7", + "Id": "5a1ff4bf509b44dc9c3e84ed1335b731", + "IsHidden": "False" + }, + { + "Start": "066bc9d53fc944dc91de3d987b15e8e5", + "End": "8bd91dd253534ef89441a37dad2f4ab4", + "Id": "5aa84ac7cff043358a081b29cf57f646", + "IsHidden": "False" + }, + { + "Start": "066bc9d53fc944dc91de3d987b15e8e5", + "End": "c4af169027d842c980ee2c866c13c44e", + "Id": "2cd4b38c10f1498ba7085f80fd9a2559", + "IsHidden": "False" + }, + { + "Start": "edb613e1215249928ab1b7f520ad09b9", + "End": "e7d046013cf547c182ade71edc901125", + "Id": "8ca995ae5f3243e0b04be1ede5f99ea0", + "IsHidden": "False" + }, + { + "Start": "09f15ca4b775415e997b0fe757ba49b5", + "End": "4d1a9ad2b9bb4a2e97e02ce1842d1a4e", + "Id": "1a89cd14c2954a80ab3deb959d6b8841", + "IsHidden": "False" + }, + { + "Start": "b7c833c61bfb4573bbc19fbacf7995cd", + "End": "6abb96aa7c0c4605be19c413b59b59fd", + "Id": "27a8d4a1815e42cca23e85b96fd837c0", + "IsHidden": "False" + }, + { + "Start": "b7c833c61bfb4573bbc19fbacf7995cd", + "End": "b30f09f51e60413a8f13df402a100ea6", + "Id": "a9ac3a8bc4ac4db0bf380e6f3913693e", + "IsHidden": "False" + }, + { + "Start": "69173906d6ff45858c8a24b49fbf19eb", + "End": "7688bac2071b454cad2294ae5fc17eca", + "Id": "b456132a4cc444fca41a30db5db9417d", + "IsHidden": "False" + }, + { + "Start": "54c8634404a746609f8ca34f5d609571", + "End": "4810e459919e439a8b0acea822f3ebc3", + "Id": "f3e6836373e44d88b6a9c3b1a525c68b", + "IsHidden": "False" + }, + { + "Start": "54c8634404a746609f8ca34f5d609571", + "End": "aefd1966d5c943aea34abc0978186140", + "Id": "59c79e241fc449e3b8cd4cbafe2f2aeb", + "IsHidden": "False" + }, + { + "Start": "2a3b0483cb1643eb8d21f875d2bfb165", + "End": "f319dd2ce797434c9377f361f12fd8ec", + "Id": "02e55776750e405baa25d20c23f34f0d", + "IsHidden": "False" + }, + { + "Start": "2a3b0483cb1643eb8d21f875d2bfb165", + "End": "4463fffad47b4e40af037900976c34fc", + "Id": "4163fc677b32457896d4875bfadaf0fb", + "IsHidden": "False" + }, + { + "Start": "d7d3493d3c254cc08b635d96faf7bf98", + "End": "8af67dd3fc37485c816cec145edd4759", + "Id": "2a4bc2a5f75e4afc99bc8bd3433ab254", + "IsHidden": "False" + } + ], + "Dependencies": [], + "NodeLibraryDependencies": [], + "Thumbnail": "", + "GraphDocumentationURL": null, + "ExtensionWorkspaceData": [ + { + "ExtensionGuid": "28992e1d-abb9-417f-8b1b-05e053bee670", + "Name": "Properties", + "Version": "2.19", + "Data": {} + } + ], + "Author": "None provided", + "Linting": { + "activeLinter": "None", + "activeLinterId": "7b75fb44-43fd-4631-a878-29f4d5d8399a", + "warningCount": 0, + "errorCount": 0 + }, + "Bindings": [], + "View": { + "Dynamo": { + "ScaleFactor": 1.0, + "HasRunWithoutCrash": true, + "IsVisibleInDynamoLibrary": true, + "Version": "2.19.4.6632", + "RunType": "Automatic", + "RunPeriod": "1000" + }, + "Camera": { + "Name": "_Background Preview", + "EyeX": -6.256777286529541, + "EyeY": 10.278606414794922, + "EyeZ": -12.108186721801758, + "LookX": 9.7447071075439453, + "LookY": -8.45804500579834, + "LookZ": 14.550629615783691, + "UpX": 0.12895606458187103, + "UpY": 0.97277587652206421, + "UpZ": 0.19255498051643372 + }, + "ConnectorPins": [], + "NodeViews": [ + { + "Id": "a71afaef304c4e0192c6931eb1d3a131", + "Name": "Polygon.RegularPolygon", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": false, + "X": 1117.074274633665, + "Y": 3142.74270204608 + }, + { + "Id": "2dd79e9a8094462b8d9472b2fc2285c2", + "Name": "Circle.ByCenterPointRadius", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": false, + "X": 741.074274633665, + "Y": 3064.74270204608 + }, + { + "Id": "d1fe1311b7e9430887a0043ee034c85f", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 741.074274633665, + "Y": 3254.57020204608 + }, + { + "Id": "63b93ddc25e5437a87a96688ec933e8b", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 487.074274633665, + "Y": 3098.57020204608 + }, + { + "Id": "c9ab3c343c2a4b6d9c018d8ebc3d77d9", + "Name": "Curve.ExtrudeAsSolid", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": false, + "X": 1473.074274633665, + "Y": 3142.74270204608 + }, + { + "Id": "960562ff9d5546bb94d206e3b27d862a", + "Name": "PolySurface.BySolid", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": false, + "X": 1806.074274633665, + "Y": 3142.74270204608 + }, + { + "Id": "3591bd2cd97643c5a60caca73979b09b", + "Name": "PolySurface.LocateSurfacesByPoint", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2225.074274633665, + "Y": 3227.24270204608 + }, + { + "Id": "f94559a906b643e79cd533f0a93402ad", + "Name": "Watch", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2664.074274633665, + "Y": 3227.24270204608 + }, + { + "Id": "d51ab135d91744c79f49ce3481fbeb09", + "Name": "Line.ByStartPointDirectionLength", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2664.074274633665, + "Y": 3540.24270204608 + }, + { + "Id": "91c38d2d91264a3b894215fe8e7ece48", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1806.074274633665, + "Y": 3409.3977020460798 + }, + { + "Id": "f7f5615f8a5e45a4a961bbc6fa8654a1", + "Name": "GeometryColor.ByGeometryColor", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2658.2904725554044, + "Y": 3031.5251282687964 + }, + { + "Id": "dcaa1b79179146cbba45e020711ef936", + "Name": "Color Palette", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2407.2757327953873, + "Y": 3074.2087869097486 + } + ], + "Annotations": [], + "X": -220.41616148556534, + "Y": -1271.3069419068095, + "Zoom": 0.52666234791436761 + } +} \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.PolySurface.LocateSurfacesByPoint.md b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.PolySurface.LocateSurfacesByPoint.md index 6cb8c180843..c0a1f718f9d 100644 --- a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.PolySurface.LocateSurfacesByPoint.md +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.PolySurface.LocateSurfacesByPoint.md @@ -1,7 +1,9 @@ ## In Depth -LocateSurfacesByPoint will return the first Surface intersected in the forward direction as defined by a Vector. In the example below, the Surface returned is intersected by a Vector originating at the Point. The Vector is represented as a Line. -___ -## Example File +`PolySurface.LocateSurfacesByPoint` returns the first surface intersected in the forward direction as defined by a vector. +In the example below, the surface returned is intersected by a vector originating at the point. The vector is represented as a line. +___ +## Example File +![PolySurface.LocateSurfacesByPoint](./Autodesk.DesignScript.Geometry.PolySurface.LocateSurfacesByPoint_img.jpg) \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.PolySurface.LocateSurfacesByPoint_img.jpg b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.PolySurface.LocateSurfacesByPoint_img.jpg new file mode 100644 index 00000000000..3ed527fbee9 Binary files /dev/null and b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.PolySurface.LocateSurfacesByPoint_img.jpg differ diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.PolySurface.Surfaces.dyn b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.PolySurface.Surfaces.dyn new file mode 100644 index 00000000000..5a24dc80707 --- /dev/null +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.PolySurface.Surfaces.dyn @@ -0,0 +1,592 @@ +{ + "Uuid": "6a6df533-57ca-4e20-88ec-b90d7f39e593", + "IsCustomNode": false, + "Description": "", + "Name": "Autodesk.DesignScript.Geometry.PolySurface.Surfaces", + "ElementResolver": { + "ResolutionMap": { + "Color": { + "Key": "DSCore.Color", + "Value": "DSCoreNodes.dll" + }, + "Display": { + "Key": "Display.Display", + "Value": "Display.dll" + } + } + }, + "Inputs": [], + "Outputs": [], + "Nodes": [ + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "cb068ce429054800b0fc72af4b71f879", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "52c4e030ca644980b6b64cee6afa24d5", + "Name": "circle", + "Description": "Circle", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "7a1d806bde1649a5b85419bcd9a3cd61", + "Name": "numberSides", + "Description": "int\nDefault value : 5", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "031985c93fde4d618be5dd5dba843bb4", + "Name": "Polygon", + "Description": "Polygon", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Polygon.RegularPolygon@Autodesk.DesignScript.Geometry.Circle,int", + "Replication": "Auto", + "Description": "Construct an inscribed Polygon Curve within a circle.\n\nPolygon.RegularPolygon (circle: Circle, numberSides: int = 5): Polygon" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "7dd1362175734f219261038e41d94790", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "eac60ad220ae45808141bb47e351c638", + "Name": "centerPoint", + "Description": "Center point of circle\n\nPoint\nDefault value : Autodesk.DesignScript.Geometry.Point.ByCoordinates(0, 0, 0)", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "deb74cdcdb894811be2c17584badac6a", + "Name": "radius", + "Description": "Radius\n\ndouble\nDefault value : 1", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "6b2464a4388b4f278be49815c7897e09", + "Name": "Circle", + "Description": "Circle created with center point and radius", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Circle.ByCenterPointRadius@Autodesk.DesignScript.Geometry.Point,double", + "Replication": "Auto", + "Description": "Creates a Circle with input center Point and radius in the world XY plane, with world Z as normal.\n\nCircle.ByCenterPointRadius (centerPoint: Point = Autodesk.DesignScript.Geometry.Point.ByCoordinates(0, 0, 0), radius: double = 1): Circle" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "7ef2629a81f6405ab6f8b7ca5da27f4f", + "NodeType": "CodeBlockNode", + "Inputs": [], + "Outputs": [ + { + "Id": "dd8caf51d56e46ecbfe7c487def82c1c", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "6;" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "d7c8839768bf4dfca48f40cf271b653d", + "NodeType": "CodeBlockNode", + "Inputs": [], + "Outputs": [ + { + "Id": "8cca2107979e43598619d6f9c9891821", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "3;" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "51620966c86f45f08ad64ac8305b5002", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "aabbeff9dec047c5a456b63461e48f51", + "Name": "curve", + "Description": "Autodesk.DesignScript.Geometry.Curve", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "15daff9dda884cfaba6ccd8b185f362b", + "Name": "distance", + "Description": "Distance to extrude\n\ndouble\nDefault value : 1", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "a04761d373af40e3990edc5d7fb39310", + "Name": "Solid", + "Description": "The extruded Solid", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Curve.ExtrudeAsSolid@double", + "Replication": "Auto", + "Description": "Extrudes a Curve in the Normal direction by the specified distance. Curve must be closed.\n\nCurve.ExtrudeAsSolid (distance: double = 1): Solid" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "bba4a1bc63f744b89866dab039d8a47f", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "699f28397aad47de94b674323f405925", + "Name": "solid", + "Description": "Solid which surfaces to use\n\nSolid", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "4d29ee5fb9824547ad3c8c2ef10278c2", + "Name": "PolySurface", + "Description": "PolySurface", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.PolySurface.BySolid@Autodesk.DesignScript.Geometry.Solid", + "Replication": "Auto", + "Description": "Make Polysurface by surfaces of Solid.\n\nPolySurface.BySolid (solid: Solid): PolySurface" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "7ee931228bc24f469b57e4d0e939a852", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "8093d08c4165464f837e28956852287a", + "Name": "polySurface", + "Description": "Autodesk.DesignScript.Geometry.PolySurface", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "2cd35e9b7b8b436cb1e6b30246065bed", + "Name": "Surface[]", + "Description": "Surface[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.PolySurface.Surfaces", + "Replication": "Auto", + "Description": "Return new Surfaces representing the underlying Surfaces.\n\nPolySurface.Surfaces ( ): Surface[]" + }, + { + "ConcreteType": "CoreNodeModels.Watch, CoreNodeModels", + "WatchWidth": 200.0, + "WatchHeight": 200.0, + "Id": "626d671a4c3f41129cea8d7e5352becf", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "f46282b2e09443ffbf65455a50ded4a3", + "Name": "", + "Description": "Node to show output from", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "4260bb17fe294a79844520face83d848", + "Name": "", + "Description": "Node output", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Visualizes a node's output" + }, + { + "ConcreteType": "CoreNodeModels.Watch, CoreNodeModels", + "WatchWidth": 102.0, + "WatchHeight": 38.0, + "Id": "615e7eb1192248a58069d2d7ad20db68", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "3b7e46a2b5a742be94d75dcc47ec89c2", + "Name": "", + "Description": "Node to show output from", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "04c47b41cc5943cf97c29bd1954cd78d", + "Name": "", + "Description": "Node output", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Visualizes a node's output" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "4786808a41ce45a2871bbeef7b87b1ad", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "d3c0612a1663482293e7e7166f6a12dd", + "Name": "geometry", + "Description": "The geometry to which you would like to apply color.\n\nGeometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "943f14b43cc743db876f66c65a10d1d4", + "Name": "color", + "Description": "The color.\n\nColor", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "8f703b83d4774eb698a5ec87227d1525", + "Name": "GeometryColor", + "Description": "A Display object.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Modifiers.GeometryColor.ByGeometryColor@Autodesk.DesignScript.Geometry.Geometry,DSCore.Color", + "Replication": "Auto", + "Description": "Display geometry using a color.\n\nGeometryColor.ByGeometryColor (geometry: Geometry, color: Color): GeometryColor" + }, + { + "ConcreteType": "CoreNodeModels.Input.ColorPalette, CoreNodeModels", + "InputValue": { + "R": 178, + "G": 234, + "B": 234, + "A": 255 + }, + "Id": "d1b5d31b1634469b8e53555b118a372b", + "NodeType": "ColorInputNode", + "Inputs": [], + "Outputs": [ + { + "Id": "d4701e2b08c6413a931e45c1d4dcf2e4", + "Name": "Color", + "Description": "Selected Color.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Select a Color from the palette" + } + ], + "Connectors": [ + { + "Start": "031985c93fde4d618be5dd5dba843bb4", + "End": "aabbeff9dec047c5a456b63461e48f51", + "Id": "347977d4c90e446ab4f9ebaff0461c1c", + "IsHidden": "False" + }, + { + "Start": "6b2464a4388b4f278be49815c7897e09", + "End": "52c4e030ca644980b6b64cee6afa24d5", + "Id": "7cec545d27534016916d11d3b4d6df1b", + "IsHidden": "False" + }, + { + "Start": "dd8caf51d56e46ecbfe7c487def82c1c", + "End": "7a1d806bde1649a5b85419bcd9a3cd61", + "Id": "fb035ee718cc492f84a8856baa9a339a", + "IsHidden": "False" + }, + { + "Start": "dd8caf51d56e46ecbfe7c487def82c1c", + "End": "15daff9dda884cfaba6ccd8b185f362b", + "Id": "2e23710bf0c3451c93e6a8819ff12925", + "IsHidden": "False" + }, + { + "Start": "8cca2107979e43598619d6f9c9891821", + "End": "deb74cdcdb894811be2c17584badac6a", + "Id": "4a0c1abd262c4d2ca7d97f10b7b44c7e", + "IsHidden": "False" + }, + { + "Start": "a04761d373af40e3990edc5d7fb39310", + "End": "699f28397aad47de94b674323f405925", + "Id": "4c8e8190b07c434ca7aee01c3fc07e0d", + "IsHidden": "False" + }, + { + "Start": "4d29ee5fb9824547ad3c8c2ef10278c2", + "End": "8093d08c4165464f837e28956852287a", + "Id": "65fd0270d48e4d3d90c887e45b204384", + "IsHidden": "False" + }, + { + "Start": "4d29ee5fb9824547ad3c8c2ef10278c2", + "End": "3b7e46a2b5a742be94d75dcc47ec89c2", + "Id": "4caf272f727b46fab85447f3427b04e0", + "IsHidden": "False" + }, + { + "Start": "2cd35e9b7b8b436cb1e6b30246065bed", + "End": "f46282b2e09443ffbf65455a50ded4a3", + "Id": "dded824faf83444989ea347cf7d8b33a", + "IsHidden": "False" + }, + { + "Start": "2cd35e9b7b8b436cb1e6b30246065bed", + "End": "d3c0612a1663482293e7e7166f6a12dd", + "Id": "42fe2b7c56484e4090f5ae6ccbbab88f", + "IsHidden": "False" + }, + { + "Start": "d4701e2b08c6413a931e45c1d4dcf2e4", + "End": "943f14b43cc743db876f66c65a10d1d4", + "Id": "c0a0779882854399a93d1f40a3591b28", + "IsHidden": "False" + } + ], + "Dependencies": [], + "NodeLibraryDependencies": [], + "Thumbnail": "", + "GraphDocumentationURL": null, + "ExtensionWorkspaceData": [ + { + "ExtensionGuid": "28992e1d-abb9-417f-8b1b-05e053bee670", + "Name": "Properties", + "Version": "2.19", + "Data": {} + } + ], + "Author": "None provided", + "Linting": { + "activeLinter": "None", + "activeLinterId": "7b75fb44-43fd-4631-a878-29f4d5d8399a", + "warningCount": 0, + "errorCount": 0 + }, + "Bindings": [], + "View": { + "Dynamo": { + "ScaleFactor": 1.0, + "HasRunWithoutCrash": true, + "IsVisibleInDynamoLibrary": true, + "Version": "2.19.4.6632", + "RunType": "Automatic", + "RunPeriod": "1000" + }, + "Camera": { + "Name": "_Background Preview", + "EyeX": -9.1837615966796875, + "EyeY": 9.0076513290405273, + "EyeZ": 10.286493301391602, + "LookX": 11.37481689453125, + "LookY": -8.0109405517578125, + "LookZ": -15.547768592834473, + "UpX": 0.1045607328414917, + "UpY": 0.98419559001922607, + "UpZ": -0.14291974902153015 + }, + "ConnectorPins": [], + "NodeViews": [ + { + "Id": "cb068ce429054800b0fc72af4b71f879", + "Name": "Polygon.RegularPolygon", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": false, + "X": 1259.5661320546551, + "Y": 3353.272419171105 + }, + { + "Id": "7dd1362175734f219261038e41d94790", + "Name": "Circle.ByCenterPointRadius", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": false, + "X": 883.5661320546551, + "Y": 3275.272419171105 + }, + { + "Id": "7ef2629a81f6405ab6f8b7ca5da27f4f", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 883.5661320546551, + "Y": 3465.0999191711048 + }, + { + "Id": "d7c8839768bf4dfca48f40cf271b653d", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 629.5661320546551, + "Y": 3309.0999191711048 + }, + { + "Id": "51620966c86f45f08ad64ac8305b5002", + "Name": "Curve.ExtrudeAsSolid", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": false, + "X": 1615.5661320546551, + "Y": 3353.272419171105 + }, + { + "Id": "bba4a1bc63f744b89866dab039d8a47f", + "Name": "PolySurface.BySolid", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": false, + "X": 1948.5661320546551, + "Y": 3353.272419171105 + }, + { + "Id": "7ee931228bc24f469b57e4d0e939a852", + "Name": "PolySurface.Surfaces", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": false, + "X": 2275.5661320546551, + "Y": 3154.522419171105 + }, + { + "Id": "626d671a4c3f41129cea8d7e5352becf", + "Name": "Watch", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2627.5661320546551, + "Y": 3239.022419171105 + }, + { + "Id": "615e7eb1192248a58069d2d7ad20db68", + "Name": "Watch", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2627.5661320546551, + "Y": 3552.022419171105 + }, + { + "Id": "4786808a41ce45a2871bbeef7b87b1ad", + "Name": "GeometryColor.ByGeometryColor", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2671.1365412596056, + "Y": 3038.3546410502381 + }, + { + "Id": "d1b5d31b1634469b8e53555b118a372b", + "Name": "Color Palette", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2395.3380072207665, + "Y": 2980.8587504964962 + } + ], + "Annotations": [], + "X": -288.54023861404369, + "Y": -1482.3956829957538, + "Zoom": 0.54330014759681033 + } +} \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.PolySurface.Surfaces.md b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.PolySurface.Surfaces.md index 44f142b2014..8e6c0cdda1a 100644 --- a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.PolySurface.Surfaces.md +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.PolySurface.Surfaces.md @@ -1,7 +1,10 @@ ## In Depth -Surfaces will return the Surfaces that make up a PolySurface. In the example below, a extruded hexagon will return eight individual Surfaces. -___ -## Example File +`PolySurface.Surfaces` returns the surfaces that make up a PolySurface. + +In the example below, `PolySurface.Surfaces` is used to return eight individual surfaces from an extruded hexagon. +___ +## Example File +![PolySurface.Surfaces](./Autodesk.DesignScript.Geometry.PolySurface.Surfaces_img.jpg) \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.PolySurface.Surfaces_img.jpg b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.PolySurface.Surfaces_img.jpg new file mode 100644 index 00000000000..ebe2e7aaa87 Binary files /dev/null and b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.PolySurface.Surfaces_img.jpg differ diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.PolySurface.UnconnectedBoundaries.dyn b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.PolySurface.UnconnectedBoundaries.dyn new file mode 100644 index 00000000000..024bae6d110 --- /dev/null +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.PolySurface.UnconnectedBoundaries.dyn @@ -0,0 +1,547 @@ +{ + "Uuid": "87f3a4c6-c03d-4e6c-88c1-28030772aa65", + "IsCustomNode": false, + "Description": "", + "Name": "Autodesk.DesignScript.Geometry.PolySurface.UnconnectedBoundaries", + "ElementResolver": { + "ResolutionMap": { + "Point": { + "Key": "Autodesk.DesignScript.Geometry.Point", + "Value": "ProtoGeometry.dll" + }, + "Color": { + "Key": "DSCore.Color", + "Value": "DSCoreNodes.dll" + }, + "Display": { + "Key": "Display.Display", + "Value": "Display.dll" + } + } + }, + "Inputs": [], + "Outputs": [], + "Nodes": [ + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "d0a9548be6aa465abb29d0c8d8b45260", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "0f1fcbb2c1334405b3d65b7dff64e3fc", + "Name": "circle", + "Description": "Circle", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "5fd8f59575484f9785eef885313d9e77", + "Name": "numberSides", + "Description": "int\nDefault value : 5", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "c29f19b15aaa43778480f2d563e3d930", + "Name": "Polygon", + "Description": "Polygon", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Polygon.RegularPolygon@Autodesk.DesignScript.Geometry.Circle,int", + "Replication": "Auto", + "Description": "Construct an inscribed Polygon Curve within a circle.\n\nPolygon.RegularPolygon (circle: Circle, numberSides: int = 5): Polygon" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "a68671bcde6c4cd8b74cbaac07cb5311", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "cede60e09fe740e6aeb4d3ac440eaa28", + "Name": "centerPoint", + "Description": "Center point of circle\n\nPoint\nDefault value : Autodesk.DesignScript.Geometry.Point.ByCoordinates(0, 0, 0)", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "0392998c14104bad8bb0f80cd0e37f9c", + "Name": "radius", + "Description": "Radius\n\ndouble\nDefault value : 1", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "9db90dedabdc4791a138fb0dee245044", + "Name": "Circle", + "Description": "Circle created with center point and radius", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Circle.ByCenterPointRadius@Autodesk.DesignScript.Geometry.Point,double", + "Replication": "Auto", + "Description": "Creates a Circle with input center Point and radius in the world XY plane, with world Z as normal.\n\nCircle.ByCenterPointRadius (centerPoint: Point = Autodesk.DesignScript.Geometry.Point.ByCoordinates(0, 0, 0), radius: double = 1): Circle" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "08399a9a761c429d9fb95129344fb49c", + "NodeType": "CodeBlockNode", + "Inputs": [], + "Outputs": [ + { + "Id": "51265b35206f4191a27f34ba88c7c872", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "6;" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "dbd7b28f086f48c394b99aa52286f4c7", + "NodeType": "CodeBlockNode", + "Inputs": [], + "Outputs": [ + { + "Id": "af555b609a8a4583a244fec04d766efc", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "3;" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "ef4d29195f3b49319e4b8a51523dbd8e", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "435897fd8cc74394b4472d412f3e48a9", + "Name": "crossSections", + "Description": "Curves to loft through.\n\nCurve[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "7e9e3e50ccb14df1a4032ddedac93ba2", + "Name": "PolySurface", + "Description": "PolySurface", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.PolySurface.ByLoft@Autodesk.DesignScript.Geometry.Curve[]", + "Replication": "Auto", + "Description": "Makes PolySurface by Loft through Curves.\n\nPolySurface.ByLoft (crossSections: Curve[]): PolySurface" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "f5bb0869de3c4e0088f581df0404f88f", + "NodeType": "CodeBlockNode", + "Inputs": [], + "Outputs": [ + { + "Id": "4643feff88214ccabdccd1e3031bfaad", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "1559e2108ad8442caa9cc5cfc278bebc", + "Name": "", + "Description": "Value of expression at line 2", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "Point.ByCoordinates(0,0,0);\nPoint.ByCoordinates(0,0,6);" + }, + { + "ConcreteType": "CoreNodeModels.CreateList, CoreNodeModels", + "VariableInputPorts": true, + "Id": "9f9d338753dd4157bceaa499aa57b09b", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "5ff41c41bc9f483b8dd0b8dcec72319d", + "Name": "item0", + "Description": "Item Index #0", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "51866128a80244cf8ae6d0982d24eaf6", + "Name": "item1", + "Description": "Item Index #1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "e0550089edd243a4be4c14d1e7157e21", + "Name": "list", + "Description": "A list (type: var[]..[])", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Makes a new list from the given inputs" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "3f5864d3ebf94409a5b54d985ef7b1b5", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "4f5fa667f09147c7bc5a55fd5fda82e2", + "Name": "polySurface", + "Description": "Autodesk.DesignScript.Geometry.PolySurface", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "e0d0c6e2691147daa90dab18048c9253", + "Name": "PolyCurve[]", + "Description": "PolyCurve[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.PolySurface.UnconnectedBoundaries", + "Replication": "Auto", + "Description": "Compute 2d cell boundaries which are not connected to other Surfaces\n\nPolySurface.UnconnectedBoundaries ( ): PolyCurve[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "b8d196cec13941c294f92b3afd67aa54", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "ec13b82ceebc4933951c362e853f2618", + "Name": "geometry", + "Description": "The geometry to which you would like to apply color.\n\nGeometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "24be7dd6984a48f285eddb80a52cccb1", + "Name": "color", + "Description": "The color.\n\nColor", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "e1e0133e4b4a40fb92e41576a8ecf4c1", + "Name": "GeometryColor", + "Description": "A Display object.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Modifiers.GeometryColor.ByGeometryColor@Autodesk.DesignScript.Geometry.Geometry,DSCore.Color", + "Replication": "Auto", + "Description": "Display geometry using a color.\n\nGeometryColor.ByGeometryColor (geometry: Geometry, color: Color): GeometryColor" + }, + { + "ConcreteType": "CoreNodeModels.Input.ColorPalette, CoreNodeModels", + "InputValue": { + "R": 179, + "G": 223, + "B": 238, + "A": 255 + }, + "Id": "c62bf36e98834d19b2d4bd1ba95cd42c", + "NodeType": "ColorInputNode", + "Inputs": [], + "Outputs": [ + { + "Id": "28fbf24b79de40e1a689fdcef380d213", + "Name": "Color", + "Description": "Selected Color.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Select a Color from the palette" + } + ], + "Connectors": [ + { + "Start": "c29f19b15aaa43778480f2d563e3d930", + "End": "435897fd8cc74394b4472d412f3e48a9", + "Id": "d6cccdb2361d48f596641fbd7534c249", + "IsHidden": "False" + }, + { + "Start": "9db90dedabdc4791a138fb0dee245044", + "End": "0f1fcbb2c1334405b3d65b7dff64e3fc", + "Id": "a0caef9f7de945b29df1592ba605fc44", + "IsHidden": "False" + }, + { + "Start": "51265b35206f4191a27f34ba88c7c872", + "End": "5fd8f59575484f9785eef885313d9e77", + "Id": "34e5bcba9735481ba61653fa3daa2d6a", + "IsHidden": "False" + }, + { + "Start": "af555b609a8a4583a244fec04d766efc", + "End": "0392998c14104bad8bb0f80cd0e37f9c", + "Id": "b393775885044c01a43bd55e9743ec4e", + "IsHidden": "False" + }, + { + "Start": "7e9e3e50ccb14df1a4032ddedac93ba2", + "End": "4f5fa667f09147c7bc5a55fd5fda82e2", + "Id": "146f03e8b1e345aaa4ffc018b1ee9ec1", + "IsHidden": "False" + }, + { + "Start": "7e9e3e50ccb14df1a4032ddedac93ba2", + "End": "ec13b82ceebc4933951c362e853f2618", + "Id": "323609f88fe1478592b81bbf16b73c2a", + "IsHidden": "False" + }, + { + "Start": "4643feff88214ccabdccd1e3031bfaad", + "End": "5ff41c41bc9f483b8dd0b8dcec72319d", + "Id": "a24d8235051f4e1d8c5370ef639798b3", + "IsHidden": "False" + }, + { + "Start": "1559e2108ad8442caa9cc5cfc278bebc", + "End": "51866128a80244cf8ae6d0982d24eaf6", + "Id": "b050e7cb717b4bf5b520bb04356f339e", + "IsHidden": "False" + }, + { + "Start": "e0550089edd243a4be4c14d1e7157e21", + "End": "cede60e09fe740e6aeb4d3ac440eaa28", + "Id": "c75f46a4be234199a96651f879a31f9d", + "IsHidden": "False" + }, + { + "Start": "28fbf24b79de40e1a689fdcef380d213", + "End": "24be7dd6984a48f285eddb80a52cccb1", + "Id": "c4af922bd63f49019fa06310b450544f", + "IsHidden": "False" + } + ], + "Dependencies": [], + "NodeLibraryDependencies": [], + "Thumbnail": "", + "GraphDocumentationURL": null, + "ExtensionWorkspaceData": [ + { + "ExtensionGuid": "28992e1d-abb9-417f-8b1b-05e053bee670", + "Name": "Properties", + "Version": "2.19", + "Data": {} + } + ], + "Author": "None provided", + "Linting": { + "activeLinter": "None", + "activeLinterId": "7b75fb44-43fd-4631-a878-29f4d5d8399a", + "warningCount": 0, + "errorCount": 0 + }, + "Bindings": [], + "View": { + "Dynamo": { + "ScaleFactor": 1.0, + "HasRunWithoutCrash": true, + "IsVisibleInDynamoLibrary": true, + "Version": "2.19.4.6632", + "RunType": "Automatic", + "RunPeriod": "1000" + }, + "Camera": { + "Name": "_Background Preview", + "EyeX": -9.8797941207885742, + "EyeY": 12.201346397399902, + "EyeZ": 6.7003574371337891, + "LookX": 11.1499605178833, + "LookY": -12.615135192871094, + "LookZ": -12.831369400024414, + "UpX": 0.26887628436088562, + "UpY": 0.91212010383605957, + "UpZ": -0.30942273139953613 + }, + "ConnectorPins": [], + "NodeViews": [ + { + "Id": "d0a9548be6aa465abb29d0c8d8b45260", + "Name": "Polygon.RegularPolygon", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": false, + "X": 1457.0365903825871, + "Y": 3307.4141078189205 + }, + { + "Id": "a68671bcde6c4cd8b74cbaac07cb5311", + "Name": "Circle.ByCenterPointRadius", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": false, + "X": 1081.0365903825871, + "Y": 3229.4141078189205 + }, + { + "Id": "08399a9a761c429d9fb95129344fb49c", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1081.0365903825871, + "Y": 3419.2416078189203 + }, + { + "Id": "dbd7b28f086f48c394b99aa52286f4c7", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 821.03659038258706, + "Y": 3341.2416078189203 + }, + { + "Id": "ef4d29195f3b49319e4b8a51523dbd8e", + "Name": "PolySurface.ByLoft", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": false, + "X": 1813.0365903825871, + "Y": 3307.4141078189205 + }, + { + "Id": "f5bb0869de3c4e0088f581df0404f88f", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": false, + "X": 425.03659038258706, + "Y": 3160.06910781892 + }, + { + "Id": "9f9d338753dd4157bceaa499aa57b09b", + "Name": "List.Create", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": false, + "X": 821.03659038258706, + "Y": 3151.4141078189205 + }, + { + "Id": "3f5864d3ebf94409a5b54d985ef7b1b5", + "Name": "PolySurface.UnconnectedBoundaries", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2191.0365903825868, + "Y": 3392.4141078189205 + }, + { + "Id": "b8d196cec13941c294f92b3afd67aa54", + "Name": "GeometryColor.ByGeometryColor", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2233.8261365109624, + "Y": 3143.6105685740645 + }, + { + "Id": "c62bf36e98834d19b2d4bd1ba95cd42c", + "Name": "Color Palette", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1979.7478510391356, + "Y": 3114.710668804757 + } + ], + "Annotations": [], + "X": -281.85950330884407, + "Y": -1783.2248993967348, + "Zoom": 0.64903243119860643 + } +} \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.PolySurface.UnconnectedBoundaries.md b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.PolySurface.UnconnectedBoundaries.md index 46da39b8bc9..e6254715957 100644 --- a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.PolySurface.UnconnectedBoundaries.md +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.PolySurface.UnconnectedBoundaries.md @@ -1,7 +1,9 @@ ## In Depth -UnconnectedBoundaries will return PolyCurves that represent open boundaries. In the example below, an extruded hexagon returns it's top and bottom boundaries as PolyCurves since they are unconnected. -___ -## Example File +`PolySurface.UnconnectedBoundaries` returns PolyCurves that represent open boundaries. +In the example below, `PolySurface.UnconnectedBoundaries` returns the top and bottom boundaries of an extruded hexagon as PolyCurves since they are unconnected. +___ +## Example File +![PolySurface.UnconnectedBoundaries](./Autodesk.DesignScript.Geometry.PolySurface.UnconnectedBoundaries_img.jpg) \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.PolySurface.UnconnectedBoundaries_img.jpg b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.PolySurface.UnconnectedBoundaries_img.jpg new file mode 100644 index 00000000000..14d3fec3055 Binary files /dev/null and b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.PolySurface.UnconnectedBoundaries_img.jpg differ diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Polygon.ByPoints.md b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Polygon.ByPoints.md index d5be3cc90ff..cbcae55887c 100644 --- a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Polygon.ByPoints.md +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Polygon.ByPoints.md @@ -1,5 +1,8 @@ ## In Depth -Revit will generate and contour a mesh from a list of supplied points. The points cannot be collinear. +`Polygon.ByPoints` creates a polygon from a list of input points. The points will be connected in the order of the list they originate from. + +In the example below, we create a list of random points driven by a number slider. We then use a `Polygon.ByPoints` node to connect the points with lines. + ___ ## Example File diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Solid.Area.md b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Solid.Area.md index 9f61a08f26d..eaca00ed931 100644 --- a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Solid.Area.md +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Solid.Area.md @@ -1,5 +1,8 @@ ## In Depth -Room area is returned as a double. +`Solid.Area` returns the surface area of a given solid. + +In the example below, we start with a cube and then chamfer the edges to produce a new solid. We use `Solid.Area` to find the total area of all the surfaces of this solid. + ___ ## Example File diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Solid.ByLoft(crossSections).md b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Solid.ByLoft(crossSections).md index 2ebb05491a6..d5308b24c1d 100644 --- a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Solid.ByLoft(crossSections).md +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Solid.ByLoft(crossSections).md @@ -1,5 +1,8 @@ ## In Depth -Surface ByLoft with cross sections takes a list of curves as an input. It will produce a surface by lofting between the list of curves in order. In the example below we create two curves, a line and a sine curve. We use List.Create to combine these two curves into a list, which we use as an input for Surface ByLoft. The result is a surface that is lofted between a sine curve on one side, and a line on the other. +`Solid.ByLoft (crossSections)` takes a list of closed curves as an input. It produces a solid by lofting between items on the list of curves in order. + +In the example below, we start with a circle. We then produce a series of translated circles based on a sine curve. This list of curves is used as the input for `Solid.ByLoft`. + ___ ## Example File diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Solid.ByLoft(crossSections, guideCurves).md b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Solid.ByLoft(crossSections, guideCurves).md index fbaf054a501..15611630e95 100644 --- a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Solid.ByLoft(crossSections, guideCurves).md +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Solid.ByLoft(crossSections, guideCurves).md @@ -1,5 +1,8 @@ ## In Depth -Surface by Loft with cross sections and guide curves takes a list of cross sections to loft between, and a separate list of guide curves to determine the profile of the loft. In the example below, we use two straight lines as the input cross sections. For the guide curves, we create one sine curve and one straight line. A number slider controls the distance between the sine curve and the straight line. The resulting loft interpolates between the sine curve and the straight line. +`Solid.ByLoft (crossSections, guideCurves)` allows us to input a list of guide curves to produce different profiles along the perimeter of a lofted solid. + +In the example below, we use two offset rectangles as the `crossSections`. Two different guide curves are generated around the perimeter, one based on a cosine function, and the other a simple line. + ___ ## Example File diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Solid.ByRevolve.md b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Solid.ByRevolve.md index ff6f905b1c7..b281ff7e949 100644 --- a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Solid.ByRevolve.md +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Solid.ByRevolve.md @@ -1,5 +1,8 @@ ## In Depth -Surface by Revolve creates a surface by rotating a given profile curve around an axis. The axis is defined by an axisOrigin point, and an axisDirection vector. The start angle determines where to begin the surface, measured in degrees, and the sweepAngle determines how far around the axis to continue the surface. In the example below, we use a curve generated with a cosine function as the profile curve, and two number sliders to control the startAngle and sweepAngle. The axisOrigin and axisDirection are left at the default values of the world origin and world z-axis for this example +`Solid.ByRevolve` creates a surface by rotating a given profile curve around an axis. The axis is defined by an `axisOrigin` point and an `axisDirection` vector. The start angle determines where to begin the surface, measured in degrees, and the `sweepAngle` determines how far around the axis to continue the surface. + +In the example below, we use a curve generated with a cosine function as the profile curve, and two number sliders to control the `startAngle` and `sweepAngle`. The `axisOrigin` and `axisDirection` are left at the default values of the world origin and world z-axis for this example. + ___ ## Example File diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Solid.BySweep(profile, path, cutEndOff).dyn b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Solid.BySweep(profile, path, cutEndOff).dyn new file mode 100644 index 00000000000..1bdbe0f864d --- /dev/null +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Solid.BySweep(profile, path, cutEndOff).dyn @@ -0,0 +1,492 @@ +{ + "Uuid": "598c2fe6-2426-457d-941b-200902fd9cbb", + "IsCustomNode": false, + "Description": "", + "Name": "Autodesk.DesignScript.Geometry.Solid.BySweep", + "ElementResolver": { + "ResolutionMap": { + "Autodesk.DesignScript.Geometry.Vector": { + "Key": "Autodesk.DesignScript.Geometry.Vector", + "Value": "ProtoGeometry.dll" + } + } + }, + "Inputs": [], + "Outputs": [], + "Nodes": [ + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "b240c0b2541842068e44e4d341ae9d3b", + "NodeType": "CodeBlockNode", + "Inputs": [], + "Outputs": [ + { + "Id": "7c2f43991277455cbbf630ee04bb588b", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "0..180..36;" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "74ec12cb76ce453c8105e2d059cdaaf2", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "fa4668ce31f9480f83571bb5f48e6800", + "Name": "x", + "Description": "X coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "1bb1bd77ea0c402bbe95de46e572a39e", + "Name": "y", + "Description": "Y coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "b9dcd432fd33407f910aff5a7cd73712", + "Name": "z", + "Description": "Z coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "139820281e354451b1780f3ed6fb4957", + "Name": "Point", + "Description": "Point created by coordinates", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Point.ByCoordinates@double,double,double", + "Replication": "Auto", + "Description": "Form a Point given 3 cartesian coordinates\n\nPoint.ByCoordinates (x: double = 0, y: double = 0, z: double = 0): Point" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "9803ce0ab39c4c9e8b5b943c5910736c", + "NodeType": "CodeBlockNode", + "Inputs": [], + "Outputs": [ + { + "Id": "abcec8c74f104f7c8c95773a05c292e7", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "0..5..1;" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "fec23ce640b440749239963ec699544e", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "7b34655f33214ec9849facb8c72ac246", + "Name": "angle", + "Description": "Angle in degrees to take the cosine of.\n\ndouble", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "9fbe7925df404d5db35b44281af986f3", + "Name": "double", + "Description": "Cosine of the angle", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Math.Cos@double", + "Replication": "Auto", + "Description": "Finds the cosine of an angle.\n\nMath.Cos (angle: double): double" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "5e98c00419d74de990fb16007d8ca46c", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "6ab33bc64fcb43be9bf9d2bb6f219a30", + "Name": "points", + "Description": "Points for nurbs curve\n\nPoint[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "862bd534fe454769ba202522ba2812d8", + "Name": "NurbsCurve", + "Description": "Nurbscurve created from points", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.NurbsCurve.ByPoints@Autodesk.DesignScript.Geometry.Point[]", + "Replication": "Auto", + "Description": "Create a BSplineCurve by interpolating between points.\n\nNurbsCurve.ByPoints (points: Point[]): NurbsCurve" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "f49b582c13a74dc0a194b1627677c28e", + "NodeType": "CodeBlockNode", + "Inputs": [ + { + "Id": "56030561156d4c7eba19248ed27a887c", + "Name": "x", + "Description": "x", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "9609531868e442ccb21f655f4f15fe85", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "x-2;" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "ddbf22de8fa2432caf7dec8d1e762ec3", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "f3bcfa9e53e94fc792f4ca0a7cb90186", + "Name": "width", + "Description": "Width of rectangle\n\ndouble\nDefault value : 1", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "b09751c2f07d4352bb4a5bd53f01a618", + "Name": "length", + "Description": "Length of rectangle\n\ndouble\nDefault value : 1", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "cdbf1bcf76f04fc082498f20203fffc3", + "Name": "Rectangle", + "Description": "Rectangle created by width and length", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Rectangle.ByWidthLength@double,double", + "Replication": "Auto", + "Description": "Create a Rectangle centered at the WCS origin in the WCS XY Plane, with specified width (X Axis length), and length (Y Axis length).\n\nRectangle.ByWidthLength (width: double = 1, length: double = 1): Rectangle" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "15f537a2164c4abc83934a4831ca84b8", + "NodeType": "CodeBlockNode", + "Inputs": [], + "Outputs": [ + { + "Id": "ec27fb06413b48fdb931d07025510762", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "2;" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "eab75881686641cc9dfc439d9da2ceeb", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "2480c6d0d9c2465a9a1de31ae20b8a86", + "Name": "profile", + "Description": "A closed curve that will be the profile of the sweep\n\nCurve", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "1141d67a4681404cb1056c019d81216e", + "Name": "path", + "Description": "The path that represent the sweep path\n\nCurve", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "b17d365201774b7783b02bf23beab3b1", + "Name": "cutEndOff", + "Description": "Cut the end of the sweep and make it normal to the path\n\nbool\nDefault value : false", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "f1ff5c0d9a76477690ad00cb39ff8be6", + "Name": "Solid", + "Description": "A solid by sweeping the profile curve along a path", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Solid.BySweep@Autodesk.DesignScript.Geometry.Curve,Autodesk.DesignScript.Geometry.Curve,bool", + "Replication": "Auto", + "Description": "Sweep a closed Curve along a path.\n\nSolid.BySweep (profile: Curve, path: Curve, cutEndOff: bool = false): Solid" + } + ], + "Connectors": [ + { + "Start": "7c2f43991277455cbbf630ee04bb588b", + "End": "7b34655f33214ec9849facb8c72ac246", + "Id": "a08468a387704b48b9ba5b4736eee183", + "IsHidden": "False" + }, + { + "Start": "139820281e354451b1780f3ed6fb4957", + "End": "6ab33bc64fcb43be9bf9d2bb6f219a30", + "Id": "9572195016f14576b5290c207cc3d5e8", + "IsHidden": "False" + }, + { + "Start": "abcec8c74f104f7c8c95773a05c292e7", + "End": "b9dcd432fd33407f910aff5a7cd73712", + "Id": "99d12453600f49e18ecf448e0c99b2a6", + "IsHidden": "False" + }, + { + "Start": "9fbe7925df404d5db35b44281af986f3", + "End": "56030561156d4c7eba19248ed27a887c", + "Id": "b4ff8c3fb6944b8b931d99821eff7322", + "IsHidden": "False" + }, + { + "Start": "862bd534fe454769ba202522ba2812d8", + "End": "1141d67a4681404cb1056c019d81216e", + "Id": "fd49ac2e9e764f8bab349b25ac8ec261", + "IsHidden": "False" + }, + { + "Start": "9609531868e442ccb21f655f4f15fe85", + "End": "fa4668ce31f9480f83571bb5f48e6800", + "Id": "3f966b966a2e43bcb7e19f9c162e214e", + "IsHidden": "False" + }, + { + "Start": "cdbf1bcf76f04fc082498f20203fffc3", + "End": "2480c6d0d9c2465a9a1de31ae20b8a86", + "Id": "3df19b96641f4caaac23916383a46f10", + "IsHidden": "False" + }, + { + "Start": "ec27fb06413b48fdb931d07025510762", + "End": "f3bcfa9e53e94fc792f4ca0a7cb90186", + "Id": "ccd1caf77d3d40a3a02b975df8e02161", + "IsHidden": "False" + } + ], + "Dependencies": [], + "NodeLibraryDependencies": [], + "Thumbnail": "", + "GraphDocumentationURL": null, + "ExtensionWorkspaceData": [ + { + "ExtensionGuid": "28992e1d-abb9-417f-8b1b-05e053bee670", + "Name": "Properties", + "Version": "2.19", + "Data": {} + } + ], + "Author": "None provided", + "Linting": { + "activeLinter": "None", + "activeLinterId": "7b75fb44-43fd-4631-a878-29f4d5d8399a", + "warningCount": 0, + "errorCount": 0 + }, + "Bindings": [], + "View": { + "Dynamo": { + "ScaleFactor": 1.0, + "HasRunWithoutCrash": true, + "IsVisibleInDynamoLibrary": true, + "Version": "2.19.4.6632", + "RunType": "Automatic", + "RunPeriod": "1000" + }, + "Camera": { + "Name": "_Background Preview", + "EyeX": -10.677200317382813, + "EyeY": 5.7709708213806152, + "EyeZ": 7.5597376823425293, + "LookX": 10.980081558227539, + "LookY": -0.21393844485282898, + "LookZ": -8.58186149597168, + "UpX": -0.15708129107952118, + "UpY": 0.97992467880249023, + "UpZ": 0.12277230620384216 + }, + "ConnectorPins": [], + "NodeViews": [ + { + "Id": "b240c0b2541842068e44e4d341ae9d3b", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -1016.363565111724, + "Y": 186.55819007606192 + }, + { + "Id": "74ec12cb76ce453c8105e2d059cdaaf2", + "Name": "Point.ByCoordinates", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -188.36356511172403, + "Y": 226.90319007606195 + }, + { + "Id": "9803ce0ab39c4c9e8b5b943c5910736c", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -442.36356511172403, + "Y": 334.73069007606193 + }, + { + "Id": "fec23ce640b440749239963ec699544e", + "Name": "Math.Cos", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -745.363565111724, + "Y": 186.73069007606193 + }, + { + "Id": "5e98c00419d74de990fb16007d8ca46c", + "Name": "NurbsCurve.ByPoints", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 136.63643488827597, + "Y": 226.90319007606195 + }, + { + "Id": "f49b582c13a74dc0a194b1627677c28e", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -442.36356511172403, + "Y": 186.73069007606193 + }, + { + "Id": "ddbf22de8fa2432caf7dec8d1e762ec3", + "Name": "Rectangle.ByWidthLength", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 136.63643488827597, + "Y": 48.903190076061946 + }, + { + "Id": "15f537a2164c4abc83934a4831ca84b8", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -188.36356511172403, + "Y": 48.730690076061933 + }, + { + "Id": "eab75881686641cc9dfc439d9da2ceeb", + "Name": "Solid.BySweep", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 509.82191967437552, + "Y": 57.112976387281265 + } + ], + "Annotations": [], + "X": 818.13151240417938, + "Y": 98.485606357878567, + "Zoom": 0.68483242074758288 + } +} \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Solid.BySweep(profile, path, cutEndOff).md b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Solid.BySweep(profile, path, cutEndOff).md new file mode 100644 index 00000000000..cce4acd2e95 --- /dev/null +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Solid.BySweep(profile, path, cutEndOff).md @@ -0,0 +1,8 @@ +## In Depth +`Solid.BySweep` creates a solid by sweeping an input closed profile curve along a specified path. + +In the example below, we use a rectangle as the base profile curve. The path is created by using a cosine function with a sequence of angles to vary the x-coordinates of a set of points. The points are used as the input to a `NurbsCurve.ByPoints` node. We then create a solid by sweeping the rectangle along the created cosine curve. +___ +## Example File + +![Solid.BySweep](./Autodesk.DesignScript.Geometry.Solid.BySweep(profile,%20path,%20cutEndOff)_img.jpg) \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Solid.BySweep(profile, path, cutEndOff)_img.jpg b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Solid.BySweep(profile, path, cutEndOff)_img.jpg new file mode 100644 index 00000000000..2c386f7988a Binary files /dev/null and b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Solid.BySweep(profile, path, cutEndOff)_img.jpg differ diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Solid.BySweep2Rails.md b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Solid.BySweep2Rails.md index e302fa5b11f..029d11d8c42 100644 --- a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Solid.BySweep2Rails.md +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Solid.BySweep2Rails.md @@ -1,5 +1,8 @@ ## In Depth -Surface by Sweep 2 Rails takes an input curve and uses two guide curves to sweep the profile curve along. In the example below, we use a half-circle as the input profile. We create two diverging lines to use as the rail curves for a BySweep2Rails node. The result is a surface with a half-circle profile that grows as the arc moves along the diverging lines. +`Solid.BySweep2Rails` returns a new solid from a curve profile swept along two curve rails. + +In the example below, a new solid is returned from sweeping a circle along two arcs as rails. Switching the arc inputs in `path` and `guideRail` will change which arc the sweep is perpendicular to. + ___ ## Example File diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Surface.Area.md b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Surface.Area.md index a460c53f97f..3e779c62890 100644 --- a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Surface.Area.md +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Surface.Area.md @@ -1,5 +1,8 @@ ## In Depth -Room area is returned as a double. +`Surface.Area` returns the area of a given surface. + +In the example below, we create a surface by filling in a NurbsCurve. We then use `Surface.Area` to find the total area of this surface. + ___ ## Example File diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Surface.ByLoft(crossSections, guideCurves).dyn b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Surface.ByLoft(crossSections, guideCurves).dyn new file mode 100644 index 00000000000..1c582850c75 --- /dev/null +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Surface.ByLoft(crossSections, guideCurves).dyn @@ -0,0 +1,904 @@ +{ + "Uuid": "1a95efd8-9b4d-4d46-8062-58c33543aa41", + "IsCustomNode": false, + "Description": "", + "Name": "Autodesk.DesignScript.Geometry.Surface.ByLoft", + "ElementResolver": { + "ResolutionMap": { + "Math": { + "Key": "DSCore.Math", + "Value": "DSCoreNodes.dll" + }, + "Point": { + "Key": "Autodesk.DesignScript.Geometry.Point", + "Value": "ProtoGeometry.dll" + } + } + }, + "Inputs": [ + { + "Id": "551c02cd02f2489d8ee299a953523fdc", + "Name": "Number Slider", + "Type": "number", + "Type2": "number", + "Value": "2.9", + "MaximumValue": 100.0, + "MinimumValue": 0.0, + "StepValue": 0.1, + "NumberType": "Double", + "Description": "Produces numeric values", + "SelectedIndex": 0 + }, + { + "Id": "f4ab7d87f0994bee846928b36cc5e65a", + "Name": "Number Slider", + "Type": "number", + "Type2": "number", + "Value": "5.9", + "MaximumValue": 10.0, + "MinimumValue": 0.0, + "StepValue": 0.1, + "NumberType": "Double", + "Description": "Produces numeric values", + "SelectedIndex": 0 + } + ], + "Outputs": [], + "Nodes": [ + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "6f860554040d4f1d92215b4793174c61", + "NodeType": "CodeBlockNode", + "Inputs": [], + "Outputs": [ + { + "Id": "d4c759b9ebc147d0b68f6056377c3614", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "0..10..1;" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "e7e34ff533f1474eaba02b85dc4a5db2", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "2b8ac9911c1f4c90bcf519c505b25394", + "Name": "x", + "Description": "X coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "c69b031ea8584076918679c80fa5e109", + "Name": "y", + "Description": "Y coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "8871d3da23a4494dbfc48352d740b5af", + "Name": "z", + "Description": "Z coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "8530a99d3f8f4f758edfaaf70cdfa676", + "Name": "Point", + "Description": "Point created by coordinates", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Point.ByCoordinates@double,double,double", + "Replication": "Auto", + "Description": "Form a Point given 3 cartesian coordinates\n\nPoint.ByCoordinates (x: double = 0, y: double = 0, z: double = 0): Point" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "66ebc58d24a14e37ba4ffba2cd5bd2f2", + "NodeType": "CodeBlockNode", + "Inputs": [], + "Outputs": [ + { + "Id": "594e7d785738494e97748ebbbe540483", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "0..360..36;" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "23d02c95b5ae4f80a908c1ba53ee60ca", + "NodeType": "CodeBlockNode", + "Inputs": [ + { + "Id": "08e2632346114c8082224fdc9ab29bb5", + "Name": "a", + "Description": "a", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "d52bc593ae6b4efaa8f20cbe12e985b7", + "Name": "x", + "Description": "x", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "d27dd588722c4bcab59de225bf0a7df7", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "a*Math.Sin(x);" + }, + { + "ConcreteType": "CoreNodeModels.Input.DoubleSlider, CoreNodeModels", + "NumberType": "Double", + "MaximumValue": 100.0, + "MinimumValue": 0.0, + "StepValue": 0.1, + "Id": "551c02cd02f2489d8ee299a953523fdc", + "NodeType": "NumberInputNode", + "Inputs": [], + "Outputs": [ + { + "Id": "261f54d1a8394e4c82a87bb201bf0c20", + "Name": "", + "Description": "Double", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Produces numeric values", + "InputValue": 2.9 + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "c4eac7b3bbc84efebedf7b25343dabbd", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "963e68777e5948a8b91cab273b069abf", + "Name": "points", + "Description": "Points for nurbs curve\n\nPoint[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "9818ff680c2541589f396355cdae13f3", + "Name": "NurbsCurve", + "Description": "Nurbscurve created from points", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.NurbsCurve.ByPoints@Autodesk.DesignScript.Geometry.Point[]", + "Replication": "Auto", + "Description": "Create a BSplineCurve by interpolating between points.\n\nNurbsCurve.ByPoints (points: Point[]): NurbsCurve" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "99ed6956869f4bafbd492921381ff6e6", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "1fba7a7cf4cf4aeaae918ee8e804ddb3", + "Name": "startPoint", + "Description": "Line start point\n\nPoint", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "fd5e882ee82f47a08d3601129205ca86", + "Name": "endPoint", + "Description": "Line end point\n\nPoint", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "f74beda5f04645ac939dd4c3686ca250", + "Name": "Line", + "Description": "Line from start and end point", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Line.ByStartPointEndPoint@Autodesk.DesignScript.Geometry.Point,Autodesk.DesignScript.Geometry.Point", + "Replication": "Auto", + "Description": "Creates a straight Line between two input Points.\n\nLine.ByStartPointEndPoint (startPoint: Point, endPoint: Point): Line" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "5e828b5f5b944133addc9f813be740e0", + "NodeType": "CodeBlockNode", + "Inputs": [], + "Outputs": [ + { + "Id": "1c4641dc65c1467a8bd0eaede5f5bc54", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "95b789fa47b2448a9fefa63687f4c32e", + "Name": "", + "Description": "Value of expression at line 2", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "Point.ByCoordinates(0, 10, 0);\nPoint.ByCoordinates(10, 10, 0);" + }, + { + "ConcreteType": "CoreNodeModels.CreateList, CoreNodeModels", + "VariableInputPorts": true, + "Id": "9089cd8f9cc74a2789f009a955917c8d", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "6e7d357b98984e6ea571a1cb6e7f1b80", + "Name": "item0", + "Description": "Item Index #0", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "06648fdb6bf44d4eb8be2d9bab5d0eda", + "Name": "item1", + "Description": "Item Index #1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "fe2e88b36be34ad9b2efd40c2998e1e8", + "Name": "list", + "Description": "A list (type: var[]..[])", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Makes a new list from the given inputs" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "370f74cf91044a8596a16e26db637ef7", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "0f7801eec49f4e17912317cc76a464dd", + "Name": "startPoint", + "Description": "Line start point\n\nPoint", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "2d57914daebe48dbba4ccc436973fc29", + "Name": "endPoint", + "Description": "Line end point\n\nPoint", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "0c000719819a4041a87dbfd0d653a526", + "Name": "Line", + "Description": "Line from start and end point", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Line.ByStartPointEndPoint@Autodesk.DesignScript.Geometry.Point,Autodesk.DesignScript.Geometry.Point", + "Replication": "Auto", + "Description": "Creates a straight Line between two input Points.\n\nLine.ByStartPointEndPoint (startPoint: Point, endPoint: Point): Line" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "9412092622074a988e7ea1578fe51ec6", + "NodeType": "CodeBlockNode", + "Inputs": [], + "Outputs": [ + { + "Id": "5bf32d1e442341c4a94b3bc4fe789a7a", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "11f067a5e59d4b429bc329f17dda7642", + "Name": "", + "Description": "Value of expression at line 2", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "Point.ByCoordinates(0, 0, 0);\nPoint.ByCoordinates(10, 0, 0);" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "78a01b00b1e049e6b300bbd9c02e28e8", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "42cc93af4d5f4da0a6aa467907dd1f5f", + "Name": "crossSections", + "Description": "Curves to loft through\n\nCurve[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "fedca907015740ec99c97c94b714debc", + "Name": "guideCurves", + "Description": "Curve[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "d9de9c321a8246638f237f12fc114cf9", + "Name": "Surface", + "Description": "Surface created by loft", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Surface.ByLoft@Autodesk.DesignScript.Geometry.Curve[],Autodesk.DesignScript.Geometry.Curve[]", + "Replication": "Auto", + "Description": "Create a Surface by lofting between input cross section Curves.\n\nSurface.ByLoft (crossSections: Curve[], guideCurves: Curve[]): Surface" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "4101d4bc40fa4340965ff1558b10b656", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "0a7295010cf84b0692cd8ef07a0112a6", + "Name": "startPoint", + "Description": "Line start point\n\nPoint", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "620fed5a0ce94040bba7a14db6bf7e9c", + "Name": "endPoint", + "Description": "Line end point\n\nPoint", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "ee3a04a49ddf4e3ab81ec8691e123f60", + "Name": "Line", + "Description": "Line from start and end point", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Line.ByStartPointEndPoint@Autodesk.DesignScript.Geometry.Point,Autodesk.DesignScript.Geometry.Point", + "Replication": "Auto", + "Description": "Creates a straight Line between two input Points.\n\nLine.ByStartPointEndPoint (startPoint: Point, endPoint: Point): Line" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "7aa3242ffda043ba884032423c92d8dc", + "NodeType": "CodeBlockNode", + "Inputs": [ + { + "Id": "2f356d855b534065818b543165faa544", + "Name": "a", + "Description": "a", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "54e685d454cb4edeac067aacf136cf4a", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "bb234aaf006f4506a8d7d0e3f4660ac0", + "Name": "", + "Description": "Value of expression at line 2", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "Point.ByCoordinates(a, 0, 0);\nPoint.ByCoordinates(a, 10, 0);" + }, + { + "ConcreteType": "CoreNodeModels.CreateList, CoreNodeModels", + "VariableInputPorts": true, + "Id": "a37c4b43eaa74db69011f0694febe89e", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "51beb7ba4ca648789cb26c6586805a78", + "Name": "item0", + "Description": "Item Index #0", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "1ca159147e1e45938e52a6489f9810a9", + "Name": "item1", + "Description": "Item Index #1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "ec89b15315c04d198e0538549840fbf6", + "Name": "list", + "Description": "A list (type: var[]..[])", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Makes a new list from the given inputs" + }, + { + "ConcreteType": "CoreNodeModels.Input.DoubleSlider, CoreNodeModels", + "NumberType": "Double", + "MaximumValue": 10.0, + "MinimumValue": 0.0, + "StepValue": 0.1, + "Id": "f4ab7d87f0994bee846928b36cc5e65a", + "NodeType": "NumberInputNode", + "Inputs": [], + "Outputs": [ + { + "Id": "7812fbd8cbbc44c59d2795bde9a1eae2", + "Name": "", + "Description": "Double", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Produces numeric values", + "InputValue": 5.9 + } + ], + "Connectors": [ + { + "Start": "d4c759b9ebc147d0b68f6056377c3614", + "End": "c69b031ea8584076918679c80fa5e109", + "Id": "ab505d9d528e4f349872b0fcbf6fcd8b", + "IsHidden": "False" + }, + { + "Start": "8530a99d3f8f4f758edfaaf70cdfa676", + "End": "963e68777e5948a8b91cab273b069abf", + "Id": "d5d6085e412e479f8d18659d58325107", + "IsHidden": "False" + }, + { + "Start": "594e7d785738494e97748ebbbe540483", + "End": "d52bc593ae6b4efaa8f20cbe12e985b7", + "Id": "696c5980d4024e92b5e75b5b9292c289", + "IsHidden": "False" + }, + { + "Start": "d27dd588722c4bcab59de225bf0a7df7", + "End": "8871d3da23a4494dbfc48352d740b5af", + "Id": "fdfc50a796954233b11377f221005152", + "IsHidden": "False" + }, + { + "Start": "261f54d1a8394e4c82a87bb201bf0c20", + "End": "08e2632346114c8082224fdc9ab29bb5", + "Id": "516ab621d5944e5f86c7998d6d072f46", + "IsHidden": "False" + }, + { + "Start": "9818ff680c2541589f396355cdae13f3", + "End": "1ca159147e1e45938e52a6489f9810a9", + "Id": "e359aeba9ac44e3caabcd21eb300ab20", + "IsHidden": "False" + }, + { + "Start": "f74beda5f04645ac939dd4c3686ca250", + "End": "6e7d357b98984e6ea571a1cb6e7f1b80", + "Id": "6fb0a8e9816e404db9c4a9e5ad692454", + "IsHidden": "False" + }, + { + "Start": "1c4641dc65c1467a8bd0eaede5f5bc54", + "End": "1fba7a7cf4cf4aeaae918ee8e804ddb3", + "Id": "64e2f32abafe430f876a237b30e34402", + "IsHidden": "False" + }, + { + "Start": "95b789fa47b2448a9fefa63687f4c32e", + "End": "fd5e882ee82f47a08d3601129205ca86", + "Id": "1737aacf2c904560940d333e6a618946", + "IsHidden": "False" + }, + { + "Start": "fe2e88b36be34ad9b2efd40c2998e1e8", + "End": "42cc93af4d5f4da0a6aa467907dd1f5f", + "Id": "b89caa040cca482b9a90581d79922ae8", + "IsHidden": "False" + }, + { + "Start": "0c000719819a4041a87dbfd0d653a526", + "End": "06648fdb6bf44d4eb8be2d9bab5d0eda", + "Id": "a92c075e51b94c81a6ed7827bb834c18", + "IsHidden": "False" + }, + { + "Start": "5bf32d1e442341c4a94b3bc4fe789a7a", + "End": "0f7801eec49f4e17912317cc76a464dd", + "Id": "fa3ffdb0acee469ea3cb358008d6b7ad", + "IsHidden": "False" + }, + { + "Start": "11f067a5e59d4b429bc329f17dda7642", + "End": "2d57914daebe48dbba4ccc436973fc29", + "Id": "8be3ae36d59d48b7b4723bcd2f6cecd8", + "IsHidden": "False" + }, + { + "Start": "ee3a04a49ddf4e3ab81ec8691e123f60", + "End": "51beb7ba4ca648789cb26c6586805a78", + "Id": "ebcc13a70a6c4a52be1bcf6cdc60980d", + "IsHidden": "False" + }, + { + "Start": "54e685d454cb4edeac067aacf136cf4a", + "End": "0a7295010cf84b0692cd8ef07a0112a6", + "Id": "44cf8c2ed20b4f7ca865389864628f16", + "IsHidden": "False" + }, + { + "Start": "bb234aaf006f4506a8d7d0e3f4660ac0", + "End": "620fed5a0ce94040bba7a14db6bf7e9c", + "Id": "ddaf98ac8d3a475c93137bf9d027a956", + "IsHidden": "False" + }, + { + "Start": "ec89b15315c04d198e0538549840fbf6", + "End": "fedca907015740ec99c97c94b714debc", + "Id": "4ecce1c165ed4da3afc1e1a6e9d71421", + "IsHidden": "False" + }, + { + "Start": "7812fbd8cbbc44c59d2795bde9a1eae2", + "End": "2f356d855b534065818b543165faa544", + "Id": "f1a7baabc3974c71b8e2111950a82a5a", + "IsHidden": "False" + } + ], + "Dependencies": [], + "NodeLibraryDependencies": [], + "Thumbnail": "", + "GraphDocumentationURL": null, + "ExtensionWorkspaceData": [ + { + "ExtensionGuid": "28992e1d-abb9-417f-8b1b-05e053bee670", + "Name": "Properties", + "Version": "2.19", + "Data": {} + } + ], + "Author": "None provided", + "Linting": { + "activeLinter": "None", + "activeLinterId": "7b75fb44-43fd-4631-a878-29f4d5d8399a", + "warningCount": 0, + "errorCount": 0 + }, + "Bindings": [], + "View": { + "Dynamo": { + "ScaleFactor": 1.0, + "HasRunWithoutCrash": true, + "IsVisibleInDynamoLibrary": true, + "Version": "2.19.4.6632", + "RunType": "Automatic", + "RunPeriod": "1000" + }, + "Camera": { + "Name": "_Background Preview", + "EyeX": -17.110317230224609, + "EyeY": 10.710041046142578, + "EyeZ": 8.3238821029663086, + "LookX": 16.732326507568359, + "LookY": -4.6189045906066895, + "LookZ": -21.657403945922852, + "UpX": -0.029865782707929611, + "UpY": 0.99880611896514893, + "UpZ": 0.038656629621982574 + }, + "ConnectorPins": [], + "NodeViews": [ + { + "Id": "6f860554040d4f1d92215b4793174c61", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -170.09728324938442, + "Y": 312.31791865093749 + }, + { + "Id": "e7e34ff533f1474eaba02b85dc4a5db2", + "Name": "Point.ByCoordinates", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": false, + "X": 277.90271675061558, + "Y": 335.4904186509375 + }, + { + "Id": "66ebc58d24a14e37ba4ffba2cd5bd2f2", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -618.09728324938442, + "Y": 551.14541865093747 + }, + { + "Id": "23d02c95b5ae4f80a908c1ba53ee60ca", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -170.09728324938442, + "Y": 460.3179186509376 + }, + { + "Id": "551c02cd02f2489d8ee299a953523fdc", + "Name": "Number Slider", + "IsSetAsInput": true, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -618.09728324938442, + "Y": 403.3179186509376 + }, + { + "Id": "c4eac7b3bbc84efebedf7b25343dabbd", + "Name": "NurbsCurve.ByPoints", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 725.90271675061558, + "Y": 334.4904186509375 + }, + { + "Id": "99ed6956869f4bafbd492921381ff6e6", + "Name": "Line.ByStartPointEndPoint", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 725.90271675061558, + "Y": -197.50958134906247 + }, + { + "Id": "5e828b5f5b944133addc9f813be740e0", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": false, + "X": 277.90271675061558, + "Y": -188.85458134906244 + }, + { + "Id": "9089cd8f9cc74a2789f009a955917c8d", + "Name": "List.Create", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1096.9027167506156, + "Y": -37.509581349062472 + }, + { + "Id": "370f74cf91044a8596a16e26db637ef7", + "Name": "Line.ByStartPointEndPoint", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 725.90271675061558, + "Y": -20.509581349062472 + }, + { + "Id": "9412092622074a988e7ea1578fe51ec6", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": false, + "X": 277.90271675061558, + "Y": -11.8545813490625 + }, + { + "Id": "78a01b00b1e049e6b300bbd9c02e28e8", + "Name": "Surface.ByLoft", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1356.9027167506156, + "Y": 34.490418650937528 + }, + { + "Id": "4101d4bc40fa4340965ff1558b10b656", + "Name": "Line.ByStartPointEndPoint", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 725.90271675061558, + "Y": 157.49041865093753 + }, + { + "Id": "7aa3242ffda043ba884032423c92d8dc", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": false, + "X": 277.90271675061558, + "Y": 165.1454186509375 + }, + { + "Id": "a37c4b43eaa74db69011f0694febe89e", + "Name": "List.Create", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1096.9027167506156, + "Y": 140.49041865093753 + }, + { + "Id": "f4ab7d87f0994bee846928b36cc5e65a", + "Name": "Number Slider", + "IsSetAsInput": true, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -170.09728324938442, + "Y": 165.1454186509375 + } + ], + "Annotations": [], + "X": 410.3531956566851, + "Y": 171.152389631812, + "Zoom": 0.52486542792448354 + } +} \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Surface.ByLoft(crossSections, guideCurves).md b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Surface.ByLoft(crossSections, guideCurves).md index 6df7c2328af..352eb57cb31 100644 --- a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Surface.ByLoft(crossSections, guideCurves).md +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Surface.ByLoft(crossSections, guideCurves).md @@ -1,7 +1,9 @@ ## In Depth -Surface by Loft with cross sections and guide curves takes a list of cross sections to loft between, and a separate list of guide curves to determine the profile of the loft. In the example below, we use two straight lines as the input cross sections. For the guide curves, we create one sine curve and one straight line. A number slider controls the distance between the sine curve and the straight line. The resulting loft interpolates between the sine curve and the straight line. -___ -## Example File +`Surface.ByLoft (crossSections, guideCurves)` takes a list of cross sections to loft between, and a separate list of guide curves to determine the profile of the loft. +In the example below, we use two straight lines as the input cross sections. For the guide curves, we create one sine curve and one straight line. A number slider controls the distance between the sine curve and the straight line. The resulting loft interpolates between the sine curve and the straight line. +___ +## Example File +![Surface.ByLoft](./Autodesk.DesignScript.Geometry.Surface.ByLoft(crossSections,%20guideCurves)_img.jpg) \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Surface.ByLoft(crossSections, guideCurves)_img.jpg b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Surface.ByLoft(crossSections, guideCurves)_img.jpg new file mode 100644 index 00000000000..7ef975da318 Binary files /dev/null and b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Surface.ByLoft(crossSections, guideCurves)_img.jpg differ diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Surface.BySweep(profile, path, cutEndOff).dyn b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Surface.BySweep(profile, path, cutEndOff).dyn new file mode 100644 index 00000000000..e6f5fb3f9d7 --- /dev/null +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Surface.BySweep(profile, path, cutEndOff).dyn @@ -0,0 +1,546 @@ +{ + "Uuid": "adebc203-078f-4e62-9938-2edda8d244ee", + "IsCustomNode": false, + "Description": "", + "Name": "Autodesk.DesignScript.Geometry.Surface.BySweep", + "ElementResolver": { + "ResolutionMap": { + "Math": { + "Key": "DSCore.Math", + "Value": "DSCoreNodes.dll" + }, + "Point": { + "Key": "Autodesk.DesignScript.Geometry.Point", + "Value": "ProtoGeometry.dll" + } + } + }, + "Inputs": [], + "Outputs": [], + "Nodes": [ + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "e165226a11b348d0ada633517a0ea2ab", + "NodeType": "CodeBlockNode", + "Inputs": [], + "Outputs": [ + { + "Id": "27e8e9bd809047eeb117072d9735fbaf", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "0..10..1;" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "cb378d260fb64cbb8aa954233ce749ee", + "NodeType": "CodeBlockNode", + "Inputs": [], + "Outputs": [ + { + "Id": "8c85891f98b7446db7a9907a670c59cf", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "0..360..36;" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "1daa3dffaa2a4f46b68ac7a49bd23eea", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "55e9a55fb7f2467ea21cef2da0caa53b", + "Name": "angle", + "Description": "Angle in degrees to take the sine of.\n\ndouble", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "dc2cfbde44b3495f911b83526e7f513f", + "Name": "double", + "Description": "Sine of the angle.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Math.Sin@double", + "Replication": "Auto", + "Description": "Finds the sine of an angle.\n\nMath.Sin (angle: double): double" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "016ddadbd94a4469abb650e0b8ffa2b1", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "d34c4a8b00a543a8ba8fda0738a232b3", + "Name": "x", + "Description": "X coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "26af34ebcbf44284a70a8cd1d14963ad", + "Name": "y", + "Description": "Y coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "116ae947b29c4537aaf1419470648b9b", + "Name": "z", + "Description": "Z coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "301e2cf3bf6e4c4fbc68d7813b517d8e", + "Name": "Point", + "Description": "Point created by coordinates", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Point.ByCoordinates@double,double,double", + "Replication": "Auto", + "Description": "Form a Point given 3 cartesian coordinates\n\nPoint.ByCoordinates (x: double = 0, y: double = 0, z: double = 0): Point" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "ffaa060cba4045c586c1f0cc9b809c30", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "6ad1a21eee8d41049bb3b24bde538f3a", + "Name": "points", + "Description": "Points for nurbs curve\n\nPoint[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "dcc52cbd8d7c44fc9dea039521e500e1", + "Name": "NurbsCurve", + "Description": "Nurbscurve created from points", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.NurbsCurve.ByPoints@Autodesk.DesignScript.Geometry.Point[]", + "Replication": "Auto", + "Description": "Create a BSplineCurve by interpolating between points.\n\nNurbsCurve.ByPoints (points: Point[]): NurbsCurve" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "e7a7f6b0e654436080a8b9bb653e2a8f", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "4a82678308904173ae1f34f8682da2e4", + "Name": "geometry", + "Description": "Autodesk.DesignScript.Geometry.Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "747a9ba1908641409563d747632089ab", + "Name": "origin", + "Description": "Point", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "ded356198bf944b59ef664340dfe3f31", + "Name": "axis", + "Description": "Vector", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "5dd9c3c373864baba0ed3cf5db60f556", + "Name": "degrees", + "Description": "double\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "30125b4a0362448a8df32f40f7aa7810", + "Name": "Geometry", + "Description": "Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Geometry.Rotate@Autodesk.DesignScript.Geometry.Point,Autodesk.DesignScript.Geometry.Vector,double", + "Replication": "Auto", + "Description": "Rotates an object around an origin and an axis by a specified degree\n\nGeometry.Rotate (origin: Point, axis: Vector, degrees: double = 0): Geometry" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "af76b1ce20684422bacff094c96f3a9f", + "NodeType": "CodeBlockNode", + "Inputs": [], + "Outputs": [ + { + "Id": "669a0c529c48448f8dabb0cd59e5347f", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "-90;" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "3335ba36cda641f5b9cc578c4f427375", + "NodeType": "FunctionNode", + "Inputs": [], + "Outputs": [ + { + "Id": "4aaafac64c4e45c7b2f8c05665a39c6c", + "Name": "Point", + "Description": "Origin point", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Point.Origin", + "Replication": "Auto", + "Description": "Get the Origin point (0,0,0)\n\nPoint.Origin ( ): Point" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "1e5f5ae90ee64b37b4e9a09428dadc9e", + "NodeType": "FunctionNode", + "Inputs": [], + "Outputs": [ + { + "Id": "95afe843791c47828f132d074d7797d6", + "Name": "Vector", + "Description": "Vector", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Vector.ZAxis", + "Replication": "Auto", + "Description": "Get the canonical Z axis Vector (0,0,1)\n\nVector.ZAxis ( ): Vector" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "dba36c740beb4342bbfd33c62a89461b", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "aa386a592db74e5fa20ec5222c5e4ca3", + "Name": "profile", + "Description": "Curve to sweep\n\nCurve", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "48863d185d0a452aab748743d22d09e1", + "Name": "path", + "Description": "Path curve used to sweep along\n\nCurve", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "76e7682e263e431ebb588acc59602b60", + "Name": "cutEndOff", + "Description": "Cut the end of the sweep and make it normal to the path\n\nbool\nDefault value : false", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "23829cad5f414292b93ac92af773c711", + "Name": "Surface", + "Description": "Surface created by sweeping profile along path", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Surface.BySweep@Autodesk.DesignScript.Geometry.Curve,Autodesk.DesignScript.Geometry.Curve,bool", + "Replication": "Auto", + "Description": "Create a Surface by sweeping a profile Curve along a path.\n\nSurface.BySweep (profile: Curve, path: Curve, cutEndOff: bool = false): Surface" + } + ], + "Connectors": [ + { + "Start": "27e8e9bd809047eeb117072d9735fbaf", + "End": "26af34ebcbf44284a70a8cd1d14963ad", + "Id": "59eef013af794bd09a73ca87981e2588", + "IsHidden": "False" + }, + { + "Start": "8c85891f98b7446db7a9907a670c59cf", + "End": "55e9a55fb7f2467ea21cef2da0caa53b", + "Id": "62038d07282c446a9db35403990912b0", + "IsHidden": "False" + }, + { + "Start": "dc2cfbde44b3495f911b83526e7f513f", + "End": "116ae947b29c4537aaf1419470648b9b", + "Id": "06cc9335645d46ba936d838a2ae2bc1d", + "IsHidden": "False" + }, + { + "Start": "301e2cf3bf6e4c4fbc68d7813b517d8e", + "End": "6ad1a21eee8d41049bb3b24bde538f3a", + "Id": "d622e075b687407899642f77e6a50b07", + "IsHidden": "False" + }, + { + "Start": "dcc52cbd8d7c44fc9dea039521e500e1", + "End": "4a82678308904173ae1f34f8682da2e4", + "Id": "b1e89e329767445c8e8346c954a3206b", + "IsHidden": "False" + }, + { + "Start": "dcc52cbd8d7c44fc9dea039521e500e1", + "End": "aa386a592db74e5fa20ec5222c5e4ca3", + "Id": "2b3ed20a6da643fca920cd31bda2cb80", + "IsHidden": "False" + }, + { + "Start": "30125b4a0362448a8df32f40f7aa7810", + "End": "48863d185d0a452aab748743d22d09e1", + "Id": "e359c52560784e8fbdbf0f6680aa96ae", + "IsHidden": "False" + }, + { + "Start": "669a0c529c48448f8dabb0cd59e5347f", + "End": "5dd9c3c373864baba0ed3cf5db60f556", + "Id": "4d21b1e24b4947caa6c7bb35e52a8db3", + "IsHidden": "False" + }, + { + "Start": "4aaafac64c4e45c7b2f8c05665a39c6c", + "End": "747a9ba1908641409563d747632089ab", + "Id": "e46c558396fd4836bcb523cfcba31776", + "IsHidden": "False" + }, + { + "Start": "95afe843791c47828f132d074d7797d6", + "End": "ded356198bf944b59ef664340dfe3f31", + "Id": "7a7d2c49af9b46cc8bbf5dbbf82e890f", + "IsHidden": "False" + } + ], + "Dependencies": [], + "NodeLibraryDependencies": [], + "Thumbnail": "", + "GraphDocumentationURL": null, + "ExtensionWorkspaceData": [ + { + "ExtensionGuid": "28992e1d-abb9-417f-8b1b-05e053bee670", + "Name": "Properties", + "Version": "2.19", + "Data": {} + } + ], + "Author": "None provided", + "Linting": { + "activeLinter": "None", + "activeLinterId": "7b75fb44-43fd-4631-a878-29f4d5d8399a", + "warningCount": 0, + "errorCount": 0 + }, + "Bindings": [], + "View": { + "Dynamo": { + "ScaleFactor": 1.0, + "HasRunWithoutCrash": true, + "IsVisibleInDynamoLibrary": true, + "Version": "2.19.4.6632", + "RunType": "Automatic", + "RunPeriod": "1000" + }, + "Camera": { + "Name": "_Background Preview", + "EyeX": -12.151876449584961, + "EyeY": 10.257155418395996, + "EyeZ": 4.30262565612793, + "LookX": 16.018514633178711, + "LookY": -5.6682891845703125, + "LookZ": -8.9196844100952148, + "UpX": 0.073107823729515076, + "UpY": 0.996492862701416, + "UpZ": -0.040709063410758972 + }, + "ConnectorPins": [], + "NodeViews": [ + { + "Id": "e165226a11b348d0ada633517a0ea2ab", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -32.770273301801126, + "Y": -166.01259982636884 + }, + { + "Id": "cb378d260fb64cbb8aa954233ce749ee", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -303.77027330180113, + "Y": -18.012599826368813 + }, + { + "Id": "1daa3dffaa2a4f46b68ac7a49bd23eea", + "Name": "Math.Sin", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -32.770273301801126, + "Y": -17.840099826368828 + }, + { + "Id": "016ddadbd94a4469abb650e0b8ffa2b1", + "Name": "Point.ByCoordinates", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 270.22972669819887, + "Y": -142.84009982636883 + }, + { + "Id": "ffaa060cba4045c586c1f0cc9b809c30", + "Name": "NurbsCurve.ByPoints", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 595.22972669819887, + "Y": -142.84009982636883 + }, + { + "Id": "e7a7f6b0e654436080a8b9bb653e2a8f", + "Name": "Geometry.Rotate", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 930.22972669819887, + "Y": 31.159900173631172 + }, + { + "Id": "af76b1ce20684422bacff094c96f3a9f", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 595.22972669819887, + "Y": 298.98740017363122 + }, + { + "Id": "3335ba36cda641f5b9cc578c4f427375", + "Name": "Point.Origin", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 595.22972669819887, + "Y": 4.159900173631172 + }, + { + "Id": "1e5f5ae90ee64b37b4e9a09428dadc9e", + "Name": "Vector.ZAxis", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 595.22972669819887, + "Y": 151.15990017363117 + }, + { + "Id": "dba36c740beb4342bbfd33c62a89461b", + "Name": "Surface.BySweep", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1263.7028101069766, + "Y": -25.783407418411684 + } + ], + "Annotations": [], + "X": 246.6123195350774, + "Y": 410.41720037883647, + "Zoom": 0.62740812659763423 + } +} \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Surface.BySweep(profile, path, cutEndOff).md b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Surface.BySweep(profile, path, cutEndOff).md new file mode 100644 index 00000000000..661d715bd13 --- /dev/null +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Surface.BySweep(profile, path, cutEndOff).md @@ -0,0 +1,10 @@ +## In Depth +`Surface.BySweep (profile, path, cutEndOff)` creates a surface by sweeping an input curve along a specified path. The `cutEndOff` input controls whether to cut the end of the sweep and make it normal to the path. + +In the example below, we use a sine curve in the y-direction as the profile curve. We rotate this curve by -90 degrees around the world z-axis to use as a path curve. Surface BySweep moves the profile curve along the path curve creating a surface. + + +___ +## Example File + +![Surface.BySweep](./Autodesk.DesignScript.Geometry.Surface.BySweep(profile,%20path,%20cutEndOff)_img.jpg) \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Surface.BySweep(profile, path, cutEndOff)_img.jpg b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Surface.BySweep(profile, path, cutEndOff)_img.jpg new file mode 100644 index 00000000000..cf338e35dbc Binary files /dev/null and b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Surface.BySweep(profile, path, cutEndOff)_img.jpg differ diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Surface.Thicken(surface, thickness).dyn b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Surface.Thicken(surface, thickness).dyn new file mode 100644 index 00000000000..c208bcb9e12 --- /dev/null +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Surface.Thicken(surface, thickness).dyn @@ -0,0 +1,582 @@ +{ + "Uuid": "4cadb0ed-635c-44ed-b83e-bb9642d9601e", + "IsCustomNode": false, + "Description": "", + "Name": "Autodesk.DesignScript.Geometry.Surface.Thicken", + "ElementResolver": { + "ResolutionMap": { + "Math": { + "Key": "DSCore.Math", + "Value": "DSCoreNodes.dll" + }, + "Point": { + "Key": "Autodesk.DesignScript.Geometry.Point", + "Value": "ProtoGeometry.dll" + } + } + }, + "Inputs": [ + { + "Id": "9b8d8a483fc244cc869903e0298f7c79", + "Name": "Number Slider", + "Type": "number", + "Type2": "number", + "Value": "0.8", + "MaximumValue": 20.0, + "MinimumValue": 0.0, + "StepValue": 0.1, + "NumberType": "Double", + "Description": "Produces numeric values", + "SelectedIndex": 0 + } + ], + "Outputs": [], + "Nodes": [ + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "46f950b5fe6145b8b18e8376297a4add", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "23643f2fb52d47e7a1802214bae0a5e2", + "Name": "path", + "Description": "The input path to sweep along.\n\nCurve", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "c2fed4d4ae8348e987029affd1e590b9", + "Name": "guideRail", + "Description": "A rail to guide the orientation of the sweep.\n\nCurve", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "f6d2430732944b38aa904a6c7e3827f7", + "Name": "profile", + "Description": "The profile curve to sweep along the path.\n\nCurve", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "f40f4141953e417d99c879c9fd972ce9", + "Name": "Surface", + "Description": "Surface created by sweeping two rails", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Surface.BySweep2Rails@Autodesk.DesignScript.Geometry.Curve,Autodesk.DesignScript.Geometry.Curve,Autodesk.DesignScript.Geometry.Curve", + "Replication": "Auto", + "Description": "Sweep the cross section curve along a path guided by a two rails\n\nSurface.BySweep2Rails (path: Curve, guideRail: Curve, profile: Curve): Surface" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "c602bcf62d04417780faf5ab8d1c8754", + "NodeType": "CodeBlockNode", + "Inputs": [], + "Outputs": [ + { + "Id": "18a3c1ef337a46e3b48eb577eaf4bb2b", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "4fa39a2ba5344769898e406d18247e04", + "Name": "", + "Description": "Value of expression at line 2", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "Point.ByCoordinates(0,1,0);\nPoint.ByCoordinates(10,6,0);" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "465066644bdc4ad8b381cdb43bef4659", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "d20c3425065a49b7949403fc27d24dd7", + "Name": "startPoint", + "Description": "Line start point\n\nPoint", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "095aa4fcc1294a4894c3f53b9b27e704", + "Name": "endPoint", + "Description": "Line end point\n\nPoint", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "ee6f82ec6fea4132b197751367f012c3", + "Name": "Line", + "Description": "Line from start and end point", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Line.ByStartPointEndPoint@Autodesk.DesignScript.Geometry.Point,Autodesk.DesignScript.Geometry.Point", + "Replication": "Auto", + "Description": "Creates a straight Line between two input Points.\n\nLine.ByStartPointEndPoint (startPoint: Point, endPoint: Point): Line" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "47bf6e834e034077a11820b48f2fd328", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "1c102cdf6ee5424d90b0a8726f3dcfc5", + "Name": "startPoint", + "Description": "Line start point\n\nPoint", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "0033296a528e47bbb6361295f9a257a6", + "Name": "endPoint", + "Description": "Line end point\n\nPoint", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "79487042973e437495fa93c6921b519e", + "Name": "Line", + "Description": "Line from start and end point", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Line.ByStartPointEndPoint@Autodesk.DesignScript.Geometry.Point,Autodesk.DesignScript.Geometry.Point", + "Replication": "Auto", + "Description": "Creates a straight Line between two input Points.\n\nLine.ByStartPointEndPoint (startPoint: Point, endPoint: Point): Line" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "472340e7974847ec8f7dd34f399ab060", + "NodeType": "CodeBlockNode", + "Inputs": [], + "Outputs": [ + { + "Id": "2102d649d2da4cb2963b2dc448a04c74", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "82c27e9da7c84301a816dbd95c8c3f73", + "Name": "", + "Description": "Value of expression at line 2", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "Point.ByCoordinates(0,-1,0);\nPoint.ByCoordinates(10,-1,0);" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "8071412212ac46f9856121fd80444f1c", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "d7601527c1c94240bd059a01b60862fa", + "Name": "firstPoint", + "Description": "1st point of arc\n\nPoint", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "c8be23c7687c4c219bdf6bc5ea258f60", + "Name": "secondPoint", + "Description": "2nd point of arc\n\nPoint", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "51cdbff78aaa4e30a9f4412cb5b43eb7", + "Name": "thirdPoint", + "Description": "3rd point of arc\n\nPoint", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "1e2d52d0abd94a8e90b9ca1518b73c09", + "Name": "Arc", + "Description": "Arc created from three points", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Arc.ByThreePoints@Autodesk.DesignScript.Geometry.Point,Autodesk.DesignScript.Geometry.Point,Autodesk.DesignScript.Geometry.Point", + "Replication": "Auto", + "Description": "Create an arc by providing three sequential points along its circumference.\n\nArc.ByThreePoints (firstPoint: Point, secondPoint: Point, thirdPoint: Point): Arc" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "ee8b86682e4d4a35bbe3af2667838194", + "NodeType": "CodeBlockNode", + "Inputs": [], + "Outputs": [ + { + "Id": "1da36deb96364d7a9ab07a764c4b799d", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "8e6dc679451b45568eaabff72d89f6a6", + "Name": "", + "Description": "Value of expression at line 2", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "4d5f77ef90424b118792821e77ce221f", + "Name": "", + "Description": "Value of expression at line 3", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "Point.ByCoordinates(0,-1,0);\nPoint.ByCoordinates(0,0,1);\nPoint.ByCoordinates(0,1,0);" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "0c6b81740bc24e55a4ea6e82f5a877c1", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "57693d85f262470982f4d5d7cc52b302", + "Name": "surface", + "Description": "Autodesk.DesignScript.Geometry.Surface", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "61543a55614f4c4e80502de355d55644", + "Name": "thickness", + "Description": "Amount to thicken\n\ndouble\nDefault value : 1", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "249f43528931434d9ea95d0227ce29d5", + "Name": "Solid", + "Description": "Thickened surface as solid", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Surface.Thicken@double", + "Replication": "Auto", + "Description": "Thicken Surface into a Solid, extruding in the direction of Surface normals on both sides of the Surface.\n\nSurface.Thicken (thickness: double = 1): Solid" + }, + { + "ConcreteType": "CoreNodeModels.Input.DoubleSlider, CoreNodeModels", + "NumberType": "Double", + "MaximumValue": 20.0, + "MinimumValue": 0.0, + "StepValue": 0.1, + "Id": "9b8d8a483fc244cc869903e0298f7c79", + "NodeType": "NumberInputNode", + "Inputs": [], + "Outputs": [ + { + "Id": "6ffaf0673a234eca90a6813868da119f", + "Name": "", + "Description": "Double", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Produces numeric values", + "InputValue": 0.8 + } + ], + "Connectors": [ + { + "Start": "f40f4141953e417d99c879c9fd972ce9", + "End": "57693d85f262470982f4d5d7cc52b302", + "Id": "9e51575eecc34496a64894a9593644c0", + "IsHidden": "False" + }, + { + "Start": "18a3c1ef337a46e3b48eb577eaf4bb2b", + "End": "d20c3425065a49b7949403fc27d24dd7", + "Id": "f9ed649192fe4a588b7ac5f01d4601a2", + "IsHidden": "False" + }, + { + "Start": "4fa39a2ba5344769898e406d18247e04", + "End": "095aa4fcc1294a4894c3f53b9b27e704", + "Id": "99297dd41daf4ef28f67bdcc0279e54c", + "IsHidden": "False" + }, + { + "Start": "ee6f82ec6fea4132b197751367f012c3", + "End": "c2fed4d4ae8348e987029affd1e590b9", + "Id": "b480761a39d3480ea2d570cc495a2eb4", + "IsHidden": "False" + }, + { + "Start": "79487042973e437495fa93c6921b519e", + "End": "23643f2fb52d47e7a1802214bae0a5e2", + "Id": "ec92295d3c7a47169ea88df73f0a411b", + "IsHidden": "False" + }, + { + "Start": "2102d649d2da4cb2963b2dc448a04c74", + "End": "1c102cdf6ee5424d90b0a8726f3dcfc5", + "Id": "deeeae543ed4439484395502846f8935", + "IsHidden": "False" + }, + { + "Start": "82c27e9da7c84301a816dbd95c8c3f73", + "End": "0033296a528e47bbb6361295f9a257a6", + "Id": "cf8ee4ab1a9d42f3b30b7ac706136fcb", + "IsHidden": "False" + }, + { + "Start": "1e2d52d0abd94a8e90b9ca1518b73c09", + "End": "f6d2430732944b38aa904a6c7e3827f7", + "Id": "5201857263cd419f98a6cb0d9faab284", + "IsHidden": "False" + }, + { + "Start": "1da36deb96364d7a9ab07a764c4b799d", + "End": "d7601527c1c94240bd059a01b60862fa", + "Id": "1c6db565ea6a466cb4d54336a2050f4b", + "IsHidden": "False" + }, + { + "Start": "8e6dc679451b45568eaabff72d89f6a6", + "End": "c8be23c7687c4c219bdf6bc5ea258f60", + "Id": "d317afeb396e484b9b2a044d7cabd902", + "IsHidden": "False" + }, + { + "Start": "4d5f77ef90424b118792821e77ce221f", + "End": "51cdbff78aaa4e30a9f4412cb5b43eb7", + "Id": "b51b41d7498e4085ad5860ff72059232", + "IsHidden": "False" + }, + { + "Start": "6ffaf0673a234eca90a6813868da119f", + "End": "61543a55614f4c4e80502de355d55644", + "Id": "a7e73532fe3e435eaf7a5d24b09ff292", + "IsHidden": "False" + } + ], + "Dependencies": [], + "NodeLibraryDependencies": [], + "Thumbnail": "", + "GraphDocumentationURL": null, + "ExtensionWorkspaceData": [ + { + "ExtensionGuid": "28992e1d-abb9-417f-8b1b-05e053bee670", + "Name": "Properties", + "Version": "2.19", + "Data": {} + } + ], + "Author": "None provided", + "Linting": { + "activeLinter": "None", + "activeLinterId": "7b75fb44-43fd-4631-a878-29f4d5d8399a", + "warningCount": 0, + "errorCount": 0 + }, + "Bindings": [], + "View": { + "Dynamo": { + "ScaleFactor": 1.0, + "HasRunWithoutCrash": true, + "IsVisibleInDynamoLibrary": true, + "Version": "2.19.4.6632", + "RunType": "Automatic", + "RunPeriod": "1000" + }, + "Camera": { + "Name": "_Background Preview", + "EyeX": -12.151876449584961, + "EyeY": 10.257155418395996, + "EyeZ": 4.30262565612793, + "LookX": 16.018514633178711, + "LookY": -5.6682891845703125, + "LookZ": -8.9196844100952148, + "UpX": 0.073107823729515076, + "UpY": 0.996492862701416, + "UpZ": -0.040709063410758972 + }, + "ConnectorPins": [], + "NodeViews": [ + { + "Id": "46f950b5fe6145b8b18e8376297a4add", + "Name": "Surface.BySweep2Rails", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 616.06536709016132, + "Y": -9.73849970432562 + }, + { + "Id": "c602bcf62d04417780faf5ab8d1c8754", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -165.93463290983868, + "Y": 32.916500295674382 + }, + { + "Id": "465066644bdc4ad8b381cdb43bef4659", + "Name": "Line.ByStartPointEndPoint", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 245.06536709016132, + "Y": 24.261500295674381 + }, + { + "Id": "47bf6e834e034077a11820b48f2fd328", + "Name": "Line.ByStartPointEndPoint", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 245.06536709016132, + "Y": -152.73849970432562 + }, + { + "Id": "472340e7974847ec8f7dd34f399ab060", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -165.93463290983868, + "Y": -144.08349970432559 + }, + { + "Id": "8071412212ac46f9856121fd80444f1c", + "Name": "Arc.ByThreePoints", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 245.06536709016132, + "Y": 201.26150029567438 + }, + { + "Id": "ee8b86682e4d4a35bbe3af2667838194", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -165.93463290983868, + "Y": 218.7440002956744 + }, + { + "Id": "0c6b81740bc24e55a4ea6e82f5a877c1", + "Name": "Surface.Thicken", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1064.0653670901613, + "Y": 79.261500295674381 + }, + { + "Id": "9b8d8a483fc244cc869903e0298f7c79", + "Name": "Number Slider", + "IsSetAsInput": true, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 616.06536709016132, + "Y": 202.26150029567438 + } + ], + "Annotations": [], + "X": 144.48276377952061, + "Y": 274.18425344347753, + "Zoom": 0.62740812659763423 + } +} \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Surface.Thicken(surface, thickness).md b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Surface.Thicken(surface, thickness).md new file mode 100644 index 00000000000..2d8760b0b92 --- /dev/null +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Surface.Thicken(surface, thickness).md @@ -0,0 +1,10 @@ +## In Depth +`Surface.Thicken` creates a solid by offsetting a surface according to the thickness input, capping the ends to close the solid. + +In the example below, we first create a surface by using a `Surface.BySweep2Rails`. We then create a solid by using a number slider to determine the thickness input of a `Surface.Thicken` node. + + +___ +## Example File + +![Surface.Thicken](./Autodesk.DesignScript.Geometry.Surface.Thicken(surface,%20thickness)_img.jpg) \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Surface.Thicken(surface, thickness)_img.jpg b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Surface.Thicken(surface, thickness)_img.jpg new file mode 100644 index 00000000000..820353c76f3 Binary files /dev/null and b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Surface.Thicken(surface, thickness)_img.jpg differ diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Surface.Thicken(surface, thickness, both_sides).dyn b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Surface.Thicken(surface, thickness, both_sides).dyn new file mode 100644 index 00000000000..2b187d6f706 --- /dev/null +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Surface.Thicken(surface, thickness, both_sides).dyn @@ -0,0 +1,636 @@ +{ + "Uuid": "33bd972a-0d56-4b8b-beaf-78f68f1458eb", + "IsCustomNode": false, + "Description": "", + "Name": "Autodesk.DesignScript.Geometry.Surface.Thicken", + "ElementResolver": { + "ResolutionMap": { + "Math": { + "Key": "DSCore.Math", + "Value": "DSCoreNodes.dll" + }, + "Point": { + "Key": "Autodesk.DesignScript.Geometry.Point", + "Value": "ProtoGeometry.dll" + } + } + }, + "Inputs": [ + { + "Id": "6b938f6412874a88a9f9cbce39b4659e", + "Name": "Number Slider", + "Type": "number", + "Type2": "number", + "Value": "0.8", + "MaximumValue": 20.0, + "MinimumValue": 0.0, + "StepValue": 0.1, + "NumberType": "Double", + "Description": "Produces numeric values", + "SelectedIndex": 0 + }, + { + "Id": "6c13743477774b739a2d4c15c7f2485e", + "Name": "Boolean", + "Type": "boolean", + "Type2": "boolean", + "Value": "true", + "Description": "Enables selection between True and False", + "SelectedIndex": 0 + } + ], + "Outputs": [], + "Nodes": [ + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "0b37921be50f4b44b9acf040806751a6", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "774f754ef974414e8215798920bffe98", + "Name": "path", + "Description": "The input path to sweep along.\n\nCurve", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "9f6d0e1602c04a00a57c9911dc392df5", + "Name": "guideRail", + "Description": "A rail to guide the orientation of the sweep.\n\nCurve", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "1646f3d541044e07b4aa2dde28381dc4", + "Name": "profile", + "Description": "The profile curve to sweep along the path.\n\nCurve", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "2a40c877769c488e833ffd8f2f3ce333", + "Name": "Surface", + "Description": "Surface created by sweeping two rails", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Surface.BySweep2Rails@Autodesk.DesignScript.Geometry.Curve,Autodesk.DesignScript.Geometry.Curve,Autodesk.DesignScript.Geometry.Curve", + "Replication": "Auto", + "Description": "Sweep the cross section curve along a path guided by a two rails\n\nSurface.BySweep2Rails (path: Curve, guideRail: Curve, profile: Curve): Surface" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "e45204ff0fd847c38e917d1786e7ae00", + "NodeType": "CodeBlockNode", + "Inputs": [], + "Outputs": [ + { + "Id": "ad2494e7e88748f0b74cec91f3384ee2", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "de7bd5c3c84e4a18a46abd8d4cb40ff4", + "Name": "", + "Description": "Value of expression at line 2", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "Point.ByCoordinates(0,1,0);\nPoint.ByCoordinates(10,6,0);" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "6f2ecab363e24aeb817f0a03f8ccb990", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "55b1414f0e2d4d09b72acb43b4e9b0dc", + "Name": "startPoint", + "Description": "Line start point\n\nPoint", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "6ebfe84fa5aa4ebab92303ef01099567", + "Name": "endPoint", + "Description": "Line end point\n\nPoint", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "a377bc54e32a43dab3463ad369da2303", + "Name": "Line", + "Description": "Line from start and end point", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Line.ByStartPointEndPoint@Autodesk.DesignScript.Geometry.Point,Autodesk.DesignScript.Geometry.Point", + "Replication": "Auto", + "Description": "Creates a straight Line between two input Points.\n\nLine.ByStartPointEndPoint (startPoint: Point, endPoint: Point): Line" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "7a69c3d67aa84f42b750d03bdbd33027", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "89bb47379bc44287ab2114d957ca68ff", + "Name": "startPoint", + "Description": "Line start point\n\nPoint", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "daa6031d17974499b44652e8ed79e9b6", + "Name": "endPoint", + "Description": "Line end point\n\nPoint", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "b491462085e844e0a23cd02875b955c6", + "Name": "Line", + "Description": "Line from start and end point", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Line.ByStartPointEndPoint@Autodesk.DesignScript.Geometry.Point,Autodesk.DesignScript.Geometry.Point", + "Replication": "Auto", + "Description": "Creates a straight Line between two input Points.\n\nLine.ByStartPointEndPoint (startPoint: Point, endPoint: Point): Line" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "a1b10149239f4fab843c567cc89b3f77", + "NodeType": "CodeBlockNode", + "Inputs": [], + "Outputs": [ + { + "Id": "e7b29d194ef5443c8db865bc9f6728ff", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "ec1e9fc4b914448f90f362b0db189115", + "Name": "", + "Description": "Value of expression at line 2", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "Point.ByCoordinates(0,-1,0);\nPoint.ByCoordinates(10,-1,0);" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "0577b79ffb894a06999e1c9eb5586e36", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "deee18ba534c48e7af1195ab305f5597", + "Name": "firstPoint", + "Description": "1st point of arc\n\nPoint", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "ed2c9dd8651e444887465990ba2d9b41", + "Name": "secondPoint", + "Description": "2nd point of arc\n\nPoint", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "6971e0a94f2d4c678ed1d9472332db05", + "Name": "thirdPoint", + "Description": "3rd point of arc\n\nPoint", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "b873c08aee344e30af98f599c0216ee8", + "Name": "Arc", + "Description": "Arc created from three points", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Arc.ByThreePoints@Autodesk.DesignScript.Geometry.Point,Autodesk.DesignScript.Geometry.Point,Autodesk.DesignScript.Geometry.Point", + "Replication": "Auto", + "Description": "Create an arc by providing three sequential points along its circumference.\n\nArc.ByThreePoints (firstPoint: Point, secondPoint: Point, thirdPoint: Point): Arc" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "9672236780264b6f977b885b5511fe95", + "NodeType": "CodeBlockNode", + "Inputs": [], + "Outputs": [ + { + "Id": "8142e26075ac4f51a215408705ba9453", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "f88331d2eed3498e9eb0328beeea460c", + "Name": "", + "Description": "Value of expression at line 2", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "94543f4a30c74691a855efbb16fa3023", + "Name": "", + "Description": "Value of expression at line 3", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "Point.ByCoordinates(0,-1,0);\nPoint.ByCoordinates(0,0,1);\nPoint.ByCoordinates(0,1,0);" + }, + { + "ConcreteType": "CoreNodeModels.Input.DoubleSlider, CoreNodeModels", + "NumberType": "Double", + "MaximumValue": 20.0, + "MinimumValue": 0.0, + "StepValue": 0.1, + "Id": "6b938f6412874a88a9f9cbce39b4659e", + "NodeType": "NumberInputNode", + "Inputs": [], + "Outputs": [ + { + "Id": "e6d8ec96f76e4ec6b4ec24b4afaa1080", + "Name": "", + "Description": "Double", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Produces numeric values", + "InputValue": 0.8 + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "df916e36aa08400cb18713f2e3f38ab9", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "e825ea2586f3448e8260344fc830aa79", + "Name": "surface", + "Description": "Autodesk.DesignScript.Geometry.Surface", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "8e4d387ba06f4565a91e7d7d3f34d89d", + "Name": "thickness", + "Description": "Amount to thicken\n\ndouble\nDefault value : 1", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "93e1ec717e7946a0b185706395291c03", + "Name": "both_sides", + "Description": "True to thicken on both sides, false to thicken on one side\n\nbool\nDefault value : true", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "1bb97561ff354232931cefbec08aee9d", + "Name": "Solid", + "Description": "Thickened surface as solid", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Surface.Thicken@double,bool", + "Replication": "Auto", + "Description": "Thicken Surface into a Solid, extruding in the direction of Surface normals. If both_sides parameter is true, surface is thickened on both sides.\n\nSurface.Thicken (thickness: double = 1, both_sides: bool = true): Solid" + }, + { + "ConcreteType": "CoreNodeModels.Input.BoolSelector, CoreNodeModels", + "Id": "6c13743477774b739a2d4c15c7f2485e", + "NodeType": "BooleanInputNode", + "Inputs": [], + "Outputs": [ + { + "Id": "eac8f8382e204a138c0ad6f770b9ee58", + "Name": "", + "Description": "Boolean", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Enables selection between True and False", + "InputValue": true + } + ], + "Connectors": [ + { + "Start": "2a40c877769c488e833ffd8f2f3ce333", + "End": "e825ea2586f3448e8260344fc830aa79", + "Id": "a8fe20c6dbf64976b66b95e687cc908c", + "IsHidden": "False" + }, + { + "Start": "ad2494e7e88748f0b74cec91f3384ee2", + "End": "55b1414f0e2d4d09b72acb43b4e9b0dc", + "Id": "a6985f13c09d4b7c9f21958d900753b6", + "IsHidden": "False" + }, + { + "Start": "de7bd5c3c84e4a18a46abd8d4cb40ff4", + "End": "6ebfe84fa5aa4ebab92303ef01099567", + "Id": "1ea14680920d4f23956d856f8a5e198b", + "IsHidden": "False" + }, + { + "Start": "a377bc54e32a43dab3463ad369da2303", + "End": "9f6d0e1602c04a00a57c9911dc392df5", + "Id": "7879bbd64f4b4dd08d5a870925ea1a73", + "IsHidden": "False" + }, + { + "Start": "b491462085e844e0a23cd02875b955c6", + "End": "774f754ef974414e8215798920bffe98", + "Id": "9a6303341c474059b6cfc2cfb4c3e5a3", + "IsHidden": "False" + }, + { + "Start": "e7b29d194ef5443c8db865bc9f6728ff", + "End": "89bb47379bc44287ab2114d957ca68ff", + "Id": "d1b1ee199347491dabf6cea4f75090e2", + "IsHidden": "False" + }, + { + "Start": "ec1e9fc4b914448f90f362b0db189115", + "End": "daa6031d17974499b44652e8ed79e9b6", + "Id": "027894ac62284bdc9145c9c171cf3c76", + "IsHidden": "False" + }, + { + "Start": "b873c08aee344e30af98f599c0216ee8", + "End": "1646f3d541044e07b4aa2dde28381dc4", + "Id": "3b26e6b5cc4a4fd3bf7cef9d531cd018", + "IsHidden": "False" + }, + { + "Start": "8142e26075ac4f51a215408705ba9453", + "End": "deee18ba534c48e7af1195ab305f5597", + "Id": "52ba2a0ebea5495da7303399683ce95b", + "IsHidden": "False" + }, + { + "Start": "f88331d2eed3498e9eb0328beeea460c", + "End": "ed2c9dd8651e444887465990ba2d9b41", + "Id": "b232ec8ea5cf4095921e336a831f8a16", + "IsHidden": "False" + }, + { + "Start": "94543f4a30c74691a855efbb16fa3023", + "End": "6971e0a94f2d4c678ed1d9472332db05", + "Id": "08f7732899ec4b6a96cb76da5dca4cb7", + "IsHidden": "False" + }, + { + "Start": "e6d8ec96f76e4ec6b4ec24b4afaa1080", + "End": "8e4d387ba06f4565a91e7d7d3f34d89d", + "Id": "8299d9e32afc408fb9ab871449895372", + "IsHidden": "False" + }, + { + "Start": "eac8f8382e204a138c0ad6f770b9ee58", + "End": "93e1ec717e7946a0b185706395291c03", + "Id": "b3cf61dcb1da490c9a08d31a030ce31b", + "IsHidden": "False" + } + ], + "Dependencies": [], + "NodeLibraryDependencies": [], + "Thumbnail": "", + "GraphDocumentationURL": null, + "ExtensionWorkspaceData": [ + { + "ExtensionGuid": "28992e1d-abb9-417f-8b1b-05e053bee670", + "Name": "Properties", + "Version": "2.19", + "Data": {} + } + ], + "Author": "None provided", + "Linting": { + "activeLinter": "None", + "activeLinterId": "7b75fb44-43fd-4631-a878-29f4d5d8399a", + "warningCount": 0, + "errorCount": 0 + }, + "Bindings": [], + "View": { + "Dynamo": { + "ScaleFactor": 1.0, + "HasRunWithoutCrash": true, + "IsVisibleInDynamoLibrary": true, + "Version": "2.19.4.6632", + "RunType": "Automatic", + "RunPeriod": "1000" + }, + "Camera": { + "Name": "_Background Preview", + "EyeX": -12.151876449584961, + "EyeY": 10.257155418395996, + "EyeZ": 4.30262565612793, + "LookX": 16.018514633178711, + "LookY": -5.6682891845703125, + "LookZ": -8.9196844100952148, + "UpX": 0.073107823729515076, + "UpY": 0.996492862701416, + "UpZ": -0.040709063410758972 + }, + "ConnectorPins": [], + "NodeViews": [ + { + "Id": "0b37921be50f4b44b9acf040806751a6", + "Name": "Surface.BySweep2Rails", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 616.06536709016132, + "Y": -51.738499704325619 + }, + { + "Id": "e45204ff0fd847c38e917d1786e7ae00", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -165.93463290983868, + "Y": -9.083499704325618 + }, + { + "Id": "6f2ecab363e24aeb817f0a03f8ccb990", + "Name": "Line.ByStartPointEndPoint", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 245.06536709016132, + "Y": -17.738499704325619 + }, + { + "Id": "7a69c3d67aa84f42b750d03bdbd33027", + "Name": "Line.ByStartPointEndPoint", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 245.06536709016132, + "Y": -194.73849970432562 + }, + { + "Id": "a1b10149239f4fab843c567cc89b3f77", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -165.93463290983868, + "Y": -186.08349970432559 + }, + { + "Id": "0577b79ffb894a06999e1c9eb5586e36", + "Name": "Arc.ByThreePoints", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 245.06536709016132, + "Y": 159.26150029567438 + }, + { + "Id": "9672236780264b6f977b885b5511fe95", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -165.93463290983868, + "Y": 176.7440002956744 + }, + { + "Id": "6b938f6412874a88a9f9cbce39b4659e", + "Name": "Number Slider", + "IsSetAsInput": true, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 616.06536709016132, + "Y": 161.26150029567438 + }, + { + "Id": "df916e36aa08400cb18713f2e3f38ab9", + "Name": "Surface.Thicken", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1064.0653670901613, + "Y": 105.26150029567438 + }, + { + "Id": "6c13743477774b739a2d4c15c7f2485e", + "Name": "Boolean", + "IsSetAsInput": true, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 616.06536709016132, + "Y": 308.26150029567441 + } + ], + "Annotations": [], + "X": 236.82282238548305, + "Y": 186.70255741877492, + "Zoom": 0.8476185719982261 + } +} \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Surface.Thicken(surface, thickness, both_sides).md b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Surface.Thicken(surface, thickness, both_sides).md new file mode 100644 index 00000000000..696e833afc3 --- /dev/null +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Surface.Thicken(surface, thickness, both_sides).md @@ -0,0 +1,9 @@ +## In Depth +`Surface.Thicken (surface, thickness, both_sides)` creates a solid by offsetting a surface according to the `thickness` input and by capping the ends to close the solid. This node has an extra input to specify whether or not to thicken on both sides. The `both_sides` input takes a Boolean value: True to thicken on both sides, and False to thicken on one side. Note that the `thickness` parameter determines the total thickness of the final solid, so if `both_sides` is set to True, the result will be offset from the original surface by half the input thickness on both sides. + +In the example below, we first create a surface by using a `Surface.BySweep2Rails`. We then create a solid by using a number slider to determine the `thickness` input of a `Surface.Thicken` node. A Boolean toggle controls whether to thicken on both sides or just one. + +___ +## Example File + +![Surface.Thicken](./Autodesk.DesignScript.Geometry.Surface.Thicken(surface,%20thickness,%20both_sides)_img.jpg) \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Surface.Thicken(surface, thickness, both_sides)_img.jpg b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Surface.Thicken(surface, thickness, both_sides)_img.jpg new file mode 100644 index 00000000000..27ad54a9f36 Binary files /dev/null and b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Surface.Thicken(surface, thickness, both_sides)_img.jpg differ diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Surface.ToNurbsSurface.dyn b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Surface.ToNurbsSurface(surface, limitSurface).dyn similarity index 69% rename from doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Surface.ToNurbsSurface.dyn rename to doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Surface.ToNurbsSurface(surface, limitSurface).dyn index 6bcc9c040a8..955be9c9ab8 100644 --- a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Surface.ToNurbsSurface.dyn +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Surface.ToNurbsSurface(surface, limitSurface).dyn @@ -1,5 +1,5 @@ { - "Uuid": "3c9d0464-8643-5ffe-96e5-ab1769818209", + "Uuid": "f621dfe0-6bbb-4146-891e-c0e97be5ab33", "IsCustomNode": false, "Description": "", "Name": "Autodesk.DesignScript.Geometry.Surface.ToNurbsSurface", @@ -8,11 +8,11 @@ }, "Inputs": [ { - "Id": "4fd25c7abb42406eb64183323b390da8", + "Id": "d1d2bf4c35824acf9947d4e22f00d964", "Name": "Number Slider", "Type": "number", "Type2": "number", - "Value": "5", + "Value": "6", "MaximumValue": 10.0, "MinimumValue": 3.0, "StepValue": 1.0, @@ -21,7 +21,7 @@ "SelectedIndex": 0 }, { - "Id": "5b4d90107c974168b1d6053bc480a259", + "Id": "382ccf0846064287b785f182cd44ac1b", "Name": "Boolean", "Type": "boolean", "Type2": "boolean", @@ -34,12 +34,11 @@ "Nodes": [ { "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "c781287922f34a0b929fd8eefb4c8513", "NodeType": "FunctionNode", - "FunctionSignature": "DSCore.Math.RandomList@int", - "Id": "7d7435f4dcd14a1bb0693f701ecda485", "Inputs": [ { - "Id": "b28dc369bd84427888a5c22efe281c8b", + "Id": "0533fc834568477c9a33015b07f4cf6e", "Name": "amount", "Description": "Amount of random numbers the result list will contain.\n\nint", "UsingDefaultValue": false, @@ -50,7 +49,7 @@ ], "Outputs": [ { - "Id": "fa1407d53f3843909fe092e7554be8ed", + "Id": "5e1ee44909c24b26a980307dc25306cb", "Name": "number", "Description": "List of random numbers between 0 and 1.", "UsingDefaultValue": false, @@ -59,22 +58,22 @@ "KeepListStructure": false } ], + "FunctionSignature": "DSCore.Math.RandomList@int", "Replication": "Auto", "Description": "Produces a list containing the given amount of random doubles in the range of [0, 1).\n\nMath.RandomList (amount: int): var[]..[]" }, { "ConcreteType": "CoreNodeModels.Input.DoubleSlider, CoreNodeModels", - "NodeType": "NumberInputNode", "NumberType": "Double", "MaximumValue": 10.0, "MinimumValue": 3.0, "StepValue": 1.0, - "InputValue": 5.0, - "Id": "4fd25c7abb42406eb64183323b390da8", + "Id": "d1d2bf4c35824acf9947d4e22f00d964", + "NodeType": "NumberInputNode", "Inputs": [], "Outputs": [ { - "Id": "4066f07b08774a64914edc66635e14ff", + "Id": "2ee4f82e99484ee98a69f87f90e97f42", "Name": "", "Description": "Double", "UsingDefaultValue": false, @@ -84,16 +83,16 @@ } ], "Replication": "Disabled", - "Description": "Produces numeric values" + "Description": "Produces numeric values", + "InputValue": 6.0 }, { "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "16c02f1f6e31445aa5f7ee52bd3a882f", "NodeType": "FunctionNode", - "FunctionSignature": "Autodesk.DesignScript.Geometry.Point.ByCylindricalCoordinates@Autodesk.DesignScript.Geometry.CoordinateSystem,double,double,double", - "Id": "11d18d7068564c249a8beb42837e0216", "Inputs": [ { - "Id": "edbcf0ef0f764de2b5bcfa343b9f2a09", + "Id": "89912ac557a649c3b630fcb56f1ad6ff", "Name": "coordinateSystem", "Description": "Coordinate system to build the point in\n\nCoordinateSystem\nDefault value : Autodesk.DesignScript.Geometry.CoordinateSystem.ByOrigin(0, 0, 0)", "UsingDefaultValue": true, @@ -102,7 +101,7 @@ "KeepListStructure": false }, { - "Id": "547ff2e1368946cda31be9b2ccd41aac", + "Id": "b6b392b117a7463e85eb259ea4fce6f4", "Name": "angle", "Description": "The angle is the rotation from the X axis in the coordinate system around the Z axis in degrees\n\ndouble\nDefault value : 0", "UsingDefaultValue": true, @@ -111,7 +110,7 @@ "KeepListStructure": false }, { - "Id": "42af7131f08b415db916928fbff5f480", + "Id": "daa4ecc3389c4253a65be752d94ec4e4", "Name": "elevation", "Description": "The elevation of the point above the XY plane\n\ndouble\nDefault value : 0", "UsingDefaultValue": true, @@ -120,7 +119,7 @@ "KeepListStructure": false }, { - "Id": "655bd93715d64c11bab8c7897492806e", + "Id": "b281453570e946d5ad30d1b90c8a9544", "Name": "radius", "Description": "The distance from the origin of the coordinate system\n\ndouble\nDefault value : 1", "UsingDefaultValue": true, @@ -131,7 +130,7 @@ ], "Outputs": [ { - "Id": "794cdf2e847a4ca39527a9adf0aa71cc", + "Id": "9bd5847774494f36824a4ab0276b3e18", "Name": "Point", "Description": "Point at cylindrical coordinates", "UsingDefaultValue": false, @@ -140,17 +139,17 @@ "KeepListStructure": false } ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Point.ByCylindricalCoordinates@Autodesk.DesignScript.Geometry.CoordinateSystem,double,double,double", "Replication": "Auto", "Description": "Form a Point in the given coordinate system given its position in cylindrical coordinates.\n\nPoint.ByCylindricalCoordinates (coordinateSystem: CoordinateSystem = Autodesk.DesignScript.Geometry.CoordinateSystem.ByOrigin(0, 0, 0), angle: double = 0, elevation: double = 0, radius: double = 1): Point" }, { "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "9c56292549904150b06194441f061605", "NodeType": "CodeBlockNode", - "Code": "x*5;", - "Id": "7ba7b96cdf3e43f2a51ba6620e80f8e9", "Inputs": [ { - "Id": "090b5f7032f946998b1c4f0b20f3a24d", + "Id": "102408db56734b47bd8b3f90d2be3746", "Name": "x", "Description": "x", "UsingDefaultValue": false, @@ -161,7 +160,7 @@ ], "Outputs": [ { - "Id": "e3ae108edfc447c1a104a33f4ccc4e36", + "Id": "65fb96051eea4e67a9987c4a2c996b3d", "Name": "", "Description": "Value of expression at line 1", "UsingDefaultValue": false, @@ -171,16 +170,16 @@ } ], "Replication": "Disabled", - "Description": "Allows for DesignScript code to be authored directly" + "Description": "Allows for DesignScript code to be authored directly", + "Code": "x*5;" }, { "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "9fe1d9b4b2c0486e938e1399f3d0015b", "NodeType": "CodeBlockNode", - "Code": "0..360..360/(a-1);", - "Id": "2946ae2a7ef446f2bdb3bc8fb1fdd096", "Inputs": [ { - "Id": "ebcb66900c86485f9780730e6be4c0f2", + "Id": "536cc8dc23c74c3d918d68974c736dd8", "Name": "a", "Description": "a", "UsingDefaultValue": false, @@ -191,7 +190,7 @@ ], "Outputs": [ { - "Id": "5e86218e2afc42f9839a79dc2a239993", + "Id": "5976b8d22ac248b7b66bdacbb199127b", "Name": "", "Description": "Value of expression at line 1", "UsingDefaultValue": false, @@ -201,16 +200,16 @@ } ], "Replication": "Disabled", - "Description": "Allows for DesignScript code to be authored directly" + "Description": "Allows for DesignScript code to be authored directly", + "Code": "0..360..360/(a-1);" }, { "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "b3d6af9fc1f84f9880be0049af1ec521", "NodeType": "FunctionNode", - "FunctionSignature": "DSCore.Math.RandomList@int", - "Id": "1d2c81b61c9f4392a480c371469110ff", "Inputs": [ { - "Id": "43a70262e54645e6a41c227fe634e7c8", + "Id": "be9d5046bee94081a087f08234b73734", "Name": "amount", "Description": "Amount of random numbers the result list will contain.\n\nint", "UsingDefaultValue": false, @@ -221,7 +220,7 @@ ], "Outputs": [ { - "Id": "dac0ef9f74e447f7b7a1863cca5e2425", + "Id": "b120c30ce3644d2a8fc3bbbef95d73f0", "Name": "number", "Description": "List of random numbers between 0 and 1.", "UsingDefaultValue": false, @@ -230,17 +229,17 @@ "KeepListStructure": false } ], + "FunctionSignature": "DSCore.Math.RandomList@int", "Replication": "Auto", "Description": "Produces a list containing the given amount of random doubles in the range of [0, 1).\n\nMath.RandomList (amount: int): var[]..[]" }, { "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "3a2cadb4acbd435f85c1d486613bae6d", "NodeType": "CodeBlockNode", - "Code": "x*5;", - "Id": "403c70ad0cb443cc82e7c920b8c41695", "Inputs": [ { - "Id": "513931cf64db4d269530fea1ac32d5fd", + "Id": "84343fe528ed4551a0174d078763ea11", "Name": "x", "Description": "x", "UsingDefaultValue": false, @@ -251,7 +250,7 @@ ], "Outputs": [ { - "Id": "20800cd5e4ac4ace81ca2f5d1e18019f", + "Id": "a4b32aaa4c134cb7a4bf2a6dcf216e65", "Name": "", "Description": "Value of expression at line 1", "UsingDefaultValue": false, @@ -261,16 +260,16 @@ } ], "Replication": "Disabled", - "Description": "Allows for DesignScript code to be authored directly" + "Description": "Allows for DesignScript code to be authored directly", + "Code": "x*5;" }, { "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "3ded9baff0be4e85ba0169dedc1798b4", "NodeType": "FunctionNode", - "FunctionSignature": "Autodesk.DesignScript.Geometry.NurbsCurve.ByPoints@Autodesk.DesignScript.Geometry.Point[],bool", - "Id": "ca5657b3d8fa40a4a4a1338d2cb535f4", "Inputs": [ { - "Id": "ba392ae15bb74d55a7f2bf7a2b9faa5b", + "Id": "0a429f1d4447463288f412580a1ef58b", "Name": "points", "Description": "Points for nurbs curve\n\nPoint[]", "UsingDefaultValue": false, @@ -279,7 +278,7 @@ "KeepListStructure": false }, { - "Id": "53039927e34f4de8b98ad4baae769a08", + "Id": "1d58306723484bfb8f3bdadf1f66854e", "Name": "closeCurve", "Description": "bool\nDefault value : false", "UsingDefaultValue": true, @@ -290,7 +289,7 @@ ], "Outputs": [ { - "Id": "3be7b51b397a49dda079f15098d7274c", + "Id": "27797976ccd24c4ebc075afec72124fc", "Name": "NurbsCurve", "Description": "Nurbscurve created from points", "UsingDefaultValue": false, @@ -299,18 +298,18 @@ "KeepListStructure": false } ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.NurbsCurve.ByPoints@Autodesk.DesignScript.Geometry.Point[],bool", "Replication": "Auto", "Description": "Create a BSplineCurve by interpolating between points.\n\nNurbsCurve.ByPoints (points: Point[], closeCurve: bool = false): NurbsCurve" }, { "ConcreteType": "CoreNodeModels.Input.BoolSelector, CoreNodeModels", + "Id": "382ccf0846064287b785f182cd44ac1b", "NodeType": "BooleanInputNode", - "InputValue": true, - "Id": "5b4d90107c974168b1d6053bc480a259", "Inputs": [], "Outputs": [ { - "Id": "4f96e7892f7c47ff8edd8f83d732b151", + "Id": "7cdfd647bb6d477ead949a8a5a38ba29", "Name": "", "Description": "Boolean", "UsingDefaultValue": false, @@ -320,16 +319,16 @@ } ], "Replication": "Disabled", - "Description": "Enables selection between True and False" + "Description": "Enables selection between True and False", + "InputValue": true }, { "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "b30ee66b733e46eb99a0f60ff95d89de", "NodeType": "FunctionNode", - "FunctionSignature": "Autodesk.DesignScript.Geometry.Surface.ByPatch@Autodesk.DesignScript.Geometry.Curve", - "Id": "1cc850ca1a66404c947b2896bb67bebf", "Inputs": [ { - "Id": "f1ff786499dc4e43b4b6458b8e808d30", + "Id": "487a40daaa41474fb2c416afbe0ce6e7", "Name": "closedCurve", "Description": "Closed curve used as surface boundary\n\nCurve", "UsingDefaultValue": false, @@ -340,7 +339,7 @@ ], "Outputs": [ { - "Id": "91231d9225354053aad7bff1b9afb078", + "Id": "4e6ec47e29174823a82328674fcbf194", "Name": "Surface", "Description": "Surface created by patch", "UsingDefaultValue": false, @@ -349,28 +348,37 @@ "KeepListStructure": false } ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Surface.ByPatch@Autodesk.DesignScript.Geometry.Curve", "Replication": "Auto", "Description": "Create a Surface by filling in the interior of a closed boundary defined by input Curves.\n\nSurface.ByPatch (closedCurve: Curve): Surface" }, { "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "bee86d53b4724bb6b25e69d7217de3a5", "NodeType": "FunctionNode", - "FunctionSignature": "Autodesk.DesignScript.Geometry.Surface.ToNurbsSurface", - "Id": "bb20643ccb7647b7845ef733b2d07775", "Inputs": [ { - "Id": "d019a03a701246fd8ad0352c9ebdce21", + "Id": "f8f9fc4218b2483a972fe3e562db3b46", "Name": "surface", "Description": "Autodesk.DesignScript.Geometry.Surface", "UsingDefaultValue": false, "Level": 2, "UseLevels": false, "KeepListStructure": false + }, + { + "Id": "8b9a4e44b87e434695d4cac8c3fd38c7", + "Name": "limitSurface", + "Description": "Determines if the surface should be restored to its original parameter range before conversion. An example of when the parameter range of a surface is limited is after a Trim operation.\n\nbool\nDefault value : true", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false } ], "Outputs": [ { - "Id": "3118591e618d42988b3729f014b06418", + "Id": "ce3703fb27fc41059641f3a167ce2231", "Name": "NurbsSurface", "Description": "NurbsSurface", "UsingDefaultValue": false, @@ -379,93 +387,94 @@ "KeepListStructure": false } ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Surface.ToNurbsSurface@bool", "Replication": "Auto", - "Description": "Gets a Nurbs representation of the Surface. This method may approximate Surface in certain circumstances.\n\nSurface.ToNurbsSurface ( ): NurbsSurface" + "Description": "Gets a Nurbs representation of the Surface. This method may approximate Surface in certain circumstances.\n\nSurface.ToNurbsSurface (limitSurface: bool = true): NurbsSurface" } ], "Connectors": [ { - "Start": "fa1407d53f3843909fe092e7554be8ed", - "End": "090b5f7032f946998b1c4f0b20f3a24d", - "Id": "40b469824f12471283933d0e1bfbb018", + "Start": "5e1ee44909c24b26a980307dc25306cb", + "End": "102408db56734b47bd8b3f90d2be3746", + "Id": "dd0103f322ae4383bc35ead9a85d9d49", "IsHidden": "False" }, { - "Start": "4066f07b08774a64914edc66635e14ff", - "End": "b28dc369bd84427888a5c22efe281c8b", - "Id": "595d9b4bd6d64644be6adf541c5c8247", + "Start": "2ee4f82e99484ee98a69f87f90e97f42", + "End": "0533fc834568477c9a33015b07f4cf6e", + "Id": "9d26d31c3f1b4c90acec10f8cc65ea1f", "IsHidden": "False" }, { - "Start": "4066f07b08774a64914edc66635e14ff", - "End": "ebcb66900c86485f9780730e6be4c0f2", - "Id": "c4be3dd584f94a3b9d51a94c3e3ed802", + "Start": "2ee4f82e99484ee98a69f87f90e97f42", + "End": "536cc8dc23c74c3d918d68974c736dd8", + "Id": "e1c7ec3d87a345a5ab7debc9652a9b19", "IsHidden": "False" }, { - "Start": "4066f07b08774a64914edc66635e14ff", - "End": "43a70262e54645e6a41c227fe634e7c8", - "Id": "25a2ea2c8d3e4a42ab36153fca9ee390", + "Start": "2ee4f82e99484ee98a69f87f90e97f42", + "End": "be9d5046bee94081a087f08234b73734", + "Id": "2a2ad47be80c4ae68c6fdee8480773b1", "IsHidden": "False" }, { - "Start": "794cdf2e847a4ca39527a9adf0aa71cc", - "End": "ba392ae15bb74d55a7f2bf7a2b9faa5b", - "Id": "9a2dbcd4489d4d35a5fd70df42863089", + "Start": "9bd5847774494f36824a4ab0276b3e18", + "End": "0a429f1d4447463288f412580a1ef58b", + "Id": "8ed5a45363c947d78cf9cae1fbda239e", "IsHidden": "False" }, { - "Start": "e3ae108edfc447c1a104a33f4ccc4e36", - "End": "655bd93715d64c11bab8c7897492806e", - "Id": "ac011453409344a29f184c84f19fa733", + "Start": "65fb96051eea4e67a9987c4a2c996b3d", + "End": "b281453570e946d5ad30d1b90c8a9544", + "Id": "b7f7f89faaef4f9492efe944d25f24c3", "IsHidden": "False" }, { - "Start": "5e86218e2afc42f9839a79dc2a239993", - "End": "547ff2e1368946cda31be9b2ccd41aac", - "Id": "323e135552b54454bfbf94d450ddc8d4", + "Start": "5976b8d22ac248b7b66bdacbb199127b", + "End": "b6b392b117a7463e85eb259ea4fce6f4", + "Id": "026ab32044054574bb702963033de2c2", "IsHidden": "False" }, { - "Start": "dac0ef9f74e447f7b7a1863cca5e2425", - "End": "513931cf64db4d269530fea1ac32d5fd", - "Id": "6e26902e923544b38c2551999962cbf1", + "Start": "b120c30ce3644d2a8fc3bbbef95d73f0", + "End": "84343fe528ed4551a0174d078763ea11", + "Id": "5b82244b1b064918b56cf9a6f68f4deb", "IsHidden": "False" }, { - "Start": "20800cd5e4ac4ace81ca2f5d1e18019f", - "End": "42af7131f08b415db916928fbff5f480", - "Id": "df6dfb12a0234163810cce27e0eba00b", + "Start": "a4b32aaa4c134cb7a4bf2a6dcf216e65", + "End": "daa4ecc3389c4253a65be752d94ec4e4", + "Id": "ff928df78e094c448125d1bcf67179a9", "IsHidden": "False" }, { - "Start": "3be7b51b397a49dda079f15098d7274c", - "End": "f1ff786499dc4e43b4b6458b8e808d30", - "Id": "2ce774abb7ad4a30968b7ad7e948368d", + "Start": "27797976ccd24c4ebc075afec72124fc", + "End": "487a40daaa41474fb2c416afbe0ce6e7", + "Id": "7717f42044a94271a7eee53e02213221", "IsHidden": "False" }, { - "Start": "4f96e7892f7c47ff8edd8f83d732b151", - "End": "53039927e34f4de8b98ad4baae769a08", - "Id": "63468dcace7248d5a86747240edefae1", + "Start": "7cdfd647bb6d477ead949a8a5a38ba29", + "End": "1d58306723484bfb8f3bdadf1f66854e", + "Id": "52e8bc27c2ca4250bda93b4ee3dbb804", "IsHidden": "False" }, { - "Start": "91231d9225354053aad7bff1b9afb078", - "End": "d019a03a701246fd8ad0352c9ebdce21", - "Id": "ea14ff73de784a4199183b6a2577a3cf", + "Start": "4e6ec47e29174823a82328674fcbf194", + "End": "f8f9fc4218b2483a972fe3e562db3b46", + "Id": "cff6fa438515448aac95944dd762f073", "IsHidden": "False" } ], "Dependencies": [], "NodeLibraryDependencies": [], - "Thumbnail": null, + "Thumbnail": "", "GraphDocumentationURL": null, "ExtensionWorkspaceData": [ { "ExtensionGuid": "28992e1d-abb9-417f-8b1b-05e053bee670", "Name": "Properties", - "Version": "2.17", + "Version": "2.19", "Data": {} } ], @@ -482,15 +491,15 @@ "ScaleFactor": 1.0, "HasRunWithoutCrash": true, "IsVisibleInDynamoLibrary": true, - "Version": "2.17.0.3255", - "RunType": "Manual", + "Version": "2.19.4.6632", + "RunType": "Automatic", "RunPeriod": "1000" }, "Camera": { "Name": "_Background Preview", - "EyeX": -6.5809869766235352, - "EyeY": 11.254499435424805, - "EyeZ": 11.339029312133789, + "EyeX": -5.4902410507202148, + "EyeY": 15.053728103637695, + "EyeZ": 8.7998876571655273, "LookX": 8.7498655319213867, "LookY": -14.094080924987793, "LookZ": -17.329778671264648, @@ -501,119 +510,119 @@ "ConnectorPins": [], "NodeViews": [ { + "Id": "c781287922f34a0b929fd8eefb4c8513", "Name": "Math.RandomList", - "ShowGeometry": true, - "Id": "7d7435f4dcd14a1bb0693f701ecda485", "IsSetAsInput": false, "IsSetAsOutput": false, "Excluded": false, - "X": -578.5030953668745, - "Y": 307.55904850481738 + "ShowGeometry": true, + "X": -579.30309536687446, + "Y": 299.337465921565 }, { + "Id": "d1d2bf4c35824acf9947d4e22f00d964", "Name": "Number Slider", - "ShowGeometry": true, - "Id": "4fd25c7abb42406eb64183323b390da8", "IsSetAsInput": true, "IsSetAsOutput": false, "Excluded": false, + "ShowGeometry": true, "X": -1027.3030953668745, - "Y": 160.55904850481735 + "Y": 152.337465921565 }, { + "Id": "16c02f1f6e31445aa5f7ee52bd3a882f", "Name": "Point.ByCylindricalCoordinates", - "ShowGeometry": true, - "Id": "11d18d7068564c249a8beb42837e0216", "IsSetAsInput": false, "IsSetAsOutput": false, "Excluded": false, - "X": 95.096904633125632, - "Y": 92.731548504817368 + "ShowGeometry": true, + "X": 95.696904633125541, + "Y": 84.509965921565026 }, { + "Id": "9c56292549904150b06194441f061605", "Name": "Code Block", - "ShowGeometry": true, - "Id": "7ba7b96cdf3e43f2a51ba6620e80f8e9", "IsSetAsInput": false, "IsSetAsOutput": false, "Excluded": false, - "X": -257.70309536687444, - "Y": 307.55904850481738 + "ShowGeometry": true, + "X": -258.30309536687446, + "Y": 299.337465921565 }, { + "Id": "9fe1d9b4b2c0486e938e1399f3d0015b", "Name": "Code Block", - "ShowGeometry": true, - "Id": "2946ae2a7ef446f2bdb3bc8fb1fdd096", "IsSetAsInput": false, "IsSetAsOutput": false, "Excluded": false, - "X": -257.70309536687444, - "Y": 13.559048504817383 + "ShowGeometry": true, + "X": -258.30309536687446, + "Y": 5.3374659215650126 }, { + "Id": "b3d6af9fc1f84f9880be0049af1ec521", "Name": "Math.RandomList", - "ShowGeometry": true, - "Id": "1d2c81b61c9f4392a480c371469110ff", "IsSetAsInput": false, "IsSetAsOutput": false, "Excluded": false, - "X": -578.5030953668745, - "Y": 160.55904850481735 + "ShowGeometry": true, + "X": -579.30309536687446, + "Y": 152.337465921565 }, { + "Id": "3a2cadb4acbd435f85c1d486613bae6d", "Name": "Code Block", - "ShowGeometry": true, - "Id": "403c70ad0cb443cc82e7c920b8c41695", "IsSetAsInput": false, "IsSetAsOutput": false, "Excluded": false, - "X": -257.70309536687444, - "Y": 160.55904850481735 + "ShowGeometry": true, + "X": -258.30309536687446, + "Y": 152.337465921565 }, { + "Id": "3ded9baff0be4e85ba0169dedc1798b4", "Name": "NurbsCurve.ByPoints", - "ShowGeometry": true, - "Id": "ca5657b3d8fa40a4a4a1338d2cb535f4", "IsSetAsInput": false, "IsSetAsOutput": false, "Excluded": false, - "X": 499.09690463312563, - "Y": 199.73154850481734 + "ShowGeometry": true, + "X": 499.69690463312554, + "Y": 191.50996592156503 }, { + "Id": "382ccf0846064287b785f182cd44ac1b", "Name": "Boolean", - "ShowGeometry": true, - "Id": "5b4d90107c974168b1d6053bc480a259", "IsSetAsInput": true, "IsSetAsOutput": false, "Excluded": false, - "X": 93.975966004966722, - "Y": 338.48967124849963 + "ShowGeometry": true, + "X": 95.696904633125541, + "Y": 332.509965921565 }, { + "Id": "b30ee66b733e46eb99a0f60ff95d89de", "Name": "Surface.ByPatch", - "ShowGeometry": true, - "Id": "1cc850ca1a66404c947b2896bb67bebf", "IsSetAsInput": false, "IsSetAsOutput": false, "Excluded": false, - "X": 859.89690463312559, - "Y": 199.73154850481734 + "ShowGeometry": true, + "X": 859.69690463312554, + "Y": 191.50996592156503 }, { + "Id": "bee86d53b4724bb6b25e69d7217de3a5", "Name": "Surface.ToNurbsSurface", - "ShowGeometry": true, - "Id": "bb20643ccb7647b7845ef733b2d07775", "IsSetAsInput": false, "IsSetAsOutput": false, "Excluded": false, - "X": 1204.6969046331255, - "Y": 199.73154850481734 + "ShowGeometry": true, + "X": 1214.3061051508912, + "Y": 175.91481092450368 } ], "Annotations": [], - "X": 758.3734812666645, - "Y": 298.69424106709329, - "Zoom": 0.7136876006441224 + "X": 577.54028474958955, + "Y": 125.09092957339169, + "Zoom": 0.55877561722545954 } } \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Surface.ToNurbsSurface(surface, limitSurface).md b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Surface.ToNurbsSurface(surface, limitSurface).md new file mode 100644 index 00000000000..78e9389ff3e --- /dev/null +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Surface.ToNurbsSurface(surface, limitSurface).md @@ -0,0 +1,10 @@ +## In Depth +`Surface.ToNurbsSurface` takes a surface as input and returns a NurbsSurface that approximates the input surface. The `limitSurface` input determines if the surface should be restored to its original parameter range before conversion, for example, when the parameter range of a surface is limited is after a Trim operation. + +In the example below, we create a surface using a `Surface.ByPatch` node with a closed NurbsCurve as an input. Note that when we use this surface as the input for a `Surface.ToNurbsSurface` node, the result is an untrimmed NurbsSurface with four sides. + + +___ +## Example File + +![Surface.ToNurbsSurface](./Autodesk.DesignScript.Geometry.Surface.ToNurbsSurface(surface,%20limitSurface)_img.jpg) \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Surface.ToNurbsSurface(surface, limitSurface)_img.jpg b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Surface.ToNurbsSurface(surface, limitSurface)_img.jpg new file mode 100644 index 00000000000..a1b03e0c293 Binary files /dev/null and b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Surface.ToNurbsSurface(surface, limitSurface)_img.jpg differ diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Surface.ToNurbsSurface.md b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Surface.ToNurbsSurface.md deleted file mode 100644 index 0e1ef6db5e6..00000000000 --- a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Surface.ToNurbsSurface.md +++ /dev/null @@ -1,7 +0,0 @@ -## In Depth -Surface To Nurbs Surface takes a surface as input and returns a Nurbs Surface that approximates the input surface. In the example below, we create a surface using a ByPatch node with a close Nurbs Curve as an input. Note that when we use this surface as the input for a ToNurbsSurface node, the result is an untrimmed Nurbs Surface with four sides. -___ -## Example File - -![ToNurbsSurface](./Autodesk.DesignScript.Geometry.Surface.ToNurbsSurface_img.jpg) - diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Surface.ToNurbsSurface_img.jpg b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Surface.ToNurbsSurface_img.jpg deleted file mode 100644 index 2de207a2f38..00000000000 Binary files a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Surface.ToNurbsSurface_img.jpg and /dev/null differ diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Surface.TrimWithEdgeLoops(surface, loops, tolerance).dyn b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Surface.TrimWithEdgeLoops(surface, loops, tolerance).dyn new file mode 100644 index 00000000000..54ded366c8d --- /dev/null +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Surface.TrimWithEdgeLoops(surface, loops, tolerance).dyn @@ -0,0 +1,628 @@ +{ + "Uuid": "c3900289-e7fe-4db3-bccb-6dd7385d9e5c", + "IsCustomNode": false, + "Description": "", + "Name": "Autodesk.DesignScript.Geometry.Surface.TrimWithEdgeLoops", + "ElementResolver": { + "ResolutionMap": { + "Point": { + "Key": "Autodesk.DesignScript.Geometry.Point", + "Value": "ProtoGeometry.dll" + }, + "Vector.XAxis": { + "Key": "Autodesk.DesignScript.Geometry.Vector", + "Value": "ProtoGeometry.dll" + }, + "Vector": { + "Key": "Autodesk.DesignScript.Geometry.Vector", + "Value": "ProtoGeometry.dll" + }, + "Math": { + "Key": "DSCore.Math", + "Value": "DSCoreNodes.dll" + }, + "PolyCurve": { + "Key": "Autodesk.DesignScript.Geometry.PolyCurve", + "Value": "ProtoGeometry.dll" + }, + "Color": { + "Key": "DSCore.Color", + "Value": "DSCoreNodes.dll" + }, + "Display": { + "Key": "Display.Display", + "Value": "Display.dll" + } + } + }, + "Inputs": [ + { + "Id": "e706c795414a46db8ea50bb5c34dee5c", + "Name": "Trimmed Surface Geometry", + "Type": "number", + "Type2": "number", + "Value": "0.3", + "MaximumValue": 1.0, + "MinimumValue": -4.0, + "StepValue": 0.1, + "NumberType": "Double", + "Description": "Produces numeric values", + "SelectedIndex": 0 + } + ], + "Outputs": [], + "Nodes": [ + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "7d29d965759c4a6091d44c155f12517c", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "7c489496f7844a17af38f90b590ab6ea", + "Name": "closedCurve", + "Description": "Closed curve used as surface boundary\n\nCurve", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "5f3c2dc5f8f546918930935551b487fb", + "Name": "Surface", + "Description": "Surface created by patch", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Surface.ByPatch@Autodesk.DesignScript.Geometry.Curve", + "Replication": "Auto", + "Description": "Create a Surface by filling in the interior of a closed boundary defined by input Curves.\n\nSurface.ByPatch (closedCurve: Curve): Surface" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "dc345f78f0f54322b4a856a206da145b", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "cce21458240f4331b3aa706e80c81508", + "Name": "centerPoint", + "Description": "Center point of circle\n\nPoint\nDefault value : Autodesk.DesignScript.Geometry.Point.ByCoordinates(0, 0, 0)", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "81f7aa6dd0984ebcad54f842f9f23955", + "Name": "radius", + "Description": "Radius\n\ndouble\nDefault value : 1", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "bbc590775ec94fa1bd03c5bb28696d89", + "Name": "normal", + "Description": "Normal direction vector\n\nVector\nDefault value : Autodesk.DesignScript.Geometry.Vector.ByCoordinates(0, 0, 1)", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "261909961e504ed2a92b26a2c599f6a9", + "Name": "Circle", + "Description": "Circle created with center point radius and normal", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Circle.ByCenterPointRadiusNormal@Autodesk.DesignScript.Geometry.Point,double,Autodesk.DesignScript.Geometry.Vector", + "Replication": "Auto", + "Description": "Creates a Circle with specified center Point, radius, and normal direction.\n\nCircle.ByCenterPointRadiusNormal (centerPoint: Point = Autodesk.DesignScript.Geometry.Point.ByCoordinates(0, 0, 0), radius: double = 1, normal: Vector = Autodesk.DesignScript.Geometry.Vector.ByCoordinates(0, 0, 1)): Circle" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "4116bb8fc536488a8c21dc6d835dcf44", + "NodeType": "CodeBlockNode", + "Inputs": [ + { + "Id": "11155c04d6bf41139e61c27de3994557", + "Name": "x", + "Description": "x", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "ea5fa713620c46a08b5b27f3050fe4ea", + "Name": "", + "Description": "Value of expression at line 2", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "8cf18e761d814f39a62f65722774e73d", + "Name": "", + "Description": "Value of expression at line 3", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "d606f18a142b4997b1f35b8acebfd0e4", + "Name": "", + "Description": "Value of expression at line 4", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "7637989616b745bb85b9a9a34fd6ee93", + "Name": "", + "Description": "pt1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "49818a91e5e54229acc7dee4b0300641", + "Name": "", + "Description": "pt2", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "329ad89fdfa944cea6dfb73821335cbf", + "Name": "", + "Description": "pt3", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "d151d01487734d0fbb073739cbf30d8b", + "Name": "", + "Description": "pt4", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "27c6ba5803ee4e8dabdd72ccd0ce5499", + "Name": "", + "Description": "pts", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "21ac8901ae704924a8345ba77d59e785", + "Name": "", + "Description": "pCurve", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "ba200c6d9d0c4decb538c612ba0a1855", + "Name": "", + "Description": "pFillet", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "6803f07fc9054897969db2a438e9179f", + "Name": "", + "Description": "pt5", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "1bc004eda98c443999886c4caf6829ac", + "Name": "", + "Description": "pt6", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "5d9ba9971da44486b5dac665d86045fa", + "Name": "", + "Description": "pt7", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "9988ca56d2af4d58989f21a74913948d", + "Name": "", + "Description": "pt8", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "ba149d71e7bf4ed9abd7a4e0fade3597", + "Name": "", + "Description": "pts2", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "360606f3a2cf4551a20792848cda688d", + "Name": "", + "Description": "pCurve2", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "9aa0455e19834b07a1abe7ced9af5f8a", + "Name": "", + "Description": "pFillet2", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "e4230cc32bfc41bc87cb83be11976cee", + "Name": "", + "Description": "loops", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "//Surface to trim\nPoint.ByCoordinates(0,0,0);\n6;\nVector.XAxis();\n\n//Inner loop 1\npt1 = Point.ByCoordinates(0,3,4);\npt2 = Point.ByCoordinates(0,2,4);\npt3 = Point.ByCoordinates(0,x*-1,-2);\npt4 = Point.ByCoordinates(0,5,2);\npts = [pt1, pt2, pt3, pt4];\npCurve = PolyCurve.ByPoints(pts, true);\npFillet = PolyCurve.Fillet(pCurve, 0.25);\n\n//Inner loop 2\npt5 = Point.ByCoordinates(0,-3,-4);\npt6 = Point.ByCoordinates(0,-2,-4);\npt7 = Point.ByCoordinates(0,x,2);\npt8 = Point.ByCoordinates(0,-5,-2);\npts2 = [pt5, pt6, pt7, pt8];\npCurve2 = PolyCurve.ByPoints(pts2, true);\npFillet2 = PolyCurve.Fillet(pCurve2, 0.25);\n\n//Inner loops\nloops = [pFillet, pFillet2];" + }, + { + "ConcreteType": "CoreNodeModels.Input.DoubleSlider, CoreNodeModels", + "NumberType": "Double", + "MaximumValue": 1.0, + "MinimumValue": -4.0, + "StepValue": 0.1, + "Id": "e706c795414a46db8ea50bb5c34dee5c", + "NodeType": "NumberInputNode", + "Inputs": [], + "Outputs": [ + { + "Id": "299d11a0c4d84d619d0dc052f4090a80", + "Name": "", + "Description": "Double", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Produces numeric values", + "InputValue": 0.3 + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "a99d309dd7c24588acd4545b29294280", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "3c52be18b7f84f749519d6c2e128205b", + "Name": "geometry", + "Description": "The geometry to which you would like to apply color.\n\nGeometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "bcb7fbbc0911444abd0e95f166974a3f", + "Name": "color", + "Description": "The color.\n\nColor", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "4c3ff321a10f42b28d7c98e1f964d3e9", + "Name": "GeometryColor", + "Description": "A Display object.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Modifiers.GeometryColor.ByGeometryColor@Autodesk.DesignScript.Geometry.Geometry,DSCore.Color", + "Replication": "Auto", + "Description": "Display geometry using a color.\n\nGeometryColor.ByGeometryColor (geometry: Geometry, color: Color): GeometryColor" + }, + { + "ConcreteType": "CoreNodeModels.Input.ColorPalette, CoreNodeModels", + "InputValue": { + "R": 151, + "G": 192, + "B": 206, + "A": 255 + }, + "Id": "44fa8aa9dc814f18aef4568aa15ebc8b", + "NodeType": "ColorInputNode", + "Inputs": [], + "Outputs": [ + { + "Id": "fdffe1a8836f4159ae8022ccc1858d71", + "Name": "Color", + "Description": "Selected Color.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Select a Color from the palette" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "96ce02d60663460cb451c4e86e2841d5", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "b78a3c80d74f4ff5bb316a6044483462", + "Name": "surface", + "Description": "Autodesk.DesignScript.Geometry.Surface", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "3560abe90c7f41dbbd79885f31563cd6", + "Name": "loops", + "Description": "PolyCurve[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "d5b6bf1e136a4609843b1f0087f21897", + "Name": "tolerance", + "Description": "double\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "bca94bfb84c14695b399779105091ef9", + "Name": "Surface", + "Description": "Surface", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Surface.TrimWithEdgeLoops@Autodesk.DesignScript.Geometry.PolyCurve[],double", + "Replication": "Auto", + "Description": "Trims the surface with a collection of one or more closed PolyCurves. One of the loops needs to be the boundary loop of the input surface. In addition, one or more inner loops need to be added for holes.\n\nSurface.TrimWithEdgeLoops (loops: PolyCurve[], tolerance: double = 0): Surface" + } + ], + "Connectors": [ + { + "Start": "5f3c2dc5f8f546918930935551b487fb", + "End": "3c52be18b7f84f749519d6c2e128205b", + "Id": "0add38d0a9fe4d1dbc52055a1c41202e", + "IsHidden": "False" + }, + { + "Start": "5f3c2dc5f8f546918930935551b487fb", + "End": "b78a3c80d74f4ff5bb316a6044483462", + "Id": "a0da163225db41408766a2d8ce65771f", + "IsHidden": "False" + }, + { + "Start": "261909961e504ed2a92b26a2c599f6a9", + "End": "7c489496f7844a17af38f90b590ab6ea", + "Id": "ad47aa4c38f34ad6a617f68440cddcef", + "IsHidden": "False" + }, + { + "Start": "ea5fa713620c46a08b5b27f3050fe4ea", + "End": "cce21458240f4331b3aa706e80c81508", + "Id": "c8c4c5748ad647a6a35a9cbaa58c4534", + "IsHidden": "False" + }, + { + "Start": "8cf18e761d814f39a62f65722774e73d", + "End": "81f7aa6dd0984ebcad54f842f9f23955", + "Id": "77eb39cf77a84271969f9b8a3dc9f80e", + "IsHidden": "False" + }, + { + "Start": "d606f18a142b4997b1f35b8acebfd0e4", + "End": "bbc590775ec94fa1bd03c5bb28696d89", + "Id": "a9248efa88864566abd90077a5959148", + "IsHidden": "False" + }, + { + "Start": "e4230cc32bfc41bc87cb83be11976cee", + "End": "3560abe90c7f41dbbd79885f31563cd6", + "Id": "ae9f7baa8ec0426cb68e60f7779accfb", + "IsHidden": "False" + }, + { + "Start": "299d11a0c4d84d619d0dc052f4090a80", + "End": "11155c04d6bf41139e61c27de3994557", + "Id": "c31904759b254d71b92f0232216ec000", + "IsHidden": "False" + }, + { + "Start": "fdffe1a8836f4159ae8022ccc1858d71", + "End": "bcb7fbbc0911444abd0e95f166974a3f", + "Id": "78148ded9e7c430cb46461cef3d805ad", + "IsHidden": "False" + } + ], + "Dependencies": [], + "NodeLibraryDependencies": [], + "Thumbnail": "", + "GraphDocumentationURL": null, + "ExtensionWorkspaceData": [ + { + "ExtensionGuid": "28992e1d-abb9-417f-8b1b-05e053bee670", + "Name": "Properties", + "Version": "2.19", + "Data": {} + } + ], + "Author": "None provided", + "Linting": { + "activeLinter": "None", + "activeLinterId": "7b75fb44-43fd-4631-a878-29f4d5d8399a", + "warningCount": 0, + "errorCount": 0 + }, + "Bindings": [], + "View": { + "Dynamo": { + "ScaleFactor": 1.0, + "HasRunWithoutCrash": true, + "IsVisibleInDynamoLibrary": true, + "Version": "2.19.4.6632", + "RunType": "Automatic", + "RunPeriod": "1000" + }, + "Camera": { + "Name": "_Background Preview", + "EyeX": 15.819687843322754, + "EyeY": 5.5620708465576172, + "EyeZ": -6.5477018356323242, + "LookX": -16.385435104370117, + "LookY": -4.33048152923584, + "LookZ": 7.60958194732666, + "UpX": -0.017411366105079651, + "UpY": 0.99981570243835449, + "UpZ": 0.00808618776500225 + }, + "ConnectorPins": [], + "NodeViews": [ + { + "Id": "7d29d965759c4a6091d44c155f12517c", + "Name": "Surface.ByPatch", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": false, + "X": 2105.2558996906128, + "Y": 3805.2979507192154 + }, + { + "Id": "dc345f78f0f54322b4a856a206da145b", + "Name": "Circle.ByCenterPointRadiusNormal", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": false, + "X": 1673.2558996906125, + "Y": 3805.2979507192154 + }, + { + "Id": "4116bb8fc536488a8c21dc6d835dcf44", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": false, + "X": 1125.2558996906125, + "Y": 3815.262950719215 + }, + { + "Id": "e706c795414a46db8ea50bb5c34dee5c", + "Name": "Trimmed Surface Geometry", + "IsSetAsInput": true, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 677.25589969061252, + "Y": 3815.262950719215 + }, + { + "Id": "a99d309dd7c24588acd4545b29294280", + "Name": "GeometryColor.ByGeometryColor", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2481.1448132811338, + "Y": 3573.3965829988888 + }, + { + "Id": "44fa8aa9dc814f18aef4568aa15ebc8b", + "Name": "Color Palette", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2207.3384737522993, + "Y": 3613.7780935049386 + }, + { + "Id": "96ce02d60663460cb451c4e86e2841d5", + "Name": "Surface.TrimWithEdgeLoops", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2477.12769391776, + "Y": 3823.865280155384 + } + ], + "Annotations": [], + "X": -454.04766337765545, + "Y": -2191.8190491059809, + "Zoom": 0.63737993559788708 + } +} \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Surface.TrimWithEdgeLoops(surface, loops, tolerance).md b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Surface.TrimWithEdgeLoops(surface, loops, tolerance).md new file mode 100644 index 00000000000..3d8e92a0b60 --- /dev/null +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Surface.TrimWithEdgeLoops(surface, loops, tolerance).md @@ -0,0 +1,11 @@ +## In Depth +`Surface.TrimWithEdgeLoops` trims the surface with a collection of one or more closed PolyCurves that must all lie on the surface within the specified tolerance. If one or more holes need to be trimmed from the input surface, there must be one outer loop specified for the boundary of the surface and one inner loop for each hole. If the region between the surface boundary and the hole(s) needs to be trimmed, only the loop for each hole should be provided. For a periodic surface with no outer loop such as a spherical surface, the trimmed region can be controlled by reversing the direction of the loop curve. + +The tolerance is the tolerance used when deciding whether curve ends are coincident and whether a curve and surface are coincident. The supplied tolerance cannot be smaller than any of the tolerances used in the creation of the input PolyCurves. The default value of 0.0 means that the largest tolerance used in the creation of the input PolyCurves will be used. + +In the example below, two loops are trimmed out of a surface, returning two new surfaces highlighted in blue. The number slider adjusts the shape of the new surfaces. + +___ +## Example File + +![Surface.TrimWithEdgeLoops](./Autodesk.DesignScript.Geometry.Surface.TrimWithEdgeLoops(surface,%20loops,%20tolerance)_img.jpg) \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Surface.TrimWithEdgeLoops(surface, loops, tolerance)_img.jpg b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Surface.TrimWithEdgeLoops(surface, loops, tolerance)_img.jpg new file mode 100644 index 00000000000..726ddd7de98 Binary files /dev/null and b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Surface.TrimWithEdgeLoops(surface, loops, tolerance)_img.jpg differ diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.UV.ByCoordinates.md b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.UV.ByCoordinates.md index ec0bd6173fa..b2d881230d8 100644 --- a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.UV.ByCoordinates.md +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.UV.ByCoordinates.md @@ -1,5 +1,8 @@ ## In Depth -Reference points are created in the Revit conceptual design environment. +`UV.ByCoordinates` will return a UV from two lists of doubles. U and V are the horizontal and vertical coordinates, respectively, that define how 2D textures are applied to a 3D surface. + +In the example below, a UV is returned from 400 random values to create a Delaunay triangulation of a NurbsSurface. + ___ ## Example File diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Vector.Scale(vector, xScaleFactor, yScaleFactor, zScaleFactor).dyn b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Vector.Scale(vector, xScaleFactor, yScaleFactor, zScaleFactor).dyn new file mode 100644 index 00000000000..32eb1fa23a7 --- /dev/null +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Vector.Scale(vector, xScaleFactor, yScaleFactor, zScaleFactor).dyn @@ -0,0 +1,643 @@ +{ + "Uuid": "111cf6f6-c4ce-4bdb-8db3-472f0949aaf6", + "IsCustomNode": false, + "Description": "", + "Name": "Autodesk.DesignScript.Geometry.Vector.Scale", + "ElementResolver": { + "ResolutionMap": {} + }, + "Inputs": [], + "Outputs": [], + "Nodes": [ + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "149651b06b454fd6a9c2a0302c1103a9", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "214353ad7009475493f91c6067fdccba", + "Name": "x", + "Description": "X coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "bcee67db4a4d4ff1a137f030f5025885", + "Name": "y", + "Description": "Y coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "4da101597e9546139bb0f3a888a50c28", + "Name": "z", + "Description": "Z coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "1cb974396497441e84b48cc184f0a3ff", + "Name": "Vector", + "Description": "Vector created by coordinates", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Vector.ByCoordinates@double,double,double", + "Replication": "Auto", + "Description": "Form a Vector by 3 Euclidean coordinates\n\nVector.ByCoordinates (x: double = 0, y: double = 0, z: double = 0): Vector" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "5dd6bf4863824faf91ef85623e357fae", + "NodeType": "CodeBlockNode", + "Inputs": [], + "Outputs": [ + { + "Id": "52c596de45ae4271a5e19f0bcc69b301", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "1;" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "6c8310f38b96449f8f88bd7eb4873744", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "7c8bb65ac6a64583b66fafa08e6ab052", + "Name": "vector", + "Description": "Autodesk.DesignScript.Geometry.Vector", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "bd78dc8a0ac94ea19e3d182be9b72b68", + "Name": "double", + "Description": "double", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Vector.Length", + "Replication": "Auto", + "Description": "Get the length of the vector otherwise known as the Euclidean norm.\n\nVector.Length: double" + }, + { + "ConcreteType": "CoreNodeModels.Watch, CoreNodeModels", + "WatchWidth": 140.0, + "WatchHeight": 38.4, + "Id": "7b94ac48d72746fa954c0598a31a7c1e", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "29966581515740ae9fe6bea7546fe9b7", + "Name": "", + "Description": "Node to show output from", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "70aba4282e904901aac869da6bd9088f", + "Name": "", + "Description": "Node output", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Visualizes a node's output" + }, + { + "ConcreteType": "CoreNodeModels.Watch, CoreNodeModels", + "WatchWidth": 140.0, + "WatchHeight": 38.4, + "Id": "7754a3af90b14041b8610c575f9877c5", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "6da3d5411018460bb7595f300431c1c6", + "Name": "", + "Description": "Node to show output from", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "ec601449ab104741bd0f79f4453388ec", + "Name": "", + "Description": "Node output", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Visualizes a node's output" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "1a9e6708d97845a4801fa32914c57421", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "ed90e8bab26941e3b9c125740dc9fc03", + "Name": "vector", + "Description": "Autodesk.DesignScript.Geometry.Vector", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "372ead3b2b7b4553884779ea8b83df92", + "Name": "double", + "Description": "double", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Vector.Length", + "Replication": "Auto", + "Description": "Get the length of the vector otherwise known as the Euclidean norm.\n\nVector.Length: double" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "4eb49fdafed1499ea6f15d6c91361bce", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "4c3988c5d0af44b28d50e3e9b05efee1", + "Name": "vector", + "Description": "Autodesk.DesignScript.Geometry.Vector", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "a2e8d3e7b8d244f7a778bb2feb48c907", + "Name": "xScaleFactor", + "Description": "double\nDefault value : 1", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "3837a01fe2314e2d8f50d19a6a8affbf", + "Name": "yScaleFactor", + "Description": "double\nDefault value : 1", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "7c823df4e1fa46be8f59feccca31e5b0", + "Name": "zScaleFactor", + "Description": "double\nDefault value : 1", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "d53995a012374411aa6451180a5085da", + "Name": "Vector", + "Description": "Vector", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Vector.Scale@double,double,double", + "Replication": "Auto", + "Description": "Scale Vector non-uniformly around the origin\n\nVector.Scale (xScaleFactor: double = 1, yScaleFactor: double = 1, zScaleFactor: double = 1): Vector" + }, + { + "ConcreteType": "CoreNodeModels.Watch, CoreNodeModels", + "WatchWidth": 27.2, + "WatchHeight": 38.4, + "Id": "ca663badb76449f58b966fdbb1e8669d", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "a7cdb9a7a4d44613810703c18fb1d000", + "Name": "", + "Description": "Node to show output from", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "fd037518fdf347b4917cd3dda46c9713", + "Name": "", + "Description": "Node output", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Visualizes a node's output" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "6ca2b44cbc6c4c069e4781c8eed0496b", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "c9f3605f425142e49b818e97c7ec8051", + "Name": "vector", + "Description": "Autodesk.DesignScript.Geometry.Vector", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "b19fe0d673104996a812f95b98a51041", + "Name": "double", + "Description": "double", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Vector.Length", + "Replication": "Auto", + "Description": "Get the length of the vector otherwise known as the Euclidean norm.\n\nVector.Length: double" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "383a5a5a95164061adcbbd34cf12815b", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "5b4184ae3b7240d58086f98d70097154", + "Name": "vector", + "Description": "Autodesk.DesignScript.Geometry.Vector", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "e2e5e2e5c3d640cd92f9b12dd05484d9", + "Name": "xScaleFactor", + "Description": "double\nDefault value : 1", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "08d43ba84ecd403c9a785c2bff9722b4", + "Name": "yScaleFactor", + "Description": "double\nDefault value : 1", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "34045992774e412c8d21fb0cdc13b550", + "Name": "zScaleFactor", + "Description": "double\nDefault value : 1", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "6a9e98ec88ef44c991224050835dcc6b", + "Name": "Vector", + "Description": "Vector", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Vector.Scale@double,double,double", + "Replication": "Auto", + "Description": "Scale Vector non-uniformly around the origin\n\nVector.Scale (xScaleFactor: double = 1, yScaleFactor: double = 1, zScaleFactor: double = 1): Vector" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "c822eaff2c62419ebc4de600f0961087", + "NodeType": "CodeBlockNode", + "Inputs": [], + "Outputs": [ + { + "Id": "381e0f9e007a4f60af869b1ab8f9c687", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "2;" + } + ], + "Connectors": [ + { + "Start": "1cb974396497441e84b48cc184f0a3ff", + "End": "4c3988c5d0af44b28d50e3e9b05efee1", + "Id": "49ce457bca0149aa85c6d6f4ef6d9c16", + "IsHidden": "False" + }, + { + "Start": "1cb974396497441e84b48cc184f0a3ff", + "End": "ed90e8bab26941e3b9c125740dc9fc03", + "Id": "f7288872a1db4be399bbe979b86ccc0e", + "IsHidden": "False" + }, + { + "Start": "1cb974396497441e84b48cc184f0a3ff", + "End": "5b4184ae3b7240d58086f98d70097154", + "Id": "565ba4224e974a2a81782b91be2d56f7", + "IsHidden": "False" + }, + { + "Start": "52c596de45ae4271a5e19f0bcc69b301", + "End": "214353ad7009475493f91c6067fdccba", + "Id": "4498bd859a41434db59bfcf9926f8f44", + "IsHidden": "False" + }, + { + "Start": "52c596de45ae4271a5e19f0bcc69b301", + "End": "bcee67db4a4d4ff1a137f030f5025885", + "Id": "160d1f36cbac4bcf88827f0799a95625", + "IsHidden": "False" + }, + { + "Start": "52c596de45ae4271a5e19f0bcc69b301", + "End": "4da101597e9546139bb0f3a888a50c28", + "Id": "2acfc2f7a5144239a0aca18fd3354da4", + "IsHidden": "False" + }, + { + "Start": "bd78dc8a0ac94ea19e3d182be9b72b68", + "End": "29966581515740ae9fe6bea7546fe9b7", + "Id": "461524f71a3f4f0db760c51ff95a1284", + "IsHidden": "False" + }, + { + "Start": "372ead3b2b7b4553884779ea8b83df92", + "End": "6da3d5411018460bb7595f300431c1c6", + "Id": "171a70a2a6ea4b1d8d91193c90db99fb", + "IsHidden": "False" + }, + { + "Start": "d53995a012374411aa6451180a5085da", + "End": "7c8bb65ac6a64583b66fafa08e6ab052", + "Id": "da435a852a04427a934fd00ec3a30d6f", + "IsHidden": "False" + }, + { + "Start": "b19fe0d673104996a812f95b98a51041", + "End": "a7cdb9a7a4d44613810703c18fb1d000", + "Id": "4115207f8d944062b76c595023c33d38", + "IsHidden": "False" + }, + { + "Start": "6a9e98ec88ef44c991224050835dcc6b", + "End": "c9f3605f425142e49b818e97c7ec8051", + "Id": "9d228ba79ba54bed858f984cc02ea398", + "IsHidden": "False" + }, + { + "Start": "381e0f9e007a4f60af869b1ab8f9c687", + "End": "a2e8d3e7b8d244f7a778bb2feb48c907", + "Id": "e021e2d4c0a84d12b2358bac4e338300", + "IsHidden": "False" + }, + { + "Start": "381e0f9e007a4f60af869b1ab8f9c687", + "End": "08d43ba84ecd403c9a785c2bff9722b4", + "Id": "a2b745f682d2445d923a5426bc0c0cac", + "IsHidden": "False" + }, + { + "Start": "381e0f9e007a4f60af869b1ab8f9c687", + "End": "34045992774e412c8d21fb0cdc13b550", + "Id": "c2567daa2e0644ec8d499b558825cc0e", + "IsHidden": "False" + } + ], + "Dependencies": [], + "NodeLibraryDependencies": [], + "Thumbnail": "", + "GraphDocumentationURL": null, + "ExtensionWorkspaceData": [ + { + "ExtensionGuid": "28992e1d-abb9-417f-8b1b-05e053bee670", + "Name": "Properties", + "Version": "2.19", + "Data": {} + } + ], + "Author": "None provided", + "Linting": { + "activeLinter": "None", + "activeLinterId": "7b75fb44-43fd-4631-a878-29f4d5d8399a", + "warningCount": 0, + "errorCount": 0 + }, + "Bindings": [], + "View": { + "Dynamo": { + "ScaleFactor": 1.0, + "HasRunWithoutCrash": true, + "IsVisibleInDynamoLibrary": true, + "Version": "2.19.0.5742", + "RunType": "Automatic", + "RunPeriod": "1000" + }, + "Camera": { + "Name": "_Background Preview", + "EyeX": -2.3680846691131592, + "EyeY": 3.16054105758667, + "EyeZ": -10.044923782348633, + "LookX": 3.8618874549865723, + "LookY": -0.66080021858215332, + "LookZ": 6.5273284912109375, + "UpX": -0.06558285653591156, + "UpY": 0.99167114496231079, + "UpZ": -0.11084761470556259 + }, + "ConnectorPins": [], + "NodeViews": [ + { + "Id": "149651b06b454fd6a9c2a0302c1103a9", + "Name": "Vector.ByCoordinates", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2394.3275265767497, + "Y": 3871.23247073368 + }, + { + "Id": "5dd6bf4863824faf91ef85623e357fae", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2140.3275265767497, + "Y": 3905.05997073368 + }, + { + "Id": "6c8310f38b96449f8f88bd7eb4873744", + "Name": "Vector.Length", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 3068.3275265767497, + "Y": 3919.23247073368 + }, + { + "Id": "7b94ac48d72746fa954c0598a31a7c1e", + "Name": "Watch", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 3376.3275265767497, + "Y": 3919.23247073368 + }, + { + "Id": "7754a3af90b14041b8610c575f9877c5", + "Name": "Watch", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 3376.3275265767497, + "Y": 3768.23247073368 + }, + { + "Id": "1a9e6708d97845a4801fa32914c57421", + "Name": "Vector.Length", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 3068.3275265767497, + "Y": 3768.23247073368 + }, + { + "Id": "4eb49fdafed1499ea6f15d6c91361bce", + "Name": "Vector.Scale", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2727.3275265767497, + "Y": 3871.23247073368 + }, + { + "Id": "ca663badb76449f58b966fdbb1e8669d", + "Name": "Watch", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 3376.3275265767497, + "Y": 4070.23247073368 + }, + { + "Id": "6ca2b44cbc6c4c069e4781c8eed0496b", + "Name": "Vector.Length", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 3068.3275265767497, + "Y": 4070.23247073368 + }, + { + "Id": "383a5a5a95164061adcbbd34cf12815b", + "Name": "Vector.Scale", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2727.3275265767497, + "Y": 4118.23247073368 + }, + { + "Id": "c822eaff2c62419ebc4de600f0961087", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2394.3275265767497, + "Y": 4186.0599707336805 + } + ], + "Annotations": [], + "X": -675.85951208778488, + "Y": -1526.4036443658533, + "Zoom": 0.46370552382733077 + } +} \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Vector.Scale(vector, xScaleFactor, yScaleFactor, zScaleFactor).md b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Vector.Scale(vector, xScaleFactor, yScaleFactor, zScaleFactor).md new file mode 100644 index 00000000000..5c2c9d64bc4 --- /dev/null +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Vector.Scale(vector, xScaleFactor, yScaleFactor, zScaleFactor).md @@ -0,0 +1,9 @@ +## In Depth +`Vector.Scale (vector, xScaleFactor, yScaleFactor, zScaleFactor)` returns a new vector scaled non-uniformly in the X, Y, and Z directions. + +In the example below, two new vectors are scaled from an X scale factor and Y/Z scale factors, respectively. All given scale factors are 2, yet different vector lengths are returned from scaling in different and/or multiple directions. + +___ +## Example File + +![Vector.Scale](./Autodesk.DesignScript.Geometry.Vector.Scale(vector,%20xScaleFactor,%20yScaleFactor,%20zScaleFactor)_img.jpg) \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Vector.Scale(vector, xScaleFactor, yScaleFactor, zScaleFactor)_img.jpg b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Vector.Scale(vector, xScaleFactor, yScaleFactor, zScaleFactor)_img.jpg new file mode 100644 index 00000000000..dc373b67648 Binary files /dev/null and b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Vector.Scale(vector, xScaleFactor, yScaleFactor, zScaleFactor)_img.jpg differ diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Vector.Z.dyn b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Vector.Z.dyn index 9e5964c33ca..5dc9b474406 100644 --- a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Vector.Z.dyn +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Vector.Z.dyn @@ -1,8 +1,8 @@ { - "Uuid": "3c9d0464-8643-5ffe-96e5-ab1769818209", + "Uuid": "b28933ce-a7c4-48ce-af6e-d354a4e006ff", "IsCustomNode": false, "Description": "", - "Name": "Z", + "Name": "Autodesk.DesignScript.Geometry.Vector.Z", "ElementResolver": { "ResolutionMap": { "Point": { @@ -17,47 +17,48 @@ }, "Inputs": [ { - "Id": "b8fc629975a445ffa681797e35fd8042", + "Id": "c827651eef88487ab612e34b04f6e15c", "Name": "Vector Scale", "Type": "number", + "Type2": "number", "Value": "1.65", "MaximumValue": 2.0, "MinimumValue": 1.0, "StepValue": 0.01, "NumberType": "Double", - "Description": "A slider that produces numeric values." + "Description": "Produces numeric values", + "SelectedIndex": 0 } ], "Outputs": [], "Nodes": [ { "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "b743a19a2230487b8e5cf55683b8e880", "NodeType": "FunctionNode", - "FunctionSignature": "Autodesk.DesignScript.Geometry.Line.ByStartPointDirectionLength@Autodesk.DesignScript.Geometry.Point,Autodesk.DesignScript.Geometry.Vector,double", - "Id": "6d1ee31ae12c4eab8b51c20d47755015", "Inputs": [ { - "Id": "ac92e80c505d4ea7a68ad8a2d2a1696c", + "Id": "ae0213ab90ae49b1976acdd808529d08", "Name": "startPoint", - "Description": "Point", + "Description": "Line start point\n\nPoint", "UsingDefaultValue": false, "Level": 2, "UseLevels": false, "KeepListStructure": false }, { - "Id": "e379b0273c0c4fa68865357988981c9e", + "Id": "df26943265d94874983d0fda2ea969d9", "Name": "direction", - "Description": "Vector", + "Description": "Direction vector\n\nVector", "UsingDefaultValue": false, "Level": 2, "UseLevels": false, "KeepListStructure": false }, { - "Id": "b88e4335c7974225a8fd857da44faaa1", + "Id": "e3637b9c33e543d18bda072d74f064bc", "Name": "length", - "Description": "double\nDefault value : 1", + "Description": "Length of line\n\ndouble\nDefault value : 1", "UsingDefaultValue": true, "Level": 2, "UseLevels": false, @@ -66,25 +67,28 @@ ], "Outputs": [ { - "Id": "44623ba9ce644339a571de7448a99f95", + "Id": "acc16b5382b745d2a699b417fd5c8d46", "Name": "Line", - "Description": "Line", + "Description": "Line from start direction and length", "UsingDefaultValue": false, "Level": 2, "UseLevels": false, "KeepListStructure": false } ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Line.ByStartPointDirectionLength@Autodesk.DesignScript.Geometry.Point,Autodesk.DesignScript.Geometry.Vector,double", "Replication": "Auto", "Description": "Create a straight Line starting at start Point, extending in Vector direction by specified length.\n\nLine.ByStartPointDirectionLength (startPoint: Point, direction: Vector, length: double = 1): Line" }, { "ConcreteType": "CoreNodeModels.Watch, CoreNodeModels", + "WatchWidth": 27.2, + "WatchHeight": 38.4, + "Id": "b7f9cd398d7f4f2299ab4940d217f2a2", "NodeType": "ExtensionNode", - "Id": "9b79cf50ce83432bbe01330522ae3dfb", "Inputs": [ { - "Id": "ba3b3f405e6c4682aeb8aaa5e0d5d40b", + "Id": "a440b288f13a43f498fa1cd8d3332b41", "Name": "", "Description": "Node to evaluate.", "UsingDefaultValue": false, @@ -95,7 +99,7 @@ ], "Outputs": [ { - "Id": "1fc0c2934f234ce0be69fc02b063e8de", + "Id": "2ff5ca1f9da84f718f38cc2dc1b4d093", "Name": "", "Description": "Watch contents.", "UsingDefaultValue": false, @@ -105,17 +109,16 @@ } ], "Replication": "Disabled", - "Description": "Visualize the output of node." + "Description": "Visualizes a node's output" }, { "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "1bb4946e914245bba169bfc501e18bb9", "NodeType": "CodeBlockNode", - "Code": "Point.ByCoordinates(0,2,0);\nVector.ByCoordinates(4,2,3);", - "Id": "b2f274f8a001463b84f919669986dec5", "Inputs": [], "Outputs": [ { - "Id": "c1133eb4143e4c92af52bd41231b146e", + "Id": "c2b8f39bd790430abb674a638434cd9e", "Name": "", "Description": "Value of expression at line 1", "UsingDefaultValue": false, @@ -124,7 +127,7 @@ "KeepListStructure": false }, { - "Id": "f131975a02c441c5ab83a4fa4a7ea197", + "Id": "771aa1583f8f4d0aa2e54281badadb7e", "Name": "", "Description": "Value of expression at line 2", "UsingDefaultValue": false, @@ -134,21 +137,21 @@ } ], "Replication": "Disabled", - "Description": "Allows for DesignScript code to be authored directly" + "Description": "Allows for DesignScript code to be authored directly", + "Code": "Point.ByCoordinates(0,2,0);\nVector.ByCoordinates(4,2,3);" }, { "ConcreteType": "CoreNodeModels.Input.DoubleSlider, CoreNodeModels", - "NodeType": "NumberInputNode", "NumberType": "Double", "MaximumValue": 2.0, "MinimumValue": 1.0, "StepValue": 0.01, - "InputValue": 1.65, - "Id": "b8fc629975a445ffa681797e35fd8042", + "Id": "c827651eef88487ab612e34b04f6e15c", + "NodeType": "NumberInputNode", "Inputs": [], "Outputs": [ { - "Id": "569c7ccdca3c48208fbcd782ff518863", + "Id": "65452d1995af40ae9291b2315b65714a", "Name": "", "Description": "Double", "UsingDefaultValue": false, @@ -158,16 +161,16 @@ } ], "Replication": "Disabled", - "Description": "A slider that produces numeric values." + "Description": "Produces numeric values", + "InputValue": 1.65 }, { "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "539bde5f63bb4679b741a1efabb947b4", "NodeType": "FunctionNode", - "FunctionSignature": "Autodesk.DesignScript.Geometry.Vector.Scale@double", - "Id": "5cc0666e903141948c079c526d64b536", "Inputs": [ { - "Id": "45c771ee4e76467698c6facc569b7201", + "Id": "1dea5a23a8164e50807586d6683f7cbb", "Name": "vector", "Description": "Autodesk.DesignScript.Geometry.Vector", "UsingDefaultValue": false, @@ -176,9 +179,9 @@ "KeepListStructure": false }, { - "Id": "37ee545a12794760b154f31baeb51792", + "Id": "e4ff7d8b6108466497372a9f2e941d89", "Name": "scale_factor", - "Description": "double\nDefault value : 1", + "Description": "Scale factor\n\ndouble\nDefault value : 1", "UsingDefaultValue": true, "Level": 2, "UseLevels": false, @@ -187,25 +190,28 @@ ], "Outputs": [ { - "Id": "e972f628bc96487c8c92c5d261de7109", + "Id": "2faccf4036ba47c59c1fb4e0c5994e06", "Name": "Vector", - "Description": "Vector", + "Description": "Scaled vector", "UsingDefaultValue": false, "Level": 2, "UseLevels": false, "KeepListStructure": false } ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Vector.Scale@double", "Replication": "Auto", "Description": "Scale Vector uniformly around the origin\n\nVector.Scale (scale_factor: double = 1): Vector" }, { "ConcreteType": "CoreNodeModels.Watch, CoreNodeModels", + "WatchWidth": 49.6, + "WatchHeight": 38.4, + "Id": "721fe57caf5546fc9fb5fe2a0a6a0608", "NodeType": "ExtensionNode", - "Id": "beb23d6dcc2f4a9a85d81f988ba6b3b1", "Inputs": [ { - "Id": "397c7d5b87e541539e2f2557e003c91f", + "Id": "7d8e44c48adb48bf996ed3b2f77a26f0", "Name": "", "Description": "Node to evaluate.", "UsingDefaultValue": false, @@ -216,7 +222,7 @@ ], "Outputs": [ { - "Id": "c7e2ad343cd144348ebfaad08b09e0ae", + "Id": "c6a2bfe3ac7b493a9f5497eda2b1b72f", "Name": "", "Description": "Watch contents.", "UsingDefaultValue": false, @@ -226,16 +232,15 @@ } ], "Replication": "Disabled", - "Description": "Visualize the output of node." + "Description": "Visualizes a node's output" }, { "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "ef904e758e524ac08e86d1b3b03d2286", "NodeType": "FunctionNode", - "FunctionSignature": "Autodesk.DesignScript.Geometry.Vector.Length", - "Id": "b0cc6cb7929c44e7852b0f68ff15f88f", "Inputs": [ { - "Id": "efa6a03474ce4049863bca3e1e579aba", + "Id": "010922a510d646039886e1369c865e88", "Name": "vector", "Description": "Autodesk.DesignScript.Geometry.Vector", "UsingDefaultValue": false, @@ -246,7 +251,7 @@ ], "Outputs": [ { - "Id": "270e223431c7402a8d4dbbd4ea7cf0ed", + "Id": "92b0e600812742d3993ccae8428555a8", "Name": "double", "Description": "double", "UsingDefaultValue": false, @@ -255,17 +260,17 @@ "KeepListStructure": false } ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Vector.Length", "Replication": "Auto", - "Description": "Get the length of the vector - otherwise known as the Euclidean norm\n\nVector.Length: double" + "Description": "Get the length of the vector otherwise known as the Euclidean norm.\n\nVector.Length: double" }, { "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "5138f09bfa184eeb80877b29f8323917", "NodeType": "FunctionNode", - "FunctionSignature": "Autodesk.DesignScript.Geometry.Vector.Z", - "Id": "7577e97b30a74957b1bf28e693c48894", "Inputs": [ { - "Id": "33dee35212394145b35adaa7cf64936c", + "Id": "20a559de5f5349c1889e1266c170b85a", "Name": "vector", "Description": "Autodesk.DesignScript.Geometry.Vector", "UsingDefaultValue": false, @@ -276,7 +281,7 @@ ], "Outputs": [ { - "Id": "4a982f361d254845b39b069c7597f1cf", + "Id": "6166473e124d4d9b836aef1a14a13565", "Name": "double", "Description": "double", "UsingDefaultValue": false, @@ -285,17 +290,17 @@ "KeepListStructure": false } ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Vector.Z", "Replication": "Auto", - "Description": "Get the Z component of a Vector\n\nVector.Z: double" + "Description": "Get the Z value of a vector.\n\nVector.Z: double" }, { "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "43f9a7cfc61d42dd84ed1b6b9409b219", "NodeType": "FunctionNode", - "FunctionSignature": "Autodesk.DesignScript.Geometry.Vector.Z", - "Id": "c87e7c7f7bc74f25920b2a23a9be4d86", "Inputs": [ { - "Id": "8ad564b79da94307b37dcc757edc585e", + "Id": "407fd992ce8e4cc08f5ea772dac6ec47", "Name": "vector", "Description": "Autodesk.DesignScript.Geometry.Vector", "UsingDefaultValue": false, @@ -306,7 +311,7 @@ ], "Outputs": [ { - "Id": "830ec4801f444ee6bcd5120add465a18", + "Id": "e4d7674335b0498a920034762c897cf5", "Name": "double", "Description": "double", "UsingDefaultValue": false, @@ -315,200 +320,210 @@ "KeepListStructure": false } ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Vector.Z", "Replication": "Auto", - "Description": "Get the Z component of a Vector\n\nVector.Z: double" - }, - { - "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", - "NodeType": "CodeBlockNode", - "Code": "", - "Id": "0e491365773d425ea5574210459832c5", - "Inputs": [], - "Outputs": [], - "Replication": "Disabled", - "Description": "Allows for DesignScript code to be authored directly" + "Description": "Get the Z value of a vector.\n\nVector.Z: double" } ], "Connectors": [ { - "Start": "c1133eb4143e4c92af52bd41231b146e", - "End": "ac92e80c505d4ea7a68ad8a2d2a1696c", - "Id": "184d86e724914fe59465c9088c636adf" + "Start": "c2b8f39bd790430abb674a638434cd9e", + "End": "ae0213ab90ae49b1976acdd808529d08", + "Id": "29f48636c6e240a997561f96b6366a88", + "IsHidden": "False" }, { - "Start": "f131975a02c441c5ab83a4fa4a7ea197", - "End": "e379b0273c0c4fa68865357988981c9e", - "Id": "c364452be3744960965ad43a2a5e3efb" + "Start": "771aa1583f8f4d0aa2e54281badadb7e", + "End": "df26943265d94874983d0fda2ea969d9", + "Id": "ca7271f7c2d44ccb82862a7afec7786b", + "IsHidden": "False" }, { - "Start": "f131975a02c441c5ab83a4fa4a7ea197", - "End": "45c771ee4e76467698c6facc569b7201", - "Id": "679ed38a4d1446edab2808b78c35541b" + "Start": "771aa1583f8f4d0aa2e54281badadb7e", + "End": "1dea5a23a8164e50807586d6683f7cbb", + "Id": "b2dc53e9a99444229f2485aed182bfd0", + "IsHidden": "False" }, { - "Start": "f131975a02c441c5ab83a4fa4a7ea197", - "End": "8ad564b79da94307b37dcc757edc585e", - "Id": "9ddac0df12bd4e05bb8c988f447bfc7f" + "Start": "771aa1583f8f4d0aa2e54281badadb7e", + "End": "407fd992ce8e4cc08f5ea772dac6ec47", + "Id": "0d22eea670ff466da13d1366752116c9", + "IsHidden": "False" }, { - "Start": "569c7ccdca3c48208fbcd782ff518863", - "End": "37ee545a12794760b154f31baeb51792", - "Id": "7fbbf3e698af4afda114cb3a19d5b686" + "Start": "65452d1995af40ae9291b2315b65714a", + "End": "e4ff7d8b6108466497372a9f2e941d89", + "Id": "d6093af411824a6abe80e61a44b279f1", + "IsHidden": "False" }, { - "Start": "e972f628bc96487c8c92c5d261de7109", - "End": "efa6a03474ce4049863bca3e1e579aba", - "Id": "a725762fdd2f4f66823ad1aa638381a4" + "Start": "2faccf4036ba47c59c1fb4e0c5994e06", + "End": "010922a510d646039886e1369c865e88", + "Id": "50ec043b15124d469ca0badd5c239591", + "IsHidden": "False" }, { - "Start": "e972f628bc96487c8c92c5d261de7109", - "End": "33dee35212394145b35adaa7cf64936c", - "Id": "02817af73ee346b28b4e66fe007198be" + "Start": "2faccf4036ba47c59c1fb4e0c5994e06", + "End": "20a559de5f5349c1889e1266c170b85a", + "Id": "0d914c03563b44d79f7a3e194d951e69", + "IsHidden": "False" }, { - "Start": "270e223431c7402a8d4dbbd4ea7cf0ed", - "End": "b88e4335c7974225a8fd857da44faaa1", - "Id": "77c4503ba76d4ae186ebb4d992784f94" + "Start": "92b0e600812742d3993ccae8428555a8", + "End": "e3637b9c33e543d18bda072d74f064bc", + "Id": "6348f49b51604b00bd6f85857871f4ab", + "IsHidden": "False" }, { - "Start": "4a982f361d254845b39b069c7597f1cf", - "End": "397c7d5b87e541539e2f2557e003c91f", - "Id": "011cca1bc57f4f448c9bf0f6d13ce18c" + "Start": "6166473e124d4d9b836aef1a14a13565", + "End": "7d8e44c48adb48bf996ed3b2f77a26f0", + "Id": "6681ed0730ca4c1b9567a636922fa1a5", + "IsHidden": "False" }, { - "Start": "830ec4801f444ee6bcd5120add465a18", - "End": "ba3b3f405e6c4682aeb8aaa5e0d5d40b", - "Id": "bb7f90ecb81f4a35a0113a3e7a544454" + "Start": "e4d7674335b0498a920034762c897cf5", + "End": "a440b288f13a43f498fa1cd8d3332b41", + "Id": "ce330dc028f3482a91d781d8c0d45a13", + "IsHidden": "False" } ], "Dependencies": [], + "NodeLibraryDependencies": [], + "Thumbnail": "", + "GraphDocumentationURL": null, + "ExtensionWorkspaceData": [ + { + "ExtensionGuid": "28992e1d-abb9-417f-8b1b-05e053bee670", + "Name": "Properties", + "Version": "2.19", + "Data": {} + } + ], + "Author": "", + "Linting": { + "activeLinter": "None", + "activeLinterId": "7b75fb44-43fd-4631-a878-29f4d5d8399a", + "warningCount": 0, + "errorCount": 0 + }, "Bindings": [], "View": { "Dynamo": { "ScaleFactor": 1.0, "HasRunWithoutCrash": true, "IsVisibleInDynamoLibrary": true, - "Version": "2.0.1.5055", - "RunType": "Automatic", + "Version": "2.19.0.5742", + "RunType": "Manual", "RunPeriod": "1000" }, "Camera": { - "Name": "Background Preview", - "EyeX": -2.022646427154541, - "EyeY": 8.1483144760131836, - "EyeZ": 4.4798989295959473, - "LookX": 2.7799487113952637, - "LookY": -7.4253988265991211, - "LookZ": -12.051481246948242, - "UpX": 0.0716925710439682, - "UpY": 0.94776839017868042, - "UpZ": -0.31079769134521484 + "Name": "_Background Preview", + "EyeX": -11.20389461517334, + "EyeY": 17.720888137817383, + "EyeZ": 21.985492706298828, + "LookX": 6.20389461517334, + "LookY": -6.7208881378173828, + "LookZ": -29.985492706298828, + "UpX": 0.0, + "UpY": 1.0, + "UpZ": 0.0 }, + "ConnectorPins": [], "NodeViews": [ { - "ShowGeometry": true, + "Id": "b743a19a2230487b8e5cf55683b8e880", "Name": "Line.ByStartPointDirectionLength", - "Id": "6d1ee31ae12c4eab8b51c20d47755015", "IsSetAsInput": false, "IsSetAsOutput": false, "Excluded": false, - "X": 3725.2175766366431, - "Y": 3819.89312774838 + "ShowGeometry": true, + "X": 3710.031881419729, + "Y": 3711.2021157451677 }, { - "ShowGeometry": true, + "Id": "b7f9cd398d7f4f2299ab4940d217f2a2", "Name": "Watch", - "Id": "9b79cf50ce83432bbe01330522ae3dfb", "IsSetAsInput": false, "IsSetAsOutput": false, "Excluded": false, - "X": 3530.3145161311227, - "Y": 3913.3102894390863 + "ShowGeometry": true, + "X": 3737.6603860926266, + "Y": 4012.7184708853547 }, { - "ShowGeometry": true, + "Id": "1bb4946e914245bba169bfc501e18bb9", "Name": "Code Block", - "Id": "b2f274f8a001463b84f919669986dec5", "IsSetAsInput": false, "IsSetAsOutput": false, "Excluded": false, - "X": 2708.8970724672727, - "Y": 3859.5742314161466 + "ShowGeometry": true, + "X": 2642.6603860926266, + "Y": 3900.2009708853548 }, { - "ShowGeometry": true, + "Id": "c827651eef88487ab612e34b04f6e15c", "Name": "Vector Scale", - "Id": "b8fc629975a445ffa681797e35fd8042", "IsSetAsInput": true, "IsSetAsOutput": false, "Excluded": false, - "X": 2655.10319554861, - "Y": 4094.25408697423 + "ShowGeometry": true, + "X": 2634.9244047842153, + "Y": 4096.3983774274111 }, { - "ShowGeometry": true, + "Id": "539bde5f63bb4679b741a1efabb947b4", "Name": "Vector.Scale", - "Id": "5cc0666e903141948c079c526d64b536", "IsSetAsInput": false, "IsSetAsOutput": false, "Excluded": false, - "X": 3007.80233960227, - "Y": 4069.34975810021 + "ShowGeometry": true, + "X": 3096.1860870272058, + "Y": 4106.3399662124575 }, { - "ShowGeometry": true, + "Id": "721fe57caf5546fc9fb5fe2a0a6a0608", "Name": "Watch", - "Id": "beb23d6dcc2f4a9a85d81f988ba6b3b1", "IsSetAsInput": false, "IsSetAsOutput": false, "Excluded": false, - "X": 3528.9683361919829, - "Y": 4016.4843387362462 + "ShowGeometry": true, + "X": 3737.6603860926266, + "Y": 4164.7184708853547 }, { - "ShowGeometry": true, + "Id": "ef904e758e524ac08e86d1b3b03d2286", "Name": "Vector.Length", - "Id": "b0cc6cb7929c44e7852b0f68ff15f88f", "IsSetAsInput": false, "IsSetAsOutput": false, "Excluded": false, - "X": 3338.96260462975, - "Y": 4159.54381402233 + "ShowGeometry": true, + "X": 3432.9758066533741, + "Y": 3871.1390316330185 }, { - "ShowGeometry": true, + "Id": "5138f09bfa184eeb80877b29f8323917", "Name": "Vector.Z", - "Id": "7577e97b30a74957b1bf28e693c48894", "IsSetAsInput": false, "IsSetAsOutput": false, "Excluded": false, - "X": 3267.7750376260924, - "Y": 4016.4843387362462 + "ShowGeometry": true, + "X": 3429.6603860926266, + "Y": 4164.7184708853547 }, { - "ShowGeometry": true, + "Id": "43f9a7cfc61d42dd84ed1b6b9409b219", "Name": "Vector.Z", - "Id": "c87e7c7f7bc74f25920b2a23a9be4d86", "IsSetAsInput": false, "IsSetAsOutput": false, "Excluded": false, - "X": 3266.778264681403, - "Y": 3913.3102894390863 - }, - { "ShowGeometry": true, - "Name": "Code Block", - "Id": "0e491365773d425ea5574210459832c5", - "IsSetAsInput": false, - "IsSetAsOutput": false, - "Excluded": false, - "X": 2809.0, - "Y": 4202.0 + "X": 3429.6603860926266, + "Y": 4014.7184708853547 } ], "Annotations": [], - "X": -2654.4358752323133, - "Y": -3572.9092596659311, - "Zoom": 1.0032375029116336 + "X": -1625.3404083055402, + "Y": -2504.6476668377768, + "Zoom": 0.71455759610627723 } } \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Vector.Z.md b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Vector.Z.md index b46ac1f155b..13a3268f8e4 100644 --- a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Vector.Z.md +++ b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Vector.Z.md @@ -1,7 +1,9 @@ ## In Depth -Z returns a double representing a reference point's Z coordinate value in the Revit conceptual design environment. +`Vector.Z` returns a double representing a reference point’s Z coordinate value. + +In the example below, two `Vector.Z` nodes are used to compare the Z coordinate values of an original and scaled vector. + ___ ## Example File -![Z](./Autodesk.DesignScript.Geometry.Vector.Z_img.jpg) - +![Vector.Z](./Autodesk.DesignScript.Geometry.Vector.Z_img.jpg) \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Vector.Z_img.jpg b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Vector.Z_img.jpg index bfda9dc77ba..f97da7a4d9c 100644 Binary files a/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Vector.Z_img.jpg and b/doc/distrib/NodeHelpFiles/Autodesk.DesignScript.Geometry.Vector.Z_img.jpg differ diff --git a/doc/distrib/NodeHelpFiles/DSCore.List.GroupByKey.dyn b/doc/distrib/NodeHelpFiles/DSCore.List.GroupByKey.dyn new file mode 100644 index 00000000000..5f3d1486ae1 --- /dev/null +++ b/doc/distrib/NodeHelpFiles/DSCore.List.GroupByKey.dyn @@ -0,0 +1,426 @@ +{ + "Uuid": "ba3ce1ca-4a82-4697-bbce-cd68b8cdda8d", + "IsCustomNode": false, + "Description": "", + "Name": "DSCore.List.GroupByKey", + "ElementResolver": { + "ResolutionMap": {} + }, + "Inputs": [], + "Outputs": [], + "Nodes": [ + { + "ConcreteType": "CoreNodeModels.Watch, CoreNodeModels", + "WatchWidth": 200.0, + "WatchHeight": 200.0, + "Id": "58d21de2edf54c1fbc45376121758f75", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "11d65ca2eb574b5c8a1a28d9b35c8cf5", + "Name": "", + "Description": "Node to show output from", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "38a3f88024024638aa711ebad8958776", + "Name": "", + "Description": "Node output", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Visualizes a node's output" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "aef6856c750a440fa5b877b0b510a9af", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "7056a2a89720404ba47b4b17c0bd2a47", + "Name": "amount", + "Description": "Amount of random numbers the result list will contain.\n\nint", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "7e47d1e133d04ed0a6fa5a00d5142447", + "Name": "number", + "Description": "List of random numbers between 0 and 1.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Math.RandomList@int", + "Replication": "Auto", + "Description": "Produces a list containing the given amount of random doubles in the range of [0, 1).\n\nMath.RandomList (amount: int): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "c088bafe734540c4b699f98f95c27eed", + "NodeType": "CodeBlockNode", + "Inputs": [ + { + "Id": "6da42f99c57041da8e2bd04c3e309c55", + "Name": "x", + "Description": "x", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "cb2365710e90401a808a7877b1ef6b51", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "x*5;" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "4de0cf403a8f4743967ba9ee772e1057", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "e412a7e87179423fa4c389f420e524e0", + "Name": "number", + "Description": "Number to round down\n\ndouble", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "3608ea1f1b0e48a1b665ea6e436bf65d", + "Name": "int", + "Description": "First integer smaller than the number", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Math.Floor@double", + "Replication": "Auto", + "Description": "Returns the first integer smaller than the number.\n\nMath.Floor (number: double): int" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "be55be2ea9434c89b4ea25820075eff4", + "NodeType": "CodeBlockNode", + "Inputs": [], + "Outputs": [ + { + "Id": "1ce7510176c94ceea71c29865279da19", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "10;" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "2d1c0e5312de49d99d211012a9737657", + "NodeType": "CodeBlockNode", + "Inputs": [], + "Outputs": [ + { + "Id": "e99af83ca85447cf85281afd7c90fc17", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "0..9..1;" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "c0b4495913774b97ae543d989d257251", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "d2d19b746ed74a09a43668815ed8adcc", + "Name": "list", + "Description": "List of items to group as sublists\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "2b1a11a01b1749928a2a50001563acbb", + "Name": "keys", + "Description": "Key values, one per item in the input list, used for grouping the items\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "2271a2a99036425681dc0f4ae5cc40aa", + "Name": "groups", + "Description": "list of sublists, with items grouped by like key values", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "2a2f068715154703889869a1281fdb6e", + "Name": "uniqueKeys", + "Description": "key value corresponding to each group", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.List.GroupByKey@var[]..[],var[]..[]", + "Replication": "Auto", + "Description": "Group items into sub-lists based on their like key values\n\nList.GroupByKey (list: var[]..[], keys: var[]..[]): var[]..[]" + }, + { + "ConcreteType": "CoreNodeModels.Watch, CoreNodeModels", + "WatchWidth": 182.0, + "WatchHeight": 334.0, + "Id": "6275bf8964ba44bfa2b7c3ea9d851975", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "65a9b056ba074906af56ad7de4b067e7", + "Name": "", + "Description": "Node to show output from", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "6c39c0c2c0c34239acdf802ce3d93217", + "Name": "", + "Description": "Node output", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Visualizes a node's output" + } + ], + "Connectors": [ + { + "Start": "38a3f88024024638aa711ebad8958776", + "End": "2b1a11a01b1749928a2a50001563acbb", + "Id": "1de29811329147b586dfcfa9ebad2728", + "IsHidden": "False" + }, + { + "Start": "7e47d1e133d04ed0a6fa5a00d5142447", + "End": "6da42f99c57041da8e2bd04c3e309c55", + "Id": "67b172fc1df449888755126feb2376ea", + "IsHidden": "False" + }, + { + "Start": "cb2365710e90401a808a7877b1ef6b51", + "End": "e412a7e87179423fa4c389f420e524e0", + "Id": "a16f111093554e54b35aa285b149b72a", + "IsHidden": "False" + }, + { + "Start": "3608ea1f1b0e48a1b665ea6e436bf65d", + "End": "11d65ca2eb574b5c8a1a28d9b35c8cf5", + "Id": "d2125f3b794c419d92ca04597c58ba8f", + "IsHidden": "False" + }, + { + "Start": "1ce7510176c94ceea71c29865279da19", + "End": "7056a2a89720404ba47b4b17c0bd2a47", + "Id": "a051e3ee4c2e499ba7e3b7365fde5527", + "IsHidden": "False" + }, + { + "Start": "e99af83ca85447cf85281afd7c90fc17", + "End": "d2d19b746ed74a09a43668815ed8adcc", + "Id": "e31a2dab3c73422fb0ff58775c04598c", + "IsHidden": "False" + }, + { + "Start": "2271a2a99036425681dc0f4ae5cc40aa", + "End": "65a9b056ba074906af56ad7de4b067e7", + "Id": "4b34c2aaf5a24c12a97ef1cbcbd9885f", + "IsHidden": "False" + } + ], + "Dependencies": [], + "NodeLibraryDependencies": [], + "Thumbnail": "", + "GraphDocumentationURL": null, + "ExtensionWorkspaceData": [ + { + "ExtensionGuid": "28992e1d-abb9-417f-8b1b-05e053bee670", + "Name": "Properties", + "Version": "2.19", + "Data": {} + } + ], + "Author": "None provided", + "Linting": { + "activeLinter": "None", + "activeLinterId": "7b75fb44-43fd-4631-a878-29f4d5d8399a", + "warningCount": 0, + "errorCount": 0 + }, + "Bindings": [], + "View": { + "Dynamo": { + "ScaleFactor": 1.0, + "HasRunWithoutCrash": true, + "IsVisibleInDynamoLibrary": true, + "Version": "2.19.0.5742", + "RunType": "Automatic", + "RunPeriod": "1000" + }, + "Camera": { + "Name": "_Background Preview", + "EyeX": -13.988694190979004, + "EyeY": 18.264490127563477, + "EyeZ": 21.429862976074219, + "LookX": 16.723785400390625, + "LookY": -5.2774238586425781, + "LookZ": -19.588394165039063, + "UpX": -0.009065740741789341, + "UpY": 0.99990254640579224, + "UpZ": 0.010618607513606548 + }, + "ConnectorPins": [], + "NodeViews": [ + { + "Id": "58d21de2edf54c1fbc45376121758f75", + "Name": "Watch", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 302.501436626844, + "Y": 131.519626222477 + }, + { + "Id": "aef6856c750a440fa5b877b0b510a9af", + "Name": "Math.RandomList", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -565.49856337315555, + "Y": 131.34712622247744 + }, + { + "Id": "c088bafe734540c4b699f98f95c27eed", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -244.49856337315555, + "Y": 131.34712622247744 + }, + { + "Id": "4de0cf403a8f4743967ba9ee772e1057", + "Name": "Math.Floor", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 9.5014366268444519, + "Y": 131.51962622247746 + }, + { + "Id": "be55be2ea9434c89b4ea25820075eff4", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -819.49856337315555, + "Y": 131.17462622247743 + }, + { + "Id": "2d1c0e5312de49d99d211012a9737657", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 140.389641087658, + "Y": -60.4416921128201 + }, + { + "Id": "c0b4495913774b97ae543d989d257251", + "Name": "List.GroupByKey", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 679.50143662684445, + "Y": 40.519626222477442 + }, + { + "Id": "6275bf8964ba44bfa2b7c3ea9d851975", + "Name": "Watch", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 984.86789690969658, + "Y": 32.134533349760773 + } + ], + "Annotations": [], + "X": 662.924994525159, + "Y": 204.95908523623751, + "Zoom": 0.43442824678868786 + } +} \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/DSCore.List.GroupByKey.md b/doc/distrib/NodeHelpFiles/DSCore.List.GroupByKey.md new file mode 100644 index 00000000000..c1f3e0fc684 --- /dev/null +++ b/doc/distrib/NodeHelpFiles/DSCore.List.GroupByKey.md @@ -0,0 +1,8 @@ +## In Depth +`List.GroupByKey` groups items from an input list based on a list of keys. The list of keys should have the same number of elements as the input list. Items in the original list that correspond to matching keys are grouped together in an output list. + +In the example below, we use a range of numbers between 0 and 9 as the input list. We also generate a list of 10 random numbers between 0 and 4 to use as the keys. `List.GroupByKey` outputs a nested list of elements, grouped according to the corresponding key. It also outputs a list of the unique keys. +___ +## Example File + +![List.GroupByKey](./DSCore.List.GroupByKey_img.jpg) \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/DSCore.List.GroupByKey_img.jpg b/doc/distrib/NodeHelpFiles/DSCore.List.GroupByKey_img.jpg new file mode 100644 index 00000000000..748e824cbd7 Binary files /dev/null and b/doc/distrib/NodeHelpFiles/DSCore.List.GroupByKey_img.jpg differ diff --git a/doc/distrib/NodeHelpFiles/DSCore.List.Insert.dyn b/doc/distrib/NodeHelpFiles/DSCore.List.Insert.dyn new file mode 100644 index 00000000000..a54cafb73f0 --- /dev/null +++ b/doc/distrib/NodeHelpFiles/DSCore.List.Insert.dyn @@ -0,0 +1,394 @@ +{ + "Uuid": "a4b7741a-778e-4326-97f6-a5d7795cb0af", + "IsCustomNode": false, + "Description": "", + "Name": "DSCore.List.Insert", + "ElementResolver": { + "ResolutionMap": {} + }, + "Inputs": [], + "Outputs": [], + "Nodes": [ + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "b5c2449a66a6455e800dc12d069b4f39", + "NodeType": "CodeBlockNode", + "Inputs": [], + "Outputs": [ + { + "Id": "a5e141f4181c4c35b450077f2ff402cb", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "0..12..#6;" + }, + { + "ConcreteType": "CoreNodeModels.Watch, CoreNodeModels", + "WatchWidth": 200.0, + "WatchHeight": 200.0, + "Id": "e8d39e9c482b4ab8bbe6dbbdc86fef4a", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "9ab5f1aea6d94a86980ed13784c61782", + "Name": "", + "Description": "Node to show output from", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "135adb1c063a43d1b541b4271498246b", + "Name": "", + "Description": "Node output", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Visualizes a node's output" + }, + { + "ConcreteType": "CoreNodeModels.Watch, CoreNodeModels", + "WatchWidth": 200.0, + "WatchHeight": 200.0, + "Id": "c9a8b04b98d342e89d318f24666fcc9b", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "4679ecc55f1e46749ab1cbd41a0afdc1", + "Name": "", + "Description": "Node to show output from", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "1ee64d9e4c954015a9f6b44f8e520229", + "Name": "", + "Description": "Node output", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Visualizes a node's output" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "3d03d167d2264cde8de762a5840ae360", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "1fa6494e9c3f48d8bc6801a5d2b5dcda", + "Name": "list", + "Description": "The list the element will be inserted to\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "7a6e0b292bb94f97942960cecb0eef32", + "Name": "element", + "Description": "The element to be inserted\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "caacc9f925114cdab696840f32a4b8c8", + "Name": "index", + "Description": "Specifies the location in the list of the element to be inserted\n\nint", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "211366c4e08c4ef8b899d00e0e91c0b5", + "Name": "list", + "Description": "List with the element inserted", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.List.Insert@var[]..[],var[]..[],int", + "Replication": "Auto", + "Description": "Inserts an element into a list at specified index.\n\nList.Insert (list: var[]..[], element: var[]..[], index: int): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "18c95556047840fdb9202ae1524b5163", + "NodeType": "CodeBlockNode", + "Inputs": [], + "Outputs": [ + { + "Id": "949445a6b9dc4563880bc978fbc84bf0", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "2;" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "428044e5faed45df9f77c3ef733d05d6", + "NodeType": "CodeBlockNode", + "Inputs": [], + "Outputs": [ + { + "Id": "35445dc7f6da4473a09f77c3b285ca16", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "dc91327520b84606a8531ca97deea906", + "Name": "", + "Description": "Value of expression at line 2", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "\"Hello\";\n\"List!\";" + }, + { + "ConcreteType": "CoreNodeModels.CreateList, CoreNodeModels", + "VariableInputPorts": true, + "Id": "4e6afd6e384a4e07aa06e42a1f15ba3e", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "ead042457c174b14b698838afd4eb3b4", + "Name": "item0", + "Description": "Item Index #0", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "cc001fa75a224e20bee16caaf7dd6cd4", + "Name": "item1", + "Description": "Item Index #1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "3b79f3a3e6c14b9e8bae72ff4af4bc17", + "Name": "list", + "Description": "A list (type: var[]..[])", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Makes a new list from the given inputs" + } + ], + "Connectors": [ + { + "Start": "a5e141f4181c4c35b450077f2ff402cb", + "End": "9ab5f1aea6d94a86980ed13784c61782", + "Id": "abbe27bf17444bcab4ce8a115d30fa36", + "IsHidden": "False" + }, + { + "Start": "a5e141f4181c4c35b450077f2ff402cb", + "End": "1fa6494e9c3f48d8bc6801a5d2b5dcda", + "Id": "706129739d7a48c19c9b9ab36e863809", + "IsHidden": "False" + }, + { + "Start": "211366c4e08c4ef8b899d00e0e91c0b5", + "End": "4679ecc55f1e46749ab1cbd41a0afdc1", + "Id": "391dd9bcb2ef4e59ab38aa90ba6887b5", + "IsHidden": "False" + }, + { + "Start": "949445a6b9dc4563880bc978fbc84bf0", + "End": "caacc9f925114cdab696840f32a4b8c8", + "Id": "3d70c8cd93c44cb390577075d9ba53cb", + "IsHidden": "False" + }, + { + "Start": "35445dc7f6da4473a09f77c3b285ca16", + "End": "ead042457c174b14b698838afd4eb3b4", + "Id": "0986065adb124f2dbcecbc9c2ec1fb48", + "IsHidden": "False" + }, + { + "Start": "dc91327520b84606a8531ca97deea906", + "End": "cc001fa75a224e20bee16caaf7dd6cd4", + "Id": "8f492b312d2f45b2adedec34eb283e98", + "IsHidden": "False" + }, + { + "Start": "3b79f3a3e6c14b9e8bae72ff4af4bc17", + "End": "7a6e0b292bb94f97942960cecb0eef32", + "Id": "0509b22381ed4e7bb6eaec6fc3d22540", + "IsHidden": "False" + } + ], + "Dependencies": [], + "NodeLibraryDependencies": [], + "Thumbnail": "", + "GraphDocumentationURL": null, + "ExtensionWorkspaceData": [ + { + "ExtensionGuid": "28992e1d-abb9-417f-8b1b-05e053bee670", + "Name": "Properties", + "Version": "2.19", + "Data": {} + } + ], + "Author": "None provided", + "Linting": { + "activeLinter": "None", + "activeLinterId": "7b75fb44-43fd-4631-a878-29f4d5d8399a", + "warningCount": 0, + "errorCount": 0 + }, + "Bindings": [], + "View": { + "Dynamo": { + "ScaleFactor": 1.0, + "HasRunWithoutCrash": true, + "IsVisibleInDynamoLibrary": true, + "Version": "2.19.0.5742", + "RunType": "Automatic", + "RunPeriod": "1000" + }, + "Camera": { + "Name": "_Background Preview", + "EyeX": -10.351632118225098, + "EyeY": 13.915582656860352, + "EyeZ": 16.000629425048828, + "LookX": 16.128910064697266, + "LookY": -8.1650753021240234, + "LookZ": -20.504016876220703, + "UpX": 0.053885128349065781, + "UpY": 0.99619466066360474, + "UpZ": -0.068501941859722137 + }, + "ConnectorPins": [], + "NodeViews": [ + { + "Id": "b5c2449a66a6455e800dc12d069b4f39", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 115.16802123486298, + "Y": 2630.5505679965549 + }, + { + "Id": "e8d39e9c482b4ab8bbe6dbbdc86fef4a", + "Name": "Watch", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 675.168021234863, + "Y": 2492.7230679965551 + }, + { + "Id": "c9a8b04b98d342e89d318f24666fcc9b", + "Name": "Watch", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 675.168021234863, + "Y": 2806.7230679965551 + }, + { + "Id": "3d03d167d2264cde8de762a5840ae360", + "Name": "List.Insert", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 378.168021234863, + "Y": 2807.6969668546303 + }, + { + "Id": "18c95556047840fdb9202ae1524b5163", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 115.16802123486298, + "Y": 2956.5505679965549 + }, + { + "Id": "428044e5faed45df9f77c3ef733d05d6", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -138.83197876513702, + "Y": 2786.3780679965548 + }, + { + "Id": "4e6afd6e384a4e07aa06e42a1f15ba3e", + "Name": "List.Create", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 115.16802123486298, + "Y": 2777.7230679965551 + } + ], + "Annotations": [], + "X": 314.80125600083085, + "Y": -2120.153337040756, + "Zoom": 0.86534757118927974 + } +} \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/DSCore.List.Insert.md b/doc/distrib/NodeHelpFiles/DSCore.List.Insert.md new file mode 100644 index 00000000000..816e539c987 --- /dev/null +++ b/doc/distrib/NodeHelpFiles/DSCore.List.Insert.md @@ -0,0 +1,9 @@ +## In Depth +`List.Insert` places multiple elements into a list at a given index. + +In the example below, a list containing two strings, "Hello" and "List!", is inserted at index value 2 as a sublist, producing a new list that is one index longer than the original list. + +___ +## Example File + +![List.Insert](./DSCore.List.Insert_img.jpg) \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/DSCore.List.Insert_img.jpg b/doc/distrib/NodeHelpFiles/DSCore.List.Insert_img.jpg new file mode 100644 index 00000000000..05f1e10df20 Binary files /dev/null and b/doc/distrib/NodeHelpFiles/DSCore.List.Insert_img.jpg differ diff --git a/doc/distrib/NodeHelpFiles/DSCore.List.NormalizeDepth.dyn b/doc/distrib/NodeHelpFiles/DSCore.List.NormalizeDepth.dyn new file mode 100644 index 00000000000..e7c8fc324e0 --- /dev/null +++ b/doc/distrib/NodeHelpFiles/DSCore.List.NormalizeDepth.dyn @@ -0,0 +1,405 @@ +{ + "Uuid": "8ab083ac-c167-480a-be7b-c4ff443c668b", + "IsCustomNode": false, + "Description": "", + "Name": "DSCore.List.NormalizeDepth", + "ElementResolver": { + "ResolutionMap": {} + }, + "Inputs": [], + "Outputs": [], + "Nodes": [ + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "ce489f7971194d1896d7532f0ebff74b", + "NodeType": "CodeBlockNode", + "Inputs": [], + "Outputs": [ + { + "Id": "6e1cc85ef2df41fdbca31ac63aa21375", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "0..12..#6;" + }, + { + "ConcreteType": "CoreNodeModels.Watch, CoreNodeModels", + "WatchWidth": 200.0, + "WatchHeight": 200.0, + "Id": "868ffe038f1f41d3b65bf53918941e41", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "a5f69505c56c4b978ce602904a6f27f5", + "Name": "", + "Description": "Node to show output from", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "0f2507a3d6f04d83ad18b8653b7c1d1e", + "Name": "", + "Description": "Node output", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Visualizes a node's output" + }, + { + "ConcreteType": "CoreNodeModels.CreateList, CoreNodeModels", + "VariableInputPorts": true, + "Id": "e9550dbeca12417bb1c3b839917dc0f5", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "1635ff1727384cfba1fe7187f5982496", + "Name": "item0", + "Description": "Item Index #0", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "1a8b5cf60de04a44a4ff067dde0a21b3", + "Name": "item1", + "Description": "Item Index #1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "88a86f19cabe41b18d55fe1c3c83fd82", + "Name": "list", + "Description": "A list (type: var[]..[])", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Makes a new list from the given inputs" + }, + { + "ConcreteType": "CoreNodeModels.CreateList, CoreNodeModels", + "VariableInputPorts": true, + "Id": "bfd2b813ac5749faaae156b72d7d4c35", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "abdf0dd685b448ae85958d0ce2e36ba3", + "Name": "item0", + "Description": "Item Index #0", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "a759366fb278473a80f1b50a4c7cc00e", + "Name": "item1", + "Description": "Item Index #1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "26e06b46245843f484acd622d5539a3e", + "Name": "list", + "Description": "A list (type: var[]..[])", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Makes a new list from the given inputs" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "59ca9d60ea6541c887b122ab6c99cb6e", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "df37c3d1cb554f9d95db837f9ace4381", + "Name": "list", + "Description": "The list whose depth is to be normalized according to the rank.\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "345e9a4147f349fbabcd56bce8a12103", + "Name": "rank", + "Description": "The rank the list is to be normalized to. Default value is 1.\n\nint\nDefault value : 1", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "95fcab0ce9564e918541e9b5b8c7935d", + "Name": "list", + "Description": "The list with the normalized rank.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.List.NormalizeDepth@var[]..[],int", + "Replication": "Shortest", + "Description": "Returns multidimensional list according the rank given.\n\nList.NormalizeDepth (list: var[]..[], rank: int = 1): var[]..[]" + }, + { + "ConcreteType": "CoreNodeModels.Watch, CoreNodeModels", + "WatchWidth": 230.0, + "WatchHeight": 415.0, + "Id": "36a3753cb26c46d4bf5d9d4a9e3873eb", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "aca5435cbd9744e997986aa59a965c43", + "Name": "", + "Description": "Node to show output from", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "064a0edfb33b4cb099e103c72fe6d9e7", + "Name": "", + "Description": "Node output", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Visualizes a node's output" + }, + { + "ConcreteType": "CoreNodeModels.Input.IntegerSlider, CoreNodeModels", + "NumberType": "Integer", + "MaximumValue": 100, + "MinimumValue": 0, + "StepValue": 1, + "Id": "21e38cc46754410aa6f7abe4e6c3fe1a", + "NodeType": "NumberInputNode", + "Inputs": [], + "Outputs": [ + { + "Id": "df2c47317ff04540bde98a3ca979cb5d", + "Name": "", + "Description": "Int64", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Produces integer values", + "InputValue": 3 + } + ], + "Connectors": [ + { + "Start": "6e1cc85ef2df41fdbca31ac63aa21375", + "End": "1635ff1727384cfba1fe7187f5982496", + "Id": "8b757294473648c8bcfc45d052158894", + "IsHidden": "False" + }, + { + "Start": "6e1cc85ef2df41fdbca31ac63aa21375", + "End": "1a8b5cf60de04a44a4ff067dde0a21b3", + "Id": "8a92307b66204f629fb78fdc0783bbd5", + "IsHidden": "False" + }, + { + "Start": "6e1cc85ef2df41fdbca31ac63aa21375", + "End": "abdf0dd685b448ae85958d0ce2e36ba3", + "Id": "8866a76090e54f7990c0d4c1b771e8eb", + "IsHidden": "False" + }, + { + "Start": "0f2507a3d6f04d83ad18b8653b7c1d1e", + "End": "df37c3d1cb554f9d95db837f9ace4381", + "Id": "4fb02fdd588547cb937abb74331153ca", + "IsHidden": "False" + }, + { + "Start": "88a86f19cabe41b18d55fe1c3c83fd82", + "End": "a759366fb278473a80f1b50a4c7cc00e", + "Id": "7a3b90af2e7e462f92d212791d3fbf6c", + "IsHidden": "False" + }, + { + "Start": "26e06b46245843f484acd622d5539a3e", + "End": "a5f69505c56c4b978ce602904a6f27f5", + "Id": "7c5c4f6f97514ebab951fab8d71c8db7", + "IsHidden": "False" + }, + { + "Start": "95fcab0ce9564e918541e9b5b8c7935d", + "End": "aca5435cbd9744e997986aa59a965c43", + "Id": "e75633737bff4981a6fd77d47cb96b2b", + "IsHidden": "False" + }, + { + "Start": "df2c47317ff04540bde98a3ca979cb5d", + "End": "345e9a4147f349fbabcd56bce8a12103", + "Id": "5653603c795349b9b04abfff204cf970", + "IsHidden": "False" + } + ], + "Dependencies": [], + "NodeLibraryDependencies": [], + "Thumbnail": "", + "GraphDocumentationURL": null, + "ExtensionWorkspaceData": [ + { + "ExtensionGuid": "28992e1d-abb9-417f-8b1b-05e053bee670", + "Name": "Properties", + "Version": "2.19", + "Data": {} + } + ], + "Author": "None provided", + "Linting": { + "activeLinter": "None", + "activeLinterId": "7b75fb44-43fd-4631-a878-29f4d5d8399a", + "warningCount": 0, + "errorCount": 0 + }, + "Bindings": [], + "View": { + "Dynamo": { + "ScaleFactor": 1.0, + "HasRunWithoutCrash": true, + "IsVisibleInDynamoLibrary": true, + "Version": "2.19.0.5742", + "RunType": "Automatic", + "RunPeriod": "1000" + }, + "Camera": { + "Name": "_Background Preview", + "EyeX": -10.351632118225098, + "EyeY": 13.915582656860352, + "EyeZ": 16.000629425048828, + "LookX": 16.128910064697266, + "LookY": -8.1650753021240234, + "LookZ": -20.504016876220703, + "UpX": 0.053885128349065781, + "UpY": 0.99619466066360474, + "UpZ": -0.068501941859722137 + }, + "ConnectorPins": [], + "NodeViews": [ + { + "Id": "ce489f7971194d1896d7532f0ebff74b", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -419.86230523087744, + "Y": 2942.78783442289 + }, + { + "Id": "868ffe038f1f41d3b65bf53918941e41", + "Name": "Watch", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 363.13769476912256, + "Y": 2908.96033442289 + }, + { + "Id": "e9550dbeca12417bb1c3b839917dc0f5", + "Name": "List.Create", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -156.86230523087744, + "Y": 2942.96033442289 + }, + { + "Id": "bfd2b813ac5749faaae156b72d7d4c35", + "Name": "List.Create", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 103.13769476912256, + "Y": 2908.96033442289 + }, + { + "Id": "59ca9d60ea6541c887b122ab6c99cb6e", + "Name": "List.NormalizeDepth", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 740.13769476912262, + "Y": 2909.8810086027847 + }, + { + "Id": "36a3753cb26c46d4bf5d9d4a9e3873eb", + "Name": "Watch", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1064.1376947691226, + "Y": 2908.96033442289 + }, + { + "Id": "21e38cc46754410aa6f7abe4e6c3fe1a", + "Name": "Integer Slider", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 296.89638241700129, + "Y": 3242.5309509242124 + } + ], + "Annotations": [], + "X": 345.04955947313556, + "Y": -2049.3232409355041, + "Zoom": 0.77084898905121679 + } +} \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/DSCore.List.NormalizeDepth.md b/doc/distrib/NodeHelpFiles/DSCore.List.NormalizeDepth.md new file mode 100644 index 00000000000..b327b958cf8 --- /dev/null +++ b/doc/distrib/NodeHelpFiles/DSCore.List.NormalizeDepth.md @@ -0,0 +1,10 @@ +## In Depth +`List.NormalizeDepth` returns a new list of uniform depth to a specified rank, or list depth. + +Like `List.Flatten`, you can use `List.NormalizeDepth` to return a one-dimensional list (a list with a single level). But you can also use it to add list levels. The node normalizes the input list to a depth of your choosing. + +In the example below, a list containing 2 lists of unequal depth can be normalized to different ranks with an integer slider. By normalizing the depths at different ranks, the list increases or decreases in depth, but is always uniform. A list of rank 1 returns a single list of elements, while a list of rank 3 returns 2 levels of sublists. +___ +## Example File + +![List.NormalizeDepth](./DSCore.List.NormalizeDepth_img.jpg) \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/DSCore.List.NormalizeDepth_img.jpg b/doc/distrib/NodeHelpFiles/DSCore.List.NormalizeDepth_img.jpg new file mode 100644 index 00000000000..09ce4c0b1a0 Binary files /dev/null and b/doc/distrib/NodeHelpFiles/DSCore.List.NormalizeDepth_img.jpg differ diff --git a/doc/distrib/NodeHelpFiles/DSCore.List.Reorder.dyn b/doc/distrib/NodeHelpFiles/DSCore.List.Reorder.dyn new file mode 100644 index 00000000000..d41041f51ac --- /dev/null +++ b/doc/distrib/NodeHelpFiles/DSCore.List.Reorder.dyn @@ -0,0 +1,445 @@ +{ + "Uuid": "900944ba-235b-47de-92db-7ca167dc370e", + "IsCustomNode": false, + "Description": "", + "Name": "DSCore.List.Reorder", + "ElementResolver": { + "ResolutionMap": {} + }, + "Inputs": [], + "Outputs": [], + "Nodes": [ + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "a56ddb32f8924bde951838397bf6dc1b", + "NodeType": "CodeBlockNode", + "Inputs": [], + "Outputs": [ + { + "Id": "37572891ebb8426d94364e232b088dd4", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "0..12..#6;" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "d6a7a310e5444f93b8942c7ab8ecee38", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "e8c0763fc07e46cc9869596f4bbbde6e", + "Name": "list", + "Description": "The list to be reordered\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "a0c3a86d6b2143ca878fda81d92697b6", + "Name": "indices", + "Description": "The indices used to reorder the items in the list\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "5889bad8669a4923bc7d6528d2ebff39", + "Name": "list", + "Description": "Reordered list", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.List.Reorder@var[]..[],var[]..[]", + "Replication": "Auto", + "Description": "Reorders the input list based on the given list of indices.\n\nList.Reorder (list: var[]..[], indices: var[]..[]): var[]..[]" + }, + { + "ConcreteType": "CoreNodeModels.Watch, CoreNodeModels", + "WatchWidth": 200.0, + "WatchHeight": 200.0, + "Id": "776e1ad679b14680881164d091a6e742", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "4c6df04397c842028b46fc391e6ef7de", + "Name": "", + "Description": "Node to show output from", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "2b5b9e549b5f42c8ae5a81f919296d76", + "Name": "", + "Description": "Node output", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Visualizes a node's output" + }, + { + "ConcreteType": "CoreNodeModels.Watch, CoreNodeModels", + "WatchWidth": 200.0, + "WatchHeight": 200.0, + "Id": "d20bde923e10410c93fef674fdc1e321", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "e682395fdff04d0083ca036ef8d46eb3", + "Name": "", + "Description": "Node to show output from", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "e93715a8f1de452f9069bf4837a63aa3", + "Name": "", + "Description": "Node output", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Visualizes a node's output" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "1851f31786cf451ba17413f9ce4b0ea9", + "NodeType": "CodeBlockNode", + "Inputs": [], + "Outputs": [ + { + "Id": "045b488b6ef5408f860c1bfbf66e99c1", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "119b7fd85a2f47c3ae37ccbb31be7f38", + "Name": "", + "Description": "Value of expression at line 2", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "6099266795a640db80b5d1371f0d66ec", + "Name": "", + "Description": "Value of expression at line 3", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "a78f1ba099f7480aa2f12d1595639367", + "Name": "", + "Description": "Value of expression at line 4", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "8ddd38a8eee24c1fa63778965199e47f", + "Name": "", + "Description": "Value of expression at line 5", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "80b95a4bf08749878ee8935fa493409c", + "Name": "", + "Description": "Value of expression at line 6", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "1;\n5;\n4;\n2;\n0;\n3;" + }, + { + "ConcreteType": "CoreNodeModels.CreateList, CoreNodeModels", + "VariableInputPorts": true, + "Id": "c4e906ab92f34cd5bf3139585b99cdeb", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "ace16cc04881449c802b7689817274f0", + "Name": "item0", + "Description": "Item Index #0", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "31a92bb429a54cd1b84c53436cb947e7", + "Name": "item1", + "Description": "Item Index #1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "6cae826fddbb4841931f3866aae7a71b", + "Name": "item2", + "Description": "Item Index #2", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "567db54be9874a9a9905b7133604d9ba", + "Name": "item3", + "Description": "Item Index #3", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "730cc50bbc8b44f49716786bfbea88cf", + "Name": "item4", + "Description": "Item Index #4", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "dc9251ab19834f8aa7d74b171a6b8008", + "Name": "item5", + "Description": "Item Index #5", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "e9dda715fe884586a9c6809498c755be", + "Name": "list", + "Description": "A list (type: var[]..[])", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Makes a new list from the given inputs" + } + ], + "Connectors": [ + { + "Start": "37572891ebb8426d94364e232b088dd4", + "End": "4c6df04397c842028b46fc391e6ef7de", + "Id": "33aa70e42eb54feb98269ee65f292839", + "IsHidden": "False" + }, + { + "Start": "5889bad8669a4923bc7d6528d2ebff39", + "End": "e682395fdff04d0083ca036ef8d46eb3", + "Id": "f93fc7ecedaa450ebdcf2dc181445cdd", + "IsHidden": "False" + }, + { + "Start": "2b5b9e549b5f42c8ae5a81f919296d76", + "End": "e8c0763fc07e46cc9869596f4bbbde6e", + "Id": "d81297efcc7b49c3b4884935d8179d63", + "IsHidden": "False" + }, + { + "Start": "045b488b6ef5408f860c1bfbf66e99c1", + "End": "ace16cc04881449c802b7689817274f0", + "Id": "3dddb8d298cb40c294d95ef484999526", + "IsHidden": "False" + }, + { + "Start": "119b7fd85a2f47c3ae37ccbb31be7f38", + "End": "31a92bb429a54cd1b84c53436cb947e7", + "Id": "35836db82c83454f815a5e2905b6a50f", + "IsHidden": "False" + }, + { + "Start": "6099266795a640db80b5d1371f0d66ec", + "End": "6cae826fddbb4841931f3866aae7a71b", + "Id": "549f499b1d5a4fc0972eab8029830a51", + "IsHidden": "False" + }, + { + "Start": "a78f1ba099f7480aa2f12d1595639367", + "End": "567db54be9874a9a9905b7133604d9ba", + "Id": "c7984cc38d9f479c8fdefac8f4aa7945", + "IsHidden": "False" + }, + { + "Start": "8ddd38a8eee24c1fa63778965199e47f", + "End": "730cc50bbc8b44f49716786bfbea88cf", + "Id": "e30ac6c80665489bb279d44a576d369c", + "IsHidden": "False" + }, + { + "Start": "80b95a4bf08749878ee8935fa493409c", + "End": "dc9251ab19834f8aa7d74b171a6b8008", + "Id": "5b1b247f6b0d475e96bd1b79947d6b8a", + "IsHidden": "False" + }, + { + "Start": "e9dda715fe884586a9c6809498c755be", + "End": "a0c3a86d6b2143ca878fda81d92697b6", + "Id": "1af22fba568a414c94a45e0d44c05e2e", + "IsHidden": "False" + } + ], + "Dependencies": [], + "NodeLibraryDependencies": [], + "Thumbnail": "", + "GraphDocumentationURL": null, + "ExtensionWorkspaceData": [ + { + "ExtensionGuid": "28992e1d-abb9-417f-8b1b-05e053bee670", + "Name": "Properties", + "Version": "2.19", + "Data": {} + } + ], + "Author": "None provided", + "Linting": { + "activeLinter": "None", + "activeLinterId": "7b75fb44-43fd-4631-a878-29f4d5d8399a", + "warningCount": 0, + "errorCount": 0 + }, + "Bindings": [], + "View": { + "Dynamo": { + "ScaleFactor": 1.0, + "HasRunWithoutCrash": true, + "IsVisibleInDynamoLibrary": true, + "Version": "2.19.0.5742", + "RunType": "Automatic", + "RunPeriod": "1000" + }, + "Camera": { + "Name": "_Background Preview", + "EyeX": -10.351632118225098, + "EyeY": 13.915582656860352, + "EyeZ": 16.000629425048828, + "LookX": 16.128910064697266, + "LookY": -8.1650753021240234, + "LookZ": -20.504016876220703, + "UpX": 0.053885128349065781, + "UpY": 0.99619466066360474, + "UpZ": -0.068501941859722137 + }, + "ConnectorPins": [], + "NodeViews": [ + { + "Id": "a56ddb32f8924bde951838397bf6dc1b", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -340.46764361356844, + "Y": 2859.1130432151695 + }, + { + "Id": "d6a7a310e5444f93b8942c7ab8ecee38", + "Name": "List.Reorder", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 299.53235638643156, + "Y": 2999.2855432151696 + }, + { + "Id": "776e1ad679b14680881164d091a6e742", + "Name": "Watch", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -77.467643613568441, + "Y": 2859.2855432151696 + }, + { + "Id": "d20bde923e10410c93fef674fdc1e321", + "Name": "Watch", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 590.5323563864315, + "Y": 2999.2855432151696 + }, + { + "Id": "1851f31786cf451ba17413f9ce4b0ea9", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -340.46764361356844, + "Y": 3217.2505432151693 + }, + { + "Id": "c4e906ab92f34cd5bf3139585b99cdeb", + "Name": "List.Create", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -77.467643613568441, + "Y": 3173.2855432151696 + } + ], + "Annotations": [], + "X": 404.28289390335965, + "Y": -2885.363386533646, + "Zoom": 1.0196740536202169 + } +} \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/DSCore.List.Reorder.md b/doc/distrib/NodeHelpFiles/DSCore.List.Reorder.md new file mode 100644 index 00000000000..7e6bf6678c4 --- /dev/null +++ b/doc/distrib/NodeHelpFiles/DSCore.List.Reorder.md @@ -0,0 +1,8 @@ +## In Depth +`List.Reorder` returns a new list with its items reordered based on a list of indices. + +In the example below, a new list is created by manually changing the index order. Each input index assigns a new place on the list for the original list items. For example, item0 is 1, so the first item on the new list is 2.4, which is index 1 on the original list. Item1 is 5, so the second item on the new list is 12, which is index 5 on the original list, and so on. +___ +## Example File + +![List.Reorder](./DSCore.List.Reorder_img.jpg) \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/DSCore.List.Reorder_img.jpg b/doc/distrib/NodeHelpFiles/DSCore.List.Reorder_img.jpg new file mode 100644 index 00000000000..6c3ef809c00 Binary files /dev/null and b/doc/distrib/NodeHelpFiles/DSCore.List.Reorder_img.jpg differ diff --git a/doc/distrib/NodeHelpFiles/DSCore.List.ReplaceItemAtIndex.dyn b/doc/distrib/NodeHelpFiles/DSCore.List.ReplaceItemAtIndex.dyn new file mode 100644 index 00000000000..8ef2f02f122 --- /dev/null +++ b/doc/distrib/NodeHelpFiles/DSCore.List.ReplaceItemAtIndex.dyn @@ -0,0 +1,324 @@ +{ + "Uuid": "ae4527a7-d38f-4942-affa-e7bd5ac3a9d8", + "IsCustomNode": false, + "Description": "", + "Name": "DSCore.List.ReplaceItemAtIndex", + "ElementResolver": { + "ResolutionMap": {} + }, + "Inputs": [], + "Outputs": [], + "Nodes": [ + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "37a624baca924e59871052dd1b92883c", + "NodeType": "CodeBlockNode", + "Inputs": [], + "Outputs": [ + { + "Id": "22feed9316ea4d5c9f6743ff3124a759", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "0..5..1;" + }, + { + "ConcreteType": "CoreNodeModels.Watch, CoreNodeModels", + "WatchWidth": 200.0, + "WatchHeight": 200.0, + "Id": "694689a38b1043d9a09798f07ba6bb23", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "2d991d6014e64325984ab277c157e488", + "Name": "", + "Description": "Node to show output from", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "0ac657d003c247598d613fe909205058", + "Name": "", + "Description": "Node output", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Visualizes a node's output" + }, + { + "ConcreteType": "CoreNodeModels.Watch, CoreNodeModels", + "WatchWidth": 200.0, + "WatchHeight": 200.0, + "Id": "626ae416b93240c4b4cc33d957ff699c", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "e0207d21df694b75abf687316a82ba06", + "Name": "", + "Description": "Node to show output from", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "b225cdd9f2394d249ee5be9df32a8b09", + "Name": "", + "Description": "Node output", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Visualizes a node's output" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "aa62dfb6909f4db488629b5d97d4c716", + "NodeType": "CodeBlockNode", + "Inputs": [], + "Outputs": [ + { + "Id": "5826769886ba46e38d755bfaad78bf03", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "3;" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "7c8dfbfdee754a3da5ed49f4e8648b61", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "b74f5654374f4deb91ccf19c3805ea5d", + "Name": "list", + "Description": "List to replace an item in.\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "48389811e26e48128464e97f199be236", + "Name": "index", + "Description": "Index of the item to be replaced.\n\nint", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "2fda449159c94171bc5363c386367568", + "Name": "item", + "Description": "The item to insert.\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "e274b250d1d34d63bc28c0099dac4bae", + "Name": "list", + "Description": "A new list with the item replaced.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.List.ReplaceItemAtIndex@var[]..[],int,var[]..[]", + "Replication": "Auto", + "Description": "Replace an item from the given list that's located at the specified index.\n\nList.ReplaceItemAtIndex (list: var[]..[], index: int, item: var[]..[]): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "8d4ba7afb0194479a02d2441847314f3", + "NodeType": "CodeBlockNode", + "Inputs": [], + "Outputs": [ + { + "Id": "b949db20a4e043dca9d47846af259874", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "10;" + } + ], + "Connectors": [ + { + "Start": "22feed9316ea4d5c9f6743ff3124a759", + "End": "2d991d6014e64325984ab277c157e488", + "Id": "e15281fb884d454ca7321beeeb6e1ba9", + "IsHidden": "False" + }, + { + "Start": "0ac657d003c247598d613fe909205058", + "End": "b74f5654374f4deb91ccf19c3805ea5d", + "Id": "ff80973699c2410482436b4554013d5c", + "IsHidden": "False" + }, + { + "Start": "5826769886ba46e38d755bfaad78bf03", + "End": "48389811e26e48128464e97f199be236", + "Id": "02a1adceb9fc4806a8c54413ac87ea8e", + "IsHidden": "False" + }, + { + "Start": "e274b250d1d34d63bc28c0099dac4bae", + "End": "e0207d21df694b75abf687316a82ba06", + "Id": "5c58310f857e441b9dc41d0cd73cb981", + "IsHidden": "False" + }, + { + "Start": "b949db20a4e043dca9d47846af259874", + "End": "2fda449159c94171bc5363c386367568", + "Id": "680122c5583a499990337d10e80fa600", + "IsHidden": "False" + } + ], + "Dependencies": [], + "NodeLibraryDependencies": [], + "Thumbnail": "", + "GraphDocumentationURL": null, + "ExtensionWorkspaceData": [ + { + "ExtensionGuid": "28992e1d-abb9-417f-8b1b-05e053bee670", + "Name": "Properties", + "Version": "2.19", + "Data": {} + } + ], + "Author": "None provided", + "Linting": { + "activeLinter": "None", + "activeLinterId": "7b75fb44-43fd-4631-a878-29f4d5d8399a", + "warningCount": 0, + "errorCount": 0 + }, + "Bindings": [], + "View": { + "Dynamo": { + "ScaleFactor": 1.0, + "HasRunWithoutCrash": true, + "IsVisibleInDynamoLibrary": true, + "Version": "2.19.0.5742", + "RunType": "Automatic", + "RunPeriod": "1000" + }, + "Camera": { + "Name": "_Background Preview", + "EyeX": -17.0, + "EyeY": 24.0, + "EyeZ": 50.0, + "LookX": 12.0, + "LookY": -13.0, + "LookZ": -58.0, + "UpX": 0.0, + "UpY": 1.0, + "UpZ": 0.0 + }, + "ConnectorPins": [], + "NodeViews": [ + { + "Id": "37a624baca924e59871052dd1b92883c", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -205.4045156296965, + "Y": 178.49181227385287 + }, + { + "Id": "694689a38b1043d9a09798f07ba6bb23", + "Name": "Watch", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 48.595484370303495, + "Y": 178.66431227385289 + }, + { + "Id": "626ae416b93240c4b4cc33d957ff699c", + "Name": "Watch", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 782.59548437030344, + "Y": 403.66431227385289 + }, + { + "Id": "aa62dfb6909f4db488629b5d97d4c716", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 48.595484370303495, + "Y": 493.49181227385287 + }, + { + "Id": "7c8dfbfdee754a3da5ed49f4e8648b61", + "Name": "List.ReplaceItemAtIndex", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 425.5954843703035, + "Y": 404.64798256934273 + }, + { + "Id": "8d4ba7afb0194479a02d2441847314f3", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 48.595484370303495, + "Y": 640.49181227385293 + } + ], + "Annotations": [], + "X": 238.81439296426072, + "Y": -139.26084631160057, + "Zoom": 1.0166007905138339 + } +} \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/DSCore.List.ReplaceItemAtIndex.md b/doc/distrib/NodeHelpFiles/DSCore.List.ReplaceItemAtIndex.md new file mode 100644 index 00000000000..f18a6d7ea9e --- /dev/null +++ b/doc/distrib/NodeHelpFiles/DSCore.List.ReplaceItemAtIndex.md @@ -0,0 +1,8 @@ +## In Depth +`List.ReplaceItemAtIndex` replaces an item on the input list at a given index. + +In the example below, we start with a range of numbers from 0 to 5. We then use a `List.ReplaceItemAtIndex` node to replace the item at index 3 with a new item, in this case the integer 10. +___ +## Example File + +![List.ReplaceItemAtIndex](./DSCore.List.ReplaceItemAtIndex_img.jpg) \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/DSCore.List.ReplaceItemAtIndex_img.jpg b/doc/distrib/NodeHelpFiles/DSCore.List.ReplaceItemAtIndex_img.jpg new file mode 100644 index 00000000000..52ad3709eaa Binary files /dev/null and b/doc/distrib/NodeHelpFiles/DSCore.List.ReplaceItemAtIndex_img.jpg differ diff --git a/doc/distrib/NodeHelpFiles/DSCore.List.Reverse.dyn b/doc/distrib/NodeHelpFiles/DSCore.List.Reverse.dyn new file mode 100644 index 00000000000..21101981b3f --- /dev/null +++ b/doc/distrib/NodeHelpFiles/DSCore.List.Reverse.dyn @@ -0,0 +1,421 @@ +{ + "Uuid": "fc027501-0b9a-4832-b219-af4cc1350be9", + "IsCustomNode": false, + "Description": "", + "Name": "DSCore.List.Reverse", + "ElementResolver": { + "ResolutionMap": {} + }, + "Inputs": [ + { + "Id": "8720ea5196bd40a7beb41782321bed28", + "Name": "Integer Slider", + "Type": "number", + "Type2": "number", + "Value": "1", + "MaximumValue": 100.0, + "MinimumValue": 0.0, + "StepValue": 1.0, + "NumberType": "Integer", + "Description": "Produces integer values", + "SelectedIndex": 0 + }, + { + "Id": "6d473ebf81834397adb062c841fb71f3", + "Name": "Integer Slider", + "Type": "number", + "Type2": "number", + "Value": "25", + "MaximumValue": 100.0, + "MinimumValue": 0.0, + "StepValue": 1.0, + "NumberType": "Integer", + "Description": "Produces integer values", + "SelectedIndex": 0 + }, + { + "Id": "fb73812f5c7a4df9b529a8b02ec8acfe", + "Name": "Integer Slider", + "Type": "number", + "Type2": "number", + "Value": "2", + "MaximumValue": 100.0, + "MinimumValue": 0.0, + "StepValue": 1.0, + "NumberType": "Integer", + "Description": "Produces integer values", + "SelectedIndex": 0 + } + ], + "Outputs": [], + "Nodes": [ + { + "ConcreteType": "CoreNodeModels.Range, CoreNodeModels", + "Id": "00b410bc79dd45149e9c9be7fcb5cbcb", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "d345bd27bd284fd986fd0fe37d5f3bdf", + "Name": "start", + "Description": "Number or letter to start the sequence at\r\nDefault value: 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "67c722e8f94c41178bfb7078a76ce8af", + "Name": "end", + "Description": "Number or letter to end the sequence at\r\nDefault value: 9", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "a93b3002e1e54ec59e1097fe3e2fffed", + "Name": "step", + "Description": "Space between numbers or letters\r\nDefault value: 1", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "93c9ef9739664b958696485588f9399f", + "Name": "list", + "Description": "New list of type: var[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Longest", + "Description": "Creates a sequence of numbers or letters in the given range" + }, + { + "ConcreteType": "CoreNodeModels.Watch, CoreNodeModels", + "WatchWidth": 200.0, + "WatchHeight": 200.0, + "Id": "26fac243a7a840cdba92bf68a2b94de5", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "099aa8c3b4be4331ac066b51830b7cde", + "Name": "", + "Description": "Node to show output from", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "c96ab816a64d46e9b0850c27060dad2c", + "Name": "", + "Description": "Node output", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Visualizes a node's output" + }, + { + "ConcreteType": "CoreNodeModels.Input.IntegerSlider, CoreNodeModels", + "NumberType": "Integer", + "MaximumValue": 100, + "MinimumValue": 0, + "StepValue": 1, + "Id": "8720ea5196bd40a7beb41782321bed28", + "NodeType": "NumberInputNode", + "Inputs": [], + "Outputs": [ + { + "Id": "d764c7d5ac35401ca1aaabc6d2d534db", + "Name": "", + "Description": "Int64", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Produces integer values", + "InputValue": 1 + }, + { + "ConcreteType": "CoreNodeModels.Input.IntegerSlider, CoreNodeModels", + "NumberType": "Integer", + "MaximumValue": 100, + "MinimumValue": 0, + "StepValue": 1, + "Id": "6d473ebf81834397adb062c841fb71f3", + "NodeType": "NumberInputNode", + "Inputs": [], + "Outputs": [ + { + "Id": "e7b6ea07ff774cc795f97b611a2f416a", + "Name": "", + "Description": "Int64", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Produces integer values", + "InputValue": 25 + }, + { + "ConcreteType": "CoreNodeModels.Input.IntegerSlider, CoreNodeModels", + "NumberType": "Integer", + "MaximumValue": 100, + "MinimumValue": 0, + "StepValue": 1, + "Id": "fb73812f5c7a4df9b529a8b02ec8acfe", + "NodeType": "NumberInputNode", + "Inputs": [], + "Outputs": [ + { + "Id": "57bcfee92d0f4d11b74f03fee3333241", + "Name": "", + "Description": "Int64", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Produces integer values", + "InputValue": 2 + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "75a1335f483c405991e382a6fafa90b2", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "b2961acd5d214303a548635d10f54dd8", + "Name": "list", + "Description": "List to be reversed.\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "162606ec888847248710be99fa2a2f19", + "Name": "list", + "Description": "Reversed list", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.List.Reverse@var[]..[]", + "Replication": "Auto", + "Description": "Creates a new list containing the items of the given list but in reverse order.\n\nList.Reverse (list: var[]..[]): var[]..[]" + }, + { + "ConcreteType": "CoreNodeModels.Watch, CoreNodeModels", + "WatchWidth": 200.0, + "WatchHeight": 200.0, + "Id": "cf885acd3409403f9395acc551c6745c", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "808d937440b24d86b8b4444271c08b04", + "Name": "", + "Description": "Node to show output from", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "fd139ec1e3354082a5358f4576e81d40", + "Name": "", + "Description": "Node output", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Visualizes a node's output" + } + ], + "Connectors": [ + { + "Start": "93c9ef9739664b958696485588f9399f", + "End": "099aa8c3b4be4331ac066b51830b7cde", + "Id": "10b33281dc4a458ca8be0d13e50cd592", + "IsHidden": "False" + }, + { + "Start": "c96ab816a64d46e9b0850c27060dad2c", + "End": "b2961acd5d214303a548635d10f54dd8", + "Id": "5c6910a093d24d0d9fe631cd3c5f5677", + "IsHidden": "False" + }, + { + "Start": "d764c7d5ac35401ca1aaabc6d2d534db", + "End": "d345bd27bd284fd986fd0fe37d5f3bdf", + "Id": "34407ee02b114b0b852d79acaf60b24f", + "IsHidden": "False" + }, + { + "Start": "e7b6ea07ff774cc795f97b611a2f416a", + "End": "67c722e8f94c41178bfb7078a76ce8af", + "Id": "20ba2f3ce6ce49509b8743ebc5057e70", + "IsHidden": "False" + }, + { + "Start": "57bcfee92d0f4d11b74f03fee3333241", + "End": "a93b3002e1e54ec59e1097fe3e2fffed", + "Id": "d269cec7238948709cd13662d75024ee", + "IsHidden": "False" + }, + { + "Start": "162606ec888847248710be99fa2a2f19", + "End": "808d937440b24d86b8b4444271c08b04", + "Id": "d0b451cb55434c73b5941c2896884b01", + "IsHidden": "False" + } + ], + "Dependencies": [], + "NodeLibraryDependencies": [], + "Thumbnail": "", + "GraphDocumentationURL": null, + "ExtensionWorkspaceData": [ + { + "ExtensionGuid": "28992e1d-abb9-417f-8b1b-05e053bee670", + "Name": "Properties", + "Version": "2.19", + "Data": {} + } + ], + "Author": "None provided", + "Linting": { + "activeLinter": "None", + "activeLinterId": "7b75fb44-43fd-4631-a878-29f4d5d8399a", + "warningCount": 0, + "errorCount": 0 + }, + "Bindings": [], + "View": { + "Dynamo": { + "ScaleFactor": 1.0, + "HasRunWithoutCrash": true, + "IsVisibleInDynamoLibrary": true, + "Version": "2.19.0.5742", + "RunType": "Automatic", + "RunPeriod": "1000" + }, + "Camera": { + "Name": "_Background Preview", + "EyeX": -13.988694190979004, + "EyeY": 18.264490127563477, + "EyeZ": 21.429862976074219, + "LookX": 16.723785400390625, + "LookY": -5.2774238586425781, + "LookZ": -19.588394165039063, + "UpX": -0.009065740741789341, + "UpY": 0.99990254640579224, + "UpZ": 0.010618607513606548 + }, + "ConnectorPins": [], + "NodeViews": [ + { + "Id": "00b410bc79dd45149e9c9be7fcb5cbcb", + "Name": "Range", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -82.275381148499946, + "Y": 34.373574300271045 + }, + { + "Id": "26fac243a7a840cdba92bf68a2b94de5", + "Name": "Watch", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 195.72461885150005, + "Y": 34.373574300271059 + }, + { + "Id": "8720ea5196bd40a7beb41782321bed28", + "Name": "Integer Slider", + "IsSetAsInput": true, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -530.2753811485, + "Y": -78.626425699728955 + }, + { + "Id": "6d473ebf81834397adb062c841fb71f3", + "Name": "Integer Slider", + "IsSetAsInput": true, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -530.2753811485, + "Y": 68.373574300271045 + }, + { + "Id": "fb73812f5c7a4df9b529a8b02ec8acfe", + "Name": "Integer Slider", + "IsSetAsInput": true, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -530.2753811485, + "Y": 215.37357430027106 + }, + { + "Id": "75a1335f483c405991e382a6fafa90b2", + "Name": "List.Reverse", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 572.7246188515, + "Y": 34.373574300271059 + }, + { + "Id": "cf885acd3409403f9395acc551c6745c", + "Name": "Watch", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 841.7246188515, + "Y": 34.373574300271059 + } + ], + "Annotations": [], + "X": 443.54405103515518, + "Y": 237.55553878098934, + "Zoom": 0.77986658580958157 + } +} \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/DSCore.List.Reverse.md b/doc/distrib/NodeHelpFiles/DSCore.List.Reverse.md new file mode 100644 index 00000000000..19c5ca735fb --- /dev/null +++ b/doc/distrib/NodeHelpFiles/DSCore.List.Reverse.md @@ -0,0 +1,8 @@ +## In Depth +`List.Reverse` takes the items in a list and creates a new list with the order of items reversed. + +In the example, we first generate a list using `Range`, which produces numbers in increasing order. Then, we use `List.Reverse` to switch the order of the items in the list. +___ +## Example File + +![List.Reverse](./DSCore.List.Reverse_img.jpg) \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/DSCore.List.Reverse_img.jpg b/doc/distrib/NodeHelpFiles/DSCore.List.Reverse_img.jpg new file mode 100644 index 00000000000..4e50d14f201 Binary files /dev/null and b/doc/distrib/NodeHelpFiles/DSCore.List.Reverse_img.jpg differ diff --git a/doc/distrib/NodeHelpFiles/DSCore.List.ShiftIndices.dyn b/doc/distrib/NodeHelpFiles/DSCore.List.ShiftIndices.dyn new file mode 100644 index 00000000000..e47ea85ad5a --- /dev/null +++ b/doc/distrib/NodeHelpFiles/DSCore.List.ShiftIndices.dyn @@ -0,0 +1,483 @@ +{ + "Uuid": "1f24d059-b133-4168-88ca-fe041d440fe4", + "IsCustomNode": false, + "Description": "", + "Name": "DSCore.List.ShiftIndices", + "ElementResolver": { + "ResolutionMap": {} + }, + "Inputs": [ + { + "Id": "7e572aea7c07447f81aed73b6d069ab3", + "Name": "Integer Slider", + "Type": "number", + "Type2": "number", + "Value": "1", + "MaximumValue": 100.0, + "MinimumValue": 0.0, + "StepValue": 1.0, + "NumberType": "Integer", + "Description": "Produces integer values", + "SelectedIndex": 0 + }, + { + "Id": "27e29d8bf150412c8bf386a663503116", + "Name": "Integer Slider", + "Type": "number", + "Type2": "number", + "Value": "25", + "MaximumValue": 100.0, + "MinimumValue": 0.0, + "StepValue": 1.0, + "NumberType": "Integer", + "Description": "Produces integer values", + "SelectedIndex": 0 + }, + { + "Id": "e9914af921ce4d45b0c461ec8b62b388", + "Name": "Integer Slider", + "Type": "number", + "Type2": "number", + "Value": "2", + "MaximumValue": 100.0, + "MinimumValue": 0.0, + "StepValue": 1.0, + "NumberType": "Integer", + "Description": "Produces integer values", + "SelectedIndex": 0 + }, + { + "Id": "769bc65ff1b7403a9ee4a64251612700", + "Name": "Integer Slider", + "Type": "number", + "Type2": "number", + "Value": "3", + "MaximumValue": 10.0, + "MinimumValue": -10.0, + "StepValue": 1.0, + "NumberType": "Integer", + "Description": "Produces integer values", + "SelectedIndex": 0 + } + ], + "Outputs": [], + "Nodes": [ + { + "ConcreteType": "CoreNodeModels.Range, CoreNodeModels", + "Id": "fee270f7470f4c189e90ebd031f77f8a", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "3b547fff6dfc4c158acb3e179c041de1", + "Name": "start", + "Description": "Number or letter to start the sequence at\r\nDefault value: 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "dc0b647c895b49d38445aa5a3ad4dcb1", + "Name": "end", + "Description": "Number or letter to end the sequence at\r\nDefault value: 9", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "f061c06405dc414baaa3d23dedcb1796", + "Name": "step", + "Description": "Space between numbers or letters\r\nDefault value: 1", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "53e9d2979f4244b787f85a348d280f9a", + "Name": "list", + "Description": "New list of type: var[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Longest", + "Description": "Creates a sequence of numbers or letters in the given range" + }, + { + "ConcreteType": "CoreNodeModels.Watch, CoreNodeModels", + "WatchWidth": 200.0, + "WatchHeight": 200.0, + "Id": "ba1a7cff46cd425e9118b34863875113", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "1554a4a368864481be0cda4503b930a4", + "Name": "", + "Description": "Node to show output from", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "867df9d430bb4674821c4d4da8c31e1d", + "Name": "", + "Description": "Node output", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Visualizes a node's output" + }, + { + "ConcreteType": "CoreNodeModels.Input.IntegerSlider, CoreNodeModels", + "NumberType": "Integer", + "MaximumValue": 100, + "MinimumValue": 0, + "StepValue": 1, + "Id": "7e572aea7c07447f81aed73b6d069ab3", + "NodeType": "NumberInputNode", + "Inputs": [], + "Outputs": [ + { + "Id": "496cb2bdc56c4ba5b18edabc3a428ded", + "Name": "", + "Description": "Int64", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Produces integer values", + "InputValue": 1 + }, + { + "ConcreteType": "CoreNodeModels.Input.IntegerSlider, CoreNodeModels", + "NumberType": "Integer", + "MaximumValue": 100, + "MinimumValue": 0, + "StepValue": 1, + "Id": "27e29d8bf150412c8bf386a663503116", + "NodeType": "NumberInputNode", + "Inputs": [], + "Outputs": [ + { + "Id": "2f557d040538471da952c88ab0aef647", + "Name": "", + "Description": "Int64", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Produces integer values", + "InputValue": 25 + }, + { + "ConcreteType": "CoreNodeModels.Input.IntegerSlider, CoreNodeModels", + "NumberType": "Integer", + "MaximumValue": 100, + "MinimumValue": 0, + "StepValue": 1, + "Id": "e9914af921ce4d45b0c461ec8b62b388", + "NodeType": "NumberInputNode", + "Inputs": [], + "Outputs": [ + { + "Id": "68e62cd078a14b3d93878938cbd16f8d", + "Name": "", + "Description": "Int64", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Produces integer values", + "InputValue": 2 + }, + { + "ConcreteType": "CoreNodeModels.Watch, CoreNodeModels", + "WatchWidth": 200.0, + "WatchHeight": 200.0, + "Id": "bc25c44bdd834995bbe262043e7c2bf3", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "c0e617635c2c4c63beb95628cf037414", + "Name": "", + "Description": "Node to show output from", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "9cc695d357254335a98a1ecf69bdc0af", + "Name": "", + "Description": "Node output", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Visualizes a node's output" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "0cbd206774234d618a85c68e38dffe22", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "448b8bbf65884eb29ec8d06a6326d6b4", + "Name": "list", + "Description": "List to be shifted.\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "314fdae4b4af44deb7ef3a94582ee00a", + "Name": "amount", + "Description": "Amount to shift indices by. If negative, indices will be shifted to the left.\n\nint", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "968deec90fd644398a7e5d6f1e44c4a2", + "Name": "list", + "Description": "Shifted list.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.List.ShiftIndices@var[]..[],int", + "Replication": "Auto", + "Description": "Shifts indices in the list to the right by the given amount.\n\nList.ShiftIndices (list: var[]..[], amount: int): var[]..[]" + }, + { + "ConcreteType": "CoreNodeModels.Input.IntegerSlider, CoreNodeModels", + "NumberType": "Integer", + "MaximumValue": 10, + "MinimumValue": -10, + "StepValue": 1, + "Id": "769bc65ff1b7403a9ee4a64251612700", + "NodeType": "NumberInputNode", + "Inputs": [], + "Outputs": [ + { + "Id": "c4209104d64d48e0a5a0641d6f76c3f5", + "Name": "", + "Description": "Int64", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Produces integer values", + "InputValue": 3 + } + ], + "Connectors": [ + { + "Start": "53e9d2979f4244b787f85a348d280f9a", + "End": "1554a4a368864481be0cda4503b930a4", + "Id": "4ff67a94b5a244b2b737a2852bef2a19", + "IsHidden": "False" + }, + { + "Start": "867df9d430bb4674821c4d4da8c31e1d", + "End": "448b8bbf65884eb29ec8d06a6326d6b4", + "Id": "6be5b04ae8364d1f8f0dcc706bd2e1d8", + "IsHidden": "False" + }, + { + "Start": "496cb2bdc56c4ba5b18edabc3a428ded", + "End": "3b547fff6dfc4c158acb3e179c041de1", + "Id": "78b7581411954d9ebe2ff216485b14cf", + "IsHidden": "False" + }, + { + "Start": "2f557d040538471da952c88ab0aef647", + "End": "dc0b647c895b49d38445aa5a3ad4dcb1", + "Id": "ae1d62e2f40b433683ba422994af9dfe", + "IsHidden": "False" + }, + { + "Start": "68e62cd078a14b3d93878938cbd16f8d", + "End": "f061c06405dc414baaa3d23dedcb1796", + "Id": "a208fb2a1fab48a29928448547e7b04a", + "IsHidden": "False" + }, + { + "Start": "968deec90fd644398a7e5d6f1e44c4a2", + "End": "c0e617635c2c4c63beb95628cf037414", + "Id": "c1177b0c798f49ddb964382059d49480", + "IsHidden": "False" + }, + { + "Start": "c4209104d64d48e0a5a0641d6f76c3f5", + "End": "314fdae4b4af44deb7ef3a94582ee00a", + "Id": "3cb67b9af3da483184a6a47b48c640f1", + "IsHidden": "False" + } + ], + "Dependencies": [], + "NodeLibraryDependencies": [], + "Thumbnail": "", + "GraphDocumentationURL": null, + "ExtensionWorkspaceData": [ + { + "ExtensionGuid": "28992e1d-abb9-417f-8b1b-05e053bee670", + "Name": "Properties", + "Version": "2.19", + "Data": {} + } + ], + "Author": "None provided", + "Linting": { + "activeLinter": "None", + "activeLinterId": "7b75fb44-43fd-4631-a878-29f4d5d8399a", + "warningCount": 0, + "errorCount": 0 + }, + "Bindings": [], + "View": { + "Dynamo": { + "ScaleFactor": 1.0, + "HasRunWithoutCrash": true, + "IsVisibleInDynamoLibrary": true, + "Version": "2.19.0.5742", + "RunType": "Automatic", + "RunPeriod": "1000" + }, + "Camera": { + "Name": "_Background Preview", + "EyeX": -13.988694190979004, + "EyeY": 18.264490127563477, + "EyeZ": 21.429862976074219, + "LookX": 16.723785400390625, + "LookY": -5.2774238586425781, + "LookZ": -19.588394165039063, + "UpX": -0.009065740741789341, + "UpY": 0.99990254640579224, + "UpZ": 0.010618607513606548 + }, + "ConnectorPins": [], + "NodeViews": [ + { + "Id": "fee270f7470f4c189e90ebd031f77f8a", + "Name": "Range", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -85.019269920661031, + "Y": -50.8937049115776 + }, + { + "Id": "ba1a7cff46cd425e9118b34863875113", + "Name": "Watch", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 192.98073007933897, + "Y": -50.8937049115776 + }, + { + "Id": "7e572aea7c07447f81aed73b6d069ab3", + "Name": "Integer Slider", + "IsSetAsInput": true, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -533.019269920661, + "Y": -163.8937049115776 + }, + { + "Id": "27e29d8bf150412c8bf386a663503116", + "Name": "Integer Slider", + "IsSetAsInput": true, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -533.019269920661, + "Y": -16.8937049115776 + }, + { + "Id": "e9914af921ce4d45b0c461ec8b62b388", + "Name": "Integer Slider", + "IsSetAsInput": true, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -533.019269920661, + "Y": 130.1062950884224 + }, + { + "Id": "bc25c44bdd834995bbe262043e7c2bf3", + "Name": "Watch", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 935.980730079339, + "Y": 89.1062950884224 + }, + { + "Id": "0cbd206774234d618a85c68e38dffe22", + "Name": "List.ShiftIndices", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 640.980730079339, + "Y": 89.1062950884224 + }, + { + "Id": "769bc65ff1b7403a9ee4a64251612700", + "Name": "Integer Slider", + "IsSetAsInput": true, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 192.98073007933897, + "Y": 263.10629508842237 + } + ], + "Annotations": [], + "X": 422.59036719242278, + "Y": 256.87531759237618, + "Zoom": 0.736540664375716 + } +} \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/DSCore.List.ShiftIndices.md b/doc/distrib/NodeHelpFiles/DSCore.List.ShiftIndices.md new file mode 100644 index 00000000000..fff62b0a77a --- /dev/null +++ b/doc/distrib/NodeHelpFiles/DSCore.List.ShiftIndices.md @@ -0,0 +1,8 @@ +## In Depth +`List.ShiftIndices` shifts the position of the items in a list by the `amount` input. A positive number in the `amount` input shifts the numbers up, while a negative number shifts the indices backwards. The items wrap around, causing items at the back of the list to wrap to the beginning. + +In the example below, we first generate a list with `Range`, then shift the indices forward by 3. The final 3 numbers from the original list wrap around to become the first 3 numbers on the new list. +___ +## Example File + +![List.ShiftIndices](./DSCore.List.ShiftIndices_img.jpg) \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/DSCore.List.ShiftIndices_img.jpg b/doc/distrib/NodeHelpFiles/DSCore.List.ShiftIndices_img.jpg new file mode 100644 index 00000000000..58d554ea062 Binary files /dev/null and b/doc/distrib/NodeHelpFiles/DSCore.List.ShiftIndices_img.jpg differ diff --git a/doc/distrib/NodeHelpFiles/DSCore.List.Shuffle(list).dyn b/doc/distrib/NodeHelpFiles/DSCore.List.Shuffle(list).dyn new file mode 100644 index 00000000000..93b89c96e03 --- /dev/null +++ b/doc/distrib/NodeHelpFiles/DSCore.List.Shuffle(list).dyn @@ -0,0 +1,421 @@ +{ + "Uuid": "ced47393-e047-4723-8238-cbde5a87376f", + "IsCustomNode": false, + "Description": "", + "Name": "DSCore.List.Shuffle", + "ElementResolver": { + "ResolutionMap": {} + }, + "Inputs": [ + { + "Id": "75c9b1c5be89470897a1f09337962fb5", + "Name": "Integer Slider", + "Type": "number", + "Type2": "number", + "Value": "1", + "MaximumValue": 100.0, + "MinimumValue": 0.0, + "StepValue": 1.0, + "NumberType": "Integer", + "Description": "Produces integer values", + "SelectedIndex": 0 + }, + { + "Id": "f840a8287aa646db87b3092ad8c6c830", + "Name": "Integer Slider", + "Type": "number", + "Type2": "number", + "Value": "25", + "MaximumValue": 100.0, + "MinimumValue": 0.0, + "StepValue": 1.0, + "NumberType": "Integer", + "Description": "Produces integer values", + "SelectedIndex": 0 + }, + { + "Id": "fb643d479f224927b6bd9cdbdd635b4a", + "Name": "Integer Slider", + "Type": "number", + "Type2": "number", + "Value": "2", + "MaximumValue": 100.0, + "MinimumValue": 0.0, + "StepValue": 1.0, + "NumberType": "Integer", + "Description": "Produces integer values", + "SelectedIndex": 0 + } + ], + "Outputs": [], + "Nodes": [ + { + "ConcreteType": "CoreNodeModels.Range, CoreNodeModels", + "Id": "4beb4b4b881f4935806156d660fc81a2", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "51f55760b5104bbc9ea2d2b4725979b1", + "Name": "start", + "Description": "Number or letter to start the sequence at\r\nDefault value: 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "45b98f6dcc8c4120bc946f355e2ce8d0", + "Name": "end", + "Description": "Number or letter to end the sequence at\r\nDefault value: 9", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "891086ad9cfe474e9e7ed32bc6c986f3", + "Name": "step", + "Description": "Space between numbers or letters\r\nDefault value: 1", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "e24bc3f739ee4e01b6032ac9b614fe64", + "Name": "list", + "Description": "New list of type: var[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Longest", + "Description": "Creates a sequence of numbers or letters in the given range" + }, + { + "ConcreteType": "CoreNodeModels.Watch, CoreNodeModels", + "WatchWidth": 200.0, + "WatchHeight": 200.0, + "Id": "cd51b68bedc34bf8b24b17642dfbeb50", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "d2ff5ba4bf304a7b97e3b1feda6d2224", + "Name": "", + "Description": "Node to show output from", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "96e868e2b5f0484fb820334a1ad71e4e", + "Name": "", + "Description": "Node output", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Visualizes a node's output" + }, + { + "ConcreteType": "CoreNodeModels.Input.IntegerSlider, CoreNodeModels", + "NumberType": "Integer", + "MaximumValue": 100, + "MinimumValue": 0, + "StepValue": 1, + "Id": "75c9b1c5be89470897a1f09337962fb5", + "NodeType": "NumberInputNode", + "Inputs": [], + "Outputs": [ + { + "Id": "10141d6d3ade44fca5c30583aaa53ff5", + "Name": "", + "Description": "Int64", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Produces integer values", + "InputValue": 1 + }, + { + "ConcreteType": "CoreNodeModels.Input.IntegerSlider, CoreNodeModels", + "NumberType": "Integer", + "MaximumValue": 100, + "MinimumValue": 0, + "StepValue": 1, + "Id": "f840a8287aa646db87b3092ad8c6c830", + "NodeType": "NumberInputNode", + "Inputs": [], + "Outputs": [ + { + "Id": "0a7b7be8b4e9428d9d492b9c443bfe99", + "Name": "", + "Description": "Int64", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Produces integer values", + "InputValue": 25 + }, + { + "ConcreteType": "CoreNodeModels.Input.IntegerSlider, CoreNodeModels", + "NumberType": "Integer", + "MaximumValue": 100, + "MinimumValue": 0, + "StepValue": 1, + "Id": "fb643d479f224927b6bd9cdbdd635b4a", + "NodeType": "NumberInputNode", + "Inputs": [], + "Outputs": [ + { + "Id": "80ba4d60474047abaa0bc047c417b4ff", + "Name": "", + "Description": "Int64", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Produces integer values", + "InputValue": 2 + }, + { + "ConcreteType": "CoreNodeModels.Watch, CoreNodeModels", + "WatchWidth": 200.0, + "WatchHeight": 200.0, + "Id": "0391ce1456774b8a85cb595c94ef4d94", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "1429349ac3114b2e8ac3a4d00e0b3c20", + "Name": "", + "Description": "Node to show output from", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "69274b5fe8334a8199cae54284248e1e", + "Name": "", + "Description": "Node output", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Visualizes a node's output" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "f93aa38b94834821aa9008f02793125b", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "fcc8acc46c3549e28e4e4e77a7d98388", + "Name": "list", + "Description": "List to shuffle.\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "0fc8f367abcd4ea1ab68f352d0504f2c", + "Name": "list", + "Description": "Randomized list.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.List.Shuffle@var[]..[]", + "Replication": "Auto", + "Description": "Shuffles a list, randomizing the order of its items.\n\nList.Shuffle (list: var[]..[]): var[]..[]" + } + ], + "Connectors": [ + { + "Start": "e24bc3f739ee4e01b6032ac9b614fe64", + "End": "d2ff5ba4bf304a7b97e3b1feda6d2224", + "Id": "0a9e95897f6c48a0b5caeba5ad5fd00e", + "IsHidden": "False" + }, + { + "Start": "96e868e2b5f0484fb820334a1ad71e4e", + "End": "fcc8acc46c3549e28e4e4e77a7d98388", + "Id": "b7f22f9aa79843e799fea534dc9327af", + "IsHidden": "False" + }, + { + "Start": "10141d6d3ade44fca5c30583aaa53ff5", + "End": "51f55760b5104bbc9ea2d2b4725979b1", + "Id": "4aaef8389e50405cbc4bf31406f6304c", + "IsHidden": "False" + }, + { + "Start": "0a7b7be8b4e9428d9d492b9c443bfe99", + "End": "45b98f6dcc8c4120bc946f355e2ce8d0", + "Id": "9e2e83849e324147806c6e4d671d0219", + "IsHidden": "False" + }, + { + "Start": "80ba4d60474047abaa0bc047c417b4ff", + "End": "891086ad9cfe474e9e7ed32bc6c986f3", + "Id": "150368bf7dd54e979e0e67cd75d6a3c9", + "IsHidden": "False" + }, + { + "Start": "0fc8f367abcd4ea1ab68f352d0504f2c", + "End": "1429349ac3114b2e8ac3a4d00e0b3c20", + "Id": "571235a6c79f43d2a21550cbc9d14eff", + "IsHidden": "False" + } + ], + "Dependencies": [], + "NodeLibraryDependencies": [], + "Thumbnail": "", + "GraphDocumentationURL": null, + "ExtensionWorkspaceData": [ + { + "ExtensionGuid": "28992e1d-abb9-417f-8b1b-05e053bee670", + "Name": "Properties", + "Version": "2.19", + "Data": {} + } + ], + "Author": "None provided", + "Linting": { + "activeLinter": "None", + "activeLinterId": "7b75fb44-43fd-4631-a878-29f4d5d8399a", + "warningCount": 0, + "errorCount": 0 + }, + "Bindings": [], + "View": { + "Dynamo": { + "ScaleFactor": 1.0, + "HasRunWithoutCrash": true, + "IsVisibleInDynamoLibrary": true, + "Version": "2.19.0.5742", + "RunType": "Automatic", + "RunPeriod": "1000" + }, + "Camera": { + "Name": "_Background Preview", + "EyeX": -13.988694190979004, + "EyeY": 18.264490127563477, + "EyeZ": 21.429862976074219, + "LookX": 16.723785400390625, + "LookY": -5.2774238586425781, + "LookZ": -19.588394165039063, + "UpX": -0.009065740741789341, + "UpY": 0.99990254640579224, + "UpZ": 0.010618607513606548 + }, + "ConnectorPins": [], + "NodeViews": [ + { + "Id": "4beb4b4b881f4935806156d660fc81a2", + "Name": "Range", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -82.275381148499946, + "Y": 34.2135069877429 + }, + { + "Id": "cd51b68bedc34bf8b24b17642dfbeb50", + "Name": "Watch", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 195.72461885150005, + "Y": 34.213506987742917 + }, + { + "Id": "75c9b1c5be89470897a1f09337962fb5", + "Name": "Integer Slider", + "IsSetAsInput": true, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -530.2753811485, + "Y": -78.7864930122571 + }, + { + "Id": "f840a8287aa646db87b3092ad8c6c830", + "Name": "Integer Slider", + "IsSetAsInput": true, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -530.2753811485, + "Y": 68.2135069877429 + }, + { + "Id": "fb643d479f224927b6bd9cdbdd635b4a", + "Name": "Integer Slider", + "IsSetAsInput": true, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -530.2753811485, + "Y": 215.2135069877429 + }, + { + "Id": "0391ce1456774b8a85cb595c94ef4d94", + "Name": "Watch", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 841.7246188515, + "Y": 34.213506987742917 + }, + { + "Id": "f93aa38b94834821aa9008f02793125b", + "Name": "List.Shuffle", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 572.7246188515, + "Y": 34.213506987742917 + } + ], + "Annotations": [], + "X": 443.54405103515518, + "Y": 237.68036992951039, + "Zoom": 0.77986658580958157 + } +} \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/DSCore.List.Shuffle(list).md b/doc/distrib/NodeHelpFiles/DSCore.List.Shuffle(list).md new file mode 100644 index 00000000000..afafa17cddf --- /dev/null +++ b/doc/distrib/NodeHelpFiles/DSCore.List.Shuffle(list).md @@ -0,0 +1,8 @@ +## In Depth +`List.Shuffle` randomizes the order of list items. + +In the example below, we first generate a list using `Range` and then use `List.Shuffle` to produce a randomized list. +___ +## Example File + +![List.Shuffle](./DSCore.List.Shuffle(list)_img.jpg) \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/DSCore.List.Shuffle(list)_img.jpg b/doc/distrib/NodeHelpFiles/DSCore.List.Shuffle(list)_img.jpg new file mode 100644 index 00000000000..1bb697ea1ae Binary files /dev/null and b/doc/distrib/NodeHelpFiles/DSCore.List.Shuffle(list)_img.jpg differ diff --git a/doc/distrib/NodeHelpFiles/DSCore.List.Sort.dyn b/doc/distrib/NodeHelpFiles/DSCore.List.Sort.dyn new file mode 100644 index 00000000000..779e247a51e --- /dev/null +++ b/doc/distrib/NodeHelpFiles/DSCore.List.Sort.dyn @@ -0,0 +1,390 @@ +{ + "Uuid": "5de7be83-1537-4cd2-b0bc-54026092646e", + "IsCustomNode": false, + "Description": "", + "Name": "DSCore.List.Sort", + "ElementResolver": { + "ResolutionMap": {} + }, + "Inputs": [ + { + "Id": "120ad7303dac4ef689accfd7dbc0f244", + "Name": "Integer Slider", + "Type": "number", + "Type2": "number", + "Value": "25", + "MaximumValue": 100.0, + "MinimumValue": 0.0, + "StepValue": 1.0, + "NumberType": "Integer", + "Description": "Produces integer values", + "SelectedIndex": 0 + } + ], + "Outputs": [], + "Nodes": [ + { + "ConcreteType": "CoreNodeModels.Watch, CoreNodeModels", + "WatchWidth": 200.0, + "WatchHeight": 200.0, + "Id": "b0d0b5b7831e457c830f2c2fe94f709a", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "226f18122ab84e93a014ae61e3a5f57e", + "Name": "", + "Description": "Node to show output from", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "75e6a79e3ccf4d11bcbb8818f9f36443", + "Name": "", + "Description": "Node output", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Visualizes a node's output" + }, + { + "ConcreteType": "CoreNodeModels.Watch, CoreNodeModels", + "WatchWidth": 200.0, + "WatchHeight": 200.0, + "Id": "411904574e9d44e8a6f2f9444170945d", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "cbd1d136053142f5b9bd1d8f67be57f9", + "Name": "", + "Description": "Node to show output from", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "3a2e590ad675469382788c5516bd434d", + "Name": "", + "Description": "Node output", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Visualizes a node's output" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "a9b896c3b63c47cca8849a223f907602", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "ebafc536a7ca437baf10ff1624ae3a59", + "Name": "amount", + "Description": "Amount of random numbers the result list will contain.\n\nint", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "4e8b4d6e40bb42ff87f023af90288acd", + "Name": "number", + "Description": "List of random numbers between 0 and 1.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Math.RandomList@int", + "Replication": "Auto", + "Description": "Produces a list containing the given amount of random doubles in the range of [0, 1).\n\nMath.RandomList (amount: int): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "eea5904080a24afea187c34d2a0950e3", + "NodeType": "CodeBlockNode", + "Inputs": [ + { + "Id": "adf1ed4ac9874fdab53609fcaad4052e", + "Name": "x", + "Description": "x", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "ad92f779b87c4c65bd521c18d029c99f", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "x*10;" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "aebcd727a08448a39fb001c297408e43", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "26c4ac44218c449ba62037f1a6719c9c", + "Name": "number", + "Description": "Number to round down\n\ndouble", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "de43fd0b889543e6bdcbebd151f0c074", + "Name": "int", + "Description": "First integer smaller than the number", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Math.Floor@double", + "Replication": "Auto", + "Description": "Returns the first integer smaller than the number.\n\nMath.Floor (number: double): int" + }, + { + "ConcreteType": "CoreNodeModels.Input.IntegerSlider, CoreNodeModels", + "NumberType": "Integer", + "MaximumValue": 100, + "MinimumValue": 0, + "StepValue": 1, + "Id": "120ad7303dac4ef689accfd7dbc0f244", + "NodeType": "NumberInputNode", + "Inputs": [], + "Outputs": [ + { + "Id": "e638b35bce4d4d42bd60a3613a507e93", + "Name": "", + "Description": "Int64", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Produces integer values", + "InputValue": 25 + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "a6c6fe0272b841a1acd206f482243a39", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "c34de4fccd8447c2afd860d3fbefe11a", + "Name": "list", + "Description": "List of items to be sorted\n\nvar[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "145a05c92c6f4925a7caea4358de510c", + "Name": "int[]", + "Description": "The indices of the items in the sorted list", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.List.Sort@var[]", + "Replication": "Auto", + "Description": "Sorts a list by the items and return their indices.\n\nList.Sort (list: var[]): var[]..[]" + } + ], + "Connectors": [ + { + "Start": "75e6a79e3ccf4d11bcbb8818f9f36443", + "End": "c34de4fccd8447c2afd860d3fbefe11a", + "Id": "997f0fb7992940d9997e59d6e7d6685f", + "IsHidden": "False" + }, + { + "Start": "4e8b4d6e40bb42ff87f023af90288acd", + "End": "adf1ed4ac9874fdab53609fcaad4052e", + "Id": "6a63b92b381b4126bfab569ba44f5e0e", + "IsHidden": "False" + }, + { + "Start": "ad92f779b87c4c65bd521c18d029c99f", + "End": "26c4ac44218c449ba62037f1a6719c9c", + "Id": "b92ceaca475744269ac50c7b2eadc6d6", + "IsHidden": "False" + }, + { + "Start": "de43fd0b889543e6bdcbebd151f0c074", + "End": "226f18122ab84e93a014ae61e3a5f57e", + "Id": "847837c11f1c4db5a74cc1ff4d4ed67a", + "IsHidden": "False" + }, + { + "Start": "e638b35bce4d4d42bd60a3613a507e93", + "End": "ebafc536a7ca437baf10ff1624ae3a59", + "Id": "f5bf549a928b4b859a8451cc4e53788e", + "IsHidden": "False" + }, + { + "Start": "145a05c92c6f4925a7caea4358de510c", + "End": "cbd1d136053142f5b9bd1d8f67be57f9", + "Id": "b8e5457f0fa548b4bada3b0e96e6e6d8", + "IsHidden": "False" + } + ], + "Dependencies": [], + "NodeLibraryDependencies": [], + "Thumbnail": "", + "GraphDocumentationURL": null, + "ExtensionWorkspaceData": [ + { + "ExtensionGuid": "28992e1d-abb9-417f-8b1b-05e053bee670", + "Name": "Properties", + "Version": "2.19", + "Data": {} + } + ], + "Author": "None provided", + "Linting": { + "activeLinter": "None", + "activeLinterId": "7b75fb44-43fd-4631-a878-29f4d5d8399a", + "warningCount": 0, + "errorCount": 0 + }, + "Bindings": [], + "View": { + "Dynamo": { + "ScaleFactor": 1.0, + "HasRunWithoutCrash": true, + "IsVisibleInDynamoLibrary": true, + "Version": "2.19.0.5742", + "RunType": "Automatic", + "RunPeriod": "1000" + }, + "Camera": { + "Name": "_Background Preview", + "EyeX": -13.988694190979004, + "EyeY": 18.264490127563477, + "EyeZ": 21.429862976074219, + "LookX": 16.723785400390625, + "LookY": -5.2774238586425781, + "LookZ": -19.588394165039063, + "UpX": -0.009065740741789341, + "UpY": 0.99990254640579224, + "UpZ": 0.010618607513606548 + }, + "ConnectorPins": [], + "NodeViews": [ + { + "Id": "b0d0b5b7831e457c830f2c2fe94f709a", + "Name": "Watch", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 537.06489409598748, + "Y": -7.1328576841236782 + }, + { + "Id": "411904574e9d44e8a6f2f9444170945d", + "Name": "Watch", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1190.0648940959875, + "Y": -7.1328576841236782 + }, + { + "Id": "a9b896c3b63c47cca8849a223f907602", + "Name": "Math.RandomList", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -330.93510590401252, + "Y": -7.3053576841236634 + }, + { + "Id": "eea5904080a24afea187c34d2a0950e3", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -9.9351059040125165, + "Y": -7.3053576841236634 + }, + { + "Id": "aebcd727a08448a39fb001c297408e43", + "Name": "Math.Floor", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 244.06489409598748, + "Y": -7.1328576841236782 + }, + { + "Id": "120ad7303dac4ef689accfd7dbc0f244", + "Name": "Integer Slider", + "IsSetAsInput": true, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -778.93510590401252, + "Y": -7.3053576841236634 + }, + { + "Id": "a6c6fe0272b841a1acd206f482243a39", + "Name": "List.Sort", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 914.06489409598748, + "Y": -7.1328576841236782 + } + ], + "Annotations": [], + "X": 475.99757176872669, + "Y": 259.61432434629694, + "Zoom": 0.572573463935886 + } +} \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/DSCore.List.Sort.md b/doc/distrib/NodeHelpFiles/DSCore.List.Sort.md new file mode 100644 index 00000000000..e959037a367 --- /dev/null +++ b/doc/distrib/NodeHelpFiles/DSCore.List.Sort.md @@ -0,0 +1,8 @@ +## In Depth +`List.Sort` organizes a list of items according to the built-in ordering for the data type. For example, a list of numbers is sorted from smallest to largest, while a list of strings is sorted alphabetically. + +In the example below, we use `Math.RandomList` to first generate a list of random numbers between 0 and 1. We then multiply by 10 and use a `Math.Floor` operation to get a list of random integers between 0 and 9. `List.Sort` then creates a sorted list from smallest to largest number. +___ +## Example File + +![List.Sort](./DSCore.List.Sort_img.jpg) \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/DSCore.List.SortByKey.dyn b/doc/distrib/NodeHelpFiles/DSCore.List.SortByKey.dyn new file mode 100644 index 00000000000..128aa43743f --- /dev/null +++ b/doc/distrib/NodeHelpFiles/DSCore.List.SortByKey.dyn @@ -0,0 +1,473 @@ +{ + "Uuid": "1976ff2e-1adc-4090-a3cf-77dd0ad5b676", + "IsCustomNode": false, + "Description": "", + "Name": "DSCore.List.SortByKey", + "ElementResolver": { + "ResolutionMap": {} + }, + "Inputs": [], + "Outputs": [], + "Nodes": [ + { + "ConcreteType": "CoreNodeModels.Watch, CoreNodeModels", + "WatchWidth": 200.0, + "WatchHeight": 200.0, + "Id": "08ece734fda54032829b6523f5b36460", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "3917e95da6f84c3bb75e6c75443a56e1", + "Name": "", + "Description": "Node to show output from", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "ce4ff81837684d44ab20411cef338ab1", + "Name": "", + "Description": "Node output", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Visualizes a node's output" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "931bd23aba9d4adf9f35b41319996829", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "8e93425917ba41bfa361899c15bcbc78", + "Name": "amount", + "Description": "Amount of random numbers the result list will contain.\n\nint", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "2b6e1ac888ad4ef8af6f0e1f0b91eabf", + "Name": "number", + "Description": "List of random numbers between 0 and 1.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Math.RandomList@int", + "Replication": "Auto", + "Description": "Produces a list containing the given amount of random doubles in the range of [0, 1).\n\nMath.RandomList (amount: int): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "3c326be856814407a8d4ca4df9eeccc4", + "NodeType": "CodeBlockNode", + "Inputs": [ + { + "Id": "7fdbaf1fe1d140a4b19a436b3c7dcc45", + "Name": "x", + "Description": "x", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "65c49dd2e3ad4cf2980919d1e16c6da0", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "x*5;" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "e2d47027b5be46f1894c3e2d3edbfdc4", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "8d31c82cded84b0a84deb138d7b4c89c", + "Name": "number", + "Description": "Number to round down\n\ndouble", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "fc52839afb88486e908e098affc2e61b", + "Name": "int", + "Description": "First integer smaller than the number", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Math.Floor@double", + "Replication": "Auto", + "Description": "Returns the first integer smaller than the number.\n\nMath.Floor (number: double): int" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "eba9495a02a54932bc9c7dee64ad74da", + "NodeType": "CodeBlockNode", + "Inputs": [], + "Outputs": [ + { + "Id": "3958b81bab514dd8a1800c0437bc9235", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "10;" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "3063f76967e147a0afe49f310875fc09", + "NodeType": "CodeBlockNode", + "Inputs": [], + "Outputs": [ + { + "Id": "f2a1eb4143f14357b7287d3a8f3e53c5", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "0..9..1;" + }, + { + "ConcreteType": "CoreNodeModels.Watch, CoreNodeModels", + "WatchWidth": 200.0, + "WatchHeight": 200.0, + "Id": "f44f81f2c0a14a969150f265c64c944e", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "05c332d7e98e47f4b2d276766a9f1c4f", + "Name": "", + "Description": "Node to show output from", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "90639ee6ce944fe48457af89a9d67135", + "Name": "", + "Description": "Node output", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Visualizes a node's output" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "ada1e41fda124aaba5b458a5eb15c6ed", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "32c3909724214ffd90db7f2bf2b09012", + "Name": "list", + "Description": "list to be sorted\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "1dbf7b7f3f3d451bacc2e932526be18d", + "Name": "keys", + "Description": "list of keys, keys have to be sortable (e.g. numbers,strings)\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "72deb5dae5e84820a94e62c44ce2913e", + "Name": "sortedList", + "Description": "type: var[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "f4f15050ab9f4c7f86399e8c0b77fbab", + "Name": "sortedKeys", + "Description": "type: var[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.List.SortByKey@var[]..[],var[]..[]", + "Replication": "Auto", + "Description": "Sort list based on its keys\n\nList.SortByKey (list: var[]..[], keys: var[]..[]): var[]..[]" + }, + { + "ConcreteType": "CoreNodeModels.Watch, CoreNodeModels", + "WatchWidth": 200.0, + "WatchHeight": 200.0, + "Id": "de5c9bf89f6f478b82b94935725d18c2", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "34a0635580c447b18c665512ed6ca6d0", + "Name": "", + "Description": "Node to show output from", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "f158868997ce4bd490d3101b1a002608", + "Name": "", + "Description": "Node output", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Visualizes a node's output" + } + ], + "Connectors": [ + { + "Start": "ce4ff81837684d44ab20411cef338ab1", + "End": "1dbf7b7f3f3d451bacc2e932526be18d", + "Id": "f4d21c520b3a49b8b7353266c1923842", + "IsHidden": "False" + }, + { + "Start": "2b6e1ac888ad4ef8af6f0e1f0b91eabf", + "End": "7fdbaf1fe1d140a4b19a436b3c7dcc45", + "Id": "17acf9c06ef94b8a93bccccb3fc93d6c", + "IsHidden": "False" + }, + { + "Start": "65c49dd2e3ad4cf2980919d1e16c6da0", + "End": "8d31c82cded84b0a84deb138d7b4c89c", + "Id": "6aaea11592fc4541a97f35ec354e47d7", + "IsHidden": "False" + }, + { + "Start": "fc52839afb88486e908e098affc2e61b", + "End": "3917e95da6f84c3bb75e6c75443a56e1", + "Id": "713a9abb440444c6b366f7c57a3b45b6", + "IsHidden": "False" + }, + { + "Start": "3958b81bab514dd8a1800c0437bc9235", + "End": "8e93425917ba41bfa361899c15bcbc78", + "Id": "ebfb84f689b148b89de067b4197deb1a", + "IsHidden": "False" + }, + { + "Start": "f2a1eb4143f14357b7287d3a8f3e53c5", + "End": "32c3909724214ffd90db7f2bf2b09012", + "Id": "a533027b12c940f2a2d98bc347fe9191", + "IsHidden": "False" + }, + { + "Start": "72deb5dae5e84820a94e62c44ce2913e", + "End": "05c332d7e98e47f4b2d276766a9f1c4f", + "Id": "00002be2414a465582c1073e102acbdf", + "IsHidden": "False" + }, + { + "Start": "f4f15050ab9f4c7f86399e8c0b77fbab", + "End": "34a0635580c447b18c665512ed6ca6d0", + "Id": "bf619824de884b89ad940cff696a4479", + "IsHidden": "False" + } + ], + "Dependencies": [], + "NodeLibraryDependencies": [], + "Thumbnail": "", + "GraphDocumentationURL": null, + "ExtensionWorkspaceData": [ + { + "ExtensionGuid": "28992e1d-abb9-417f-8b1b-05e053bee670", + "Name": "Properties", + "Version": "2.19", + "Data": {} + } + ], + "Author": "None provided", + "Linting": { + "activeLinter": "None", + "activeLinterId": "7b75fb44-43fd-4631-a878-29f4d5d8399a", + "warningCount": 0, + "errorCount": 0 + }, + "Bindings": [], + "View": { + "Dynamo": { + "ScaleFactor": 1.0, + "HasRunWithoutCrash": true, + "IsVisibleInDynamoLibrary": true, + "Version": "2.19.0.5742", + "RunType": "Automatic", + "RunPeriod": "1000" + }, + "Camera": { + "Name": "_Background Preview", + "EyeX": -13.988694190979004, + "EyeY": 18.264490127563477, + "EyeZ": 21.429862976074219, + "LookX": 16.723785400390625, + "LookY": -5.2774238586425781, + "LookZ": -19.588394165039063, + "UpX": -0.009065740741789341, + "UpY": 0.99990254640579224, + "UpZ": 0.010618607513606548 + }, + "ConnectorPins": [], + "NodeViews": [ + { + "Id": "08ece734fda54032829b6523f5b36460", + "Name": "Watch", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 335.67845414599606, + "Y": 223.19875114319393 + }, + { + "Id": "931bd23aba9d4adf9f35b41319996829", + "Name": "Math.RandomList", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -532.321545854004, + "Y": 223.02625114319392 + }, + { + "Id": "3c326be856814407a8d4ca4df9eeccc4", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -211.32154585400394, + "Y": 223.02625114319392 + }, + { + "Id": "e2d47027b5be46f1894c3e2d3edbfdc4", + "Name": "Math.Floor", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 42.678454145996056, + "Y": 223.1987511431939 + }, + { + "Id": "eba9495a02a54932bc9c7dee64ad74da", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -786.321545854004, + "Y": 222.8537511431939 + }, + { + "Id": "3063f76967e147a0afe49f310875fc09", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 335.67845414599606, + "Y": 75.026251143193917 + }, + { + "Id": "f44f81f2c0a14a969150f265c64c944e", + "Name": "Watch", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1033.6784541459961, + "Y": -7.8012488568060689 + }, + { + "Id": "ada1e41fda124aaba5b458a5eb15c6ed", + "Name": "List.SortByKey", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 712.678454145996, + "Y": 132.19875114319393 + }, + { + "Id": "de5c9bf89f6f478b82b94935725d18c2", + "Name": "Watch", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1033.6784541459961, + "Y": 306.19875114319393 + } + ], + "Annotations": [], + "X": 636.8697928358024, + "Y": 258.297012056242, + "Zoom": 0.42716338221268479 + } +} \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/DSCore.List.SortByKey.md b/doc/distrib/NodeHelpFiles/DSCore.List.SortByKey.md new file mode 100644 index 00000000000..703da6f9947 --- /dev/null +++ b/doc/distrib/NodeHelpFiles/DSCore.List.SortByKey.md @@ -0,0 +1,8 @@ +## In Depth +`List.SortByKey` takes an input list to sort and a list of corresponding sortable keys, such as numbers or strings. `List.SortByKey` sorts the list of keys in ascending order and rearranges the input list to correspond to the new order of the sorted keys. This node outputs both the rearranged list and the sorted list of keys. + +In the example below, we use a range from 0 to 9 as our input list. For the list of keys, we generate a list of 10 random numbers between 0 and 4. The list of keys is sorted numerically, while the range from 0 to 9 is rearranged according to the order of the corresponding elements from the list of keys. +___ +## Example File + +![List.SortByKey](./DSCore.List.SortByKey_img.jpg) \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/DSCore.List.SortByKey_img.jpg b/doc/distrib/NodeHelpFiles/DSCore.List.SortByKey_img.jpg new file mode 100644 index 00000000000..f20f45bcad0 Binary files /dev/null and b/doc/distrib/NodeHelpFiles/DSCore.List.SortByKey_img.jpg differ diff --git a/doc/distrib/NodeHelpFiles/DSCore.List.SortIndexByValue.dyn b/doc/distrib/NodeHelpFiles/DSCore.List.SortIndexByValue.dyn new file mode 100644 index 00000000000..8b37499e769 --- /dev/null +++ b/doc/distrib/NodeHelpFiles/DSCore.List.SortIndexByValue.dyn @@ -0,0 +1,326 @@ +{ + "Uuid": "d6824de2-22de-4ba6-bce4-fd6fcfc1f06b", + "IsCustomNode": false, + "Description": "", + "Name": "DSCore.List.SortIndexByValue", + "ElementResolver": { + "ResolutionMap": {} + }, + "Inputs": [], + "Outputs": [], + "Nodes": [ + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "919fc9350b754a9cac068d553bdf3101", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "0888f4f53bc241e3aaf7699686a3302c", + "Name": "amount", + "Description": "Amount of random numbers the result list will contain.\n\nint", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "be6ad3116a804b4fa56dfd156479ac63", + "Name": "number", + "Description": "List of random numbers between 0 and 1.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Math.RandomList@int", + "Replication": "Auto", + "Description": "Produces a list containing the given amount of random doubles in the range of [0, 1).\n\nMath.RandomList (amount: int): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "582a307e0c9d4942bd4e7db6c3fc80cb", + "NodeType": "CodeBlockNode", + "Inputs": [], + "Outputs": [ + { + "Id": "fe58c82674964d2bab63a51cb185aaa6", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "10;" + }, + { + "ConcreteType": "CoreNodeModels.Watch, CoreNodeModels", + "WatchWidth": 200.0, + "WatchHeight": 200.0, + "Id": "cab006e38ed34a46ba691681d015b744", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "ec7cf9d649b74df2a10e53b95eda15d0", + "Name": "", + "Description": "Node to show output from", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "da564c4b2735418c94fbda7487e1a4b0", + "Name": "", + "Description": "Node output", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Visualizes a node's output" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "863d480931e647808ce75cb9b040684c", + "NodeType": "CodeBlockNode", + "Inputs": [ + { + "Id": "8e63e298c98b4cafa527531a84b34e6e", + "Name": "x", + "Description": "x", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "c072d80e19644d0fb89f069a14a948b4", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "x*10;" + }, + { + "ConcreteType": "CoreNodeModels.Watch, CoreNodeModels", + "WatchWidth": 200.0, + "WatchHeight": 200.0, + "Id": "f36307899a4d4ff0a49794179e437c45", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "7a9d8168da2842c5a90fd3d696af3fa0", + "Name": "", + "Description": "Node to show output from", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "3e5c0eb500a94e6ea3adcfeca1397a83", + "Name": "", + "Description": "Node output", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Visualizes a node's output" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "25aff17bfb00464ab86a93be13d6f40b", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "f10525bd02174285ad76d9656c6a5c59", + "Name": "list", + "Description": "List of items to be sorted\n\ndouble[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "a5bb3157e798423792e7aac580a59849", + "Name": "int[]", + "Description": "The indices of the items in the sorted list", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.List.SortIndexByValue@double[]", + "Replication": "Auto", + "Description": "Sorts a list by the items and return their indices.\n\nList.SortIndexByValue (list: double[]): var[]..[]" + } + ], + "Connectors": [ + { + "Start": "be6ad3116a804b4fa56dfd156479ac63", + "End": "8e63e298c98b4cafa527531a84b34e6e", + "Id": "906843de10e54a5cbaa248c7771a992d", + "IsHidden": "False" + }, + { + "Start": "fe58c82674964d2bab63a51cb185aaa6", + "End": "0888f4f53bc241e3aaf7699686a3302c", + "Id": "54f991b0f07a4d7f9708f617511c6dfd", + "IsHidden": "False" + }, + { + "Start": "da564c4b2735418c94fbda7487e1a4b0", + "End": "f10525bd02174285ad76d9656c6a5c59", + "Id": "25637285aa1d4228a8abc366b21a964c", + "IsHidden": "False" + }, + { + "Start": "c072d80e19644d0fb89f069a14a948b4", + "End": "ec7cf9d649b74df2a10e53b95eda15d0", + "Id": "5542c4466d154ddca6067f123b95bf79", + "IsHidden": "False" + }, + { + "Start": "a5bb3157e798423792e7aac580a59849", + "End": "7a9d8168da2842c5a90fd3d696af3fa0", + "Id": "9e81ef3b31b3444a837b2e3f9b04a42f", + "IsHidden": "False" + } + ], + "Dependencies": [], + "NodeLibraryDependencies": [], + "Thumbnail": "", + "GraphDocumentationURL": null, + "ExtensionWorkspaceData": [ + { + "ExtensionGuid": "28992e1d-abb9-417f-8b1b-05e053bee670", + "Name": "Properties", + "Version": "2.19", + "Data": {} + } + ], + "Author": "None provided", + "Linting": { + "activeLinter": "None", + "activeLinterId": "7b75fb44-43fd-4631-a878-29f4d5d8399a", + "warningCount": 0, + "errorCount": 0 + }, + "Bindings": [], + "View": { + "Dynamo": { + "ScaleFactor": 1.0, + "HasRunWithoutCrash": true, + "IsVisibleInDynamoLibrary": true, + "Version": "2.19.0.5742", + "RunType": "Automatic", + "RunPeriod": "1000" + }, + "Camera": { + "Name": "_Background Preview", + "EyeX": -10.351632118225098, + "EyeY": 13.915582656860352, + "EyeZ": 16.000629425048828, + "LookX": 16.128910064697266, + "LookY": -8.1650753021240234, + "LookZ": -20.504016876220703, + "UpX": 0.053885128349065781, + "UpY": 0.99619466066360474, + "UpZ": -0.068501941859722137 + }, + "ConnectorPins": [], + "NodeViews": [ + { + "Id": "919fc9350b754a9cac068d553bdf3101", + "Name": "Math.RandomList", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -291.604557578705, + "Y": 2982.62279804387 + }, + { + "Id": "582a307e0c9d4942bd4e7db6c3fc80cb", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -545.604557578705, + "Y": 2982.4502980438697 + }, + { + "Id": "cab006e38ed34a46ba691681d015b744", + "Name": "Watch", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 283.395442421295, + "Y": 2982.79529804387 + }, + { + "Id": "863d480931e647808ce75cb9b040684c", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 29.395442421295, + "Y": 2982.62279804387 + }, + { + "Id": "f36307899a4d4ff0a49794179e437c45", + "Name": "Watch", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 999.395442421295, + "Y": 2982.79529804387 + }, + { + "Id": "25aff17bfb00464ab86a93be13d6f40b", + "Name": "List.SortIndexByValue", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 660.395442421295, + "Y": 2982.79529804387 + } + ], + "Annotations": [], + "X": 559.122871320804, + "Y": -1256.2359272777765, + "Zoom": 0.49443248490669595 + } +} \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/DSCore.List.SortIndexByValue.md b/doc/distrib/NodeHelpFiles/DSCore.List.SortIndexByValue.md new file mode 100644 index 00000000000..decc78dd44f --- /dev/null +++ b/doc/distrib/NodeHelpFiles/DSCore.List.SortIndexByValue.md @@ -0,0 +1,8 @@ +## In Depth +`List.SortIndexByValue` returns a list of indices sorted by their member’s values in ascending order. + +In the example below, a list of random numbers is sorted and a new order is returned as index values. +___ +## Example File + +![List.SortIndexByValue](./DSCore.List.SortIndexByValue_img.jpg) \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/DSCore.List.SortIndexByValue_img.jpg b/doc/distrib/NodeHelpFiles/DSCore.List.SortIndexByValue_img.jpg new file mode 100644 index 00000000000..bb8c6455604 Binary files /dev/null and b/doc/distrib/NodeHelpFiles/DSCore.List.SortIndexByValue_img.jpg differ diff --git a/doc/distrib/NodeHelpFiles/DSCore.List.Sort_img.jpg b/doc/distrib/NodeHelpFiles/DSCore.List.Sort_img.jpg new file mode 100644 index 00000000000..be00db99ceb Binary files /dev/null and b/doc/distrib/NodeHelpFiles/DSCore.List.Sort_img.jpg differ diff --git a/doc/distrib/NodeHelpFiles/DSCore.List.Sublists.dyn b/doc/distrib/NodeHelpFiles/DSCore.List.Sublists.dyn index e65f782a092..0474dd4b506 100644 --- a/doc/distrib/NodeHelpFiles/DSCore.List.Sublists.dyn +++ b/doc/distrib/NodeHelpFiles/DSCore.List.Sublists.dyn @@ -200,18 +200,18 @@ "ScaleFactor": 1.0, "HasRunWithoutCrash": true, "IsVisibleInDynamoLibrary": true, - "Version": "2.19.0.5742", + "Version": "2.19.0.5874", "RunType": "Automatic", "RunPeriod": "1000" }, "Camera": { "Name": "_Background Preview", - "EyeX": -83.2733050072657, - "EyeY": 26.278053449735108, - "EyeZ": 97.537147413392489, - "LookX": 83.2733050072657, - "LookY": -26.278053449735108, - "LookZ": -97.537147413392489, + "EyeX": -13.988694190979004, + "EyeY": 18.264490127563477, + "EyeZ": 21.429862976074219, + "LookX": 16.723785400390625, + "LookY": -5.2774238586425781, + "LookZ": -19.588394165039063, "UpX": -0.009065740741789341, "UpY": 0.99990254640579224, "UpZ": 0.010618607513606548 diff --git a/doc/distrib/NodeHelpFiles/DSCore.List.Sublists.md b/doc/distrib/NodeHelpFiles/DSCore.List.Sublists.md index 7211a77ea4b..4515043e0f7 100644 --- a/doc/distrib/NodeHelpFiles/DSCore.List.Sublists.md +++ b/doc/distrib/NodeHelpFiles/DSCore.List.Sublists.md @@ -1,8 +1,7 @@ ## In Depth -`List.Sublists` takes an input list and returns a series of sublists based on the input range and offset. The range determines which elements of the input list to put into the first sublist. The offset determines where subsequent sublists begin, for example, an offset of 2 begins the next sublist at index 2, the following sublist at 4, and so on. This process repeats, increasing the range by the given offset until the resulting sublist is empty. - -The example below starts with a range of numbers from 0 to 9. The sublist range is 0 to 5, with an offset of 2. In the output of nested sublists, the first list contains the elements with indices in the range 0..5, and the second list contains the elements with indices 2..7. As this is repeated, the subsequent sublists get shorter as the end of the range becomes larger than the length of the initial list. +`List.Sublists` returns a series of sublists from a given list based on the input range and offset. The range determines the elements of the input list that are placed into the first sublist. An offset is applied to the range, and the new range determines the second sublist. This process repeats, increasing the starting index of the range by the given offset until the resulting sublist is empty. +In the example below, we start with a range of numbers from 0 to 9. The range 0 to 5 is used as the sublist range, with an offset of 2. In the output of nested sublists, the first list contains the elements with indices in the range 0..5, and the second list contains the elements with indices 2..7. As this is repeated, the subsequent sublists become shorter as the end of the range exceeds the length of the initial list. ___ ## Example File diff --git a/doc/distrib/NodeHelpFiles/DSCore.List.Sublists_img.jpg b/doc/distrib/NodeHelpFiles/DSCore.List.Sublists_img.jpg index 79334dcb0db..58838ecae7c 100644 Binary files a/doc/distrib/NodeHelpFiles/DSCore.List.Sublists_img.jpg and b/doc/distrib/NodeHelpFiles/DSCore.List.Sublists_img.jpg differ diff --git a/doc/distrib/NodeHelpFiles/DSCore.List.TakeEveryNthItem.dyn b/doc/distrib/NodeHelpFiles/DSCore.List.TakeEveryNthItem.dyn new file mode 100644 index 00000000000..7f602f0a675 --- /dev/null +++ b/doc/distrib/NodeHelpFiles/DSCore.List.TakeEveryNthItem.dyn @@ -0,0 +1,492 @@ +{ + "Uuid": "6622086b-2df1-42e2-b999-27fcd44d02a1", + "IsCustomNode": false, + "Description": "", + "Name": "DSCore.List.TakeEveryNthItem", + "ElementResolver": { + "ResolutionMap": {} + }, + "Inputs": [ + { + "Id": "c6590d9793774c4fbd16d71349a99990", + "Name": "Integer Slider", + "Type": "number", + "Type2": "number", + "Value": "1", + "MaximumValue": 100.0, + "MinimumValue": 0.0, + "StepValue": 1.0, + "NumberType": "Integer", + "Description": "Produces integer values", + "SelectedIndex": 0 + }, + { + "Id": "6931a37a10864bf4a8497ca10be9ceb0", + "Name": "Integer Slider", + "Type": "number", + "Type2": "number", + "Value": "25", + "MaximumValue": 100.0, + "MinimumValue": 0.0, + "StepValue": 1.0, + "NumberType": "Integer", + "Description": "Produces integer values", + "SelectedIndex": 0 + }, + { + "Id": "95c90e0829074d499eb60863a04c5f81", + "Name": "Integer Slider", + "Type": "number", + "Type2": "number", + "Value": "2", + "MaximumValue": 100.0, + "MinimumValue": 0.0, + "StepValue": 1.0, + "NumberType": "Integer", + "Description": "Produces integer values", + "SelectedIndex": 0 + }, + { + "Id": "b4da057a2d40437d82dfa22dd52bf099", + "Name": "Integer Slider", + "Type": "number", + "Type2": "number", + "Value": "2", + "MaximumValue": 10.0, + "MinimumValue": -10.0, + "StepValue": 1.0, + "NumberType": "Integer", + "Description": "Produces integer values", + "SelectedIndex": 0 + } + ], + "Outputs": [], + "Nodes": [ + { + "ConcreteType": "CoreNodeModels.Range, CoreNodeModels", + "Id": "9fc0b46649694e61b247078511609a1b", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "602ef88b9b7a4d43aa0870201913ec7d", + "Name": "start", + "Description": "Number or letter to start the sequence at\r\nDefault value: 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "0aa5fe34117a485a8f5430bd0aacc338", + "Name": "end", + "Description": "Number or letter to end the sequence at\r\nDefault value: 9", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "ff16f52ecdf7411b85b1f3e3b4753c92", + "Name": "step", + "Description": "Space between numbers or letters\r\nDefault value: 1", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "adbbf7c7d55d45f68bf17a2f19bc0834", + "Name": "list", + "Description": "New list of type: var[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Longest", + "Description": "Creates a sequence of numbers or letters in the given range" + }, + { + "ConcreteType": "CoreNodeModels.Watch, CoreNodeModels", + "WatchWidth": 200.0, + "WatchHeight": 200.0, + "Id": "14929b527d744a21878dbc341fd4ec8a", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "0bb09166bfc8420ab6d4f787bf9b2d6c", + "Name": "", + "Description": "Node to show output from", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "e7271d969bc94a83b285a7c65f0c44da", + "Name": "", + "Description": "Node output", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Visualizes a node's output" + }, + { + "ConcreteType": "CoreNodeModels.Input.IntegerSlider, CoreNodeModels", + "NumberType": "Integer", + "MaximumValue": 100, + "MinimumValue": 0, + "StepValue": 1, + "Id": "c6590d9793774c4fbd16d71349a99990", + "NodeType": "NumberInputNode", + "Inputs": [], + "Outputs": [ + { + "Id": "e561334b2e5f4322ba9e220007e2d76d", + "Name": "", + "Description": "Int64", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Produces integer values", + "InputValue": 1 + }, + { + "ConcreteType": "CoreNodeModels.Input.IntegerSlider, CoreNodeModels", + "NumberType": "Integer", + "MaximumValue": 100, + "MinimumValue": 0, + "StepValue": 1, + "Id": "6931a37a10864bf4a8497ca10be9ceb0", + "NodeType": "NumberInputNode", + "Inputs": [], + "Outputs": [ + { + "Id": "3e42f0060d3b4c398ee7e9264074a89b", + "Name": "", + "Description": "Int64", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Produces integer values", + "InputValue": 25 + }, + { + "ConcreteType": "CoreNodeModels.Input.IntegerSlider, CoreNodeModels", + "NumberType": "Integer", + "MaximumValue": 100, + "MinimumValue": 0, + "StepValue": 1, + "Id": "95c90e0829074d499eb60863a04c5f81", + "NodeType": "NumberInputNode", + "Inputs": [], + "Outputs": [ + { + "Id": "c7ebcc01e0764cd79b2032832ed85c0d", + "Name": "", + "Description": "Int64", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Produces integer values", + "InputValue": 2 + }, + { + "ConcreteType": "CoreNodeModels.Watch, CoreNodeModels", + "WatchWidth": 200.0, + "WatchHeight": 200.0, + "Id": "a63eae4559f24677a1a3284f788ca02d", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "b133b4f2ca834b1c850458eb8417d666", + "Name": "", + "Description": "Node to show output from", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "3572f081d4af432381bd6bff6f6882c5", + "Name": "", + "Description": "Node output", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Visualizes a node's output" + }, + { + "ConcreteType": "CoreNodeModels.Input.IntegerSlider, CoreNodeModels", + "NumberType": "Integer", + "MaximumValue": 10, + "MinimumValue": -10, + "StepValue": 1, + "Id": "b4da057a2d40437d82dfa22dd52bf099", + "NodeType": "NumberInputNode", + "Inputs": [], + "Outputs": [ + { + "Id": "8913fe982fc643f1a490fc9c1add7d6c", + "Name": "", + "Description": "Int64", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Produces integer values", + "InputValue": 2 + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "08b1a28fcfb1403597955bfb067f2c46", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "bf279ea4b6ed4dfa947c35700434a836", + "Name": "list", + "Description": "List to take items from.\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "6d88ef7d842c4c1488740f1d5d526683", + "Name": "n", + "Description": "Indices that are multiples of this number (after the offset) will be fetched.\n\nint", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "fc7f29be562d416690a3d7e306887470", + "Name": "offset", + "Description": "Amount of items to be ignored from the start of the list.\n\nint\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "2604d92f20104be2b02c4c22d3735e42", + "Name": "items", + "Description": "Items from the list.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.List.TakeEveryNthItem@var[]..[],int,int", + "Replication": "Auto", + "Description": "Fetches items from the given list at indices that are multiples of the given value, after the given offset.\n\nList.TakeEveryNthItem (list: var[]..[], n: int, offset: int = 0): var[]..[]" + } + ], + "Connectors": [ + { + "Start": "adbbf7c7d55d45f68bf17a2f19bc0834", + "End": "0bb09166bfc8420ab6d4f787bf9b2d6c", + "Id": "841da685d4914012adcbf045e085e84a", + "IsHidden": "False" + }, + { + "Start": "e7271d969bc94a83b285a7c65f0c44da", + "End": "bf279ea4b6ed4dfa947c35700434a836", + "Id": "76343a520105452b8a32a3efe9aaa88c", + "IsHidden": "False" + }, + { + "Start": "e561334b2e5f4322ba9e220007e2d76d", + "End": "602ef88b9b7a4d43aa0870201913ec7d", + "Id": "f1a7f6e41cc940e3ad517603c6a9aa79", + "IsHidden": "False" + }, + { + "Start": "3e42f0060d3b4c398ee7e9264074a89b", + "End": "0aa5fe34117a485a8f5430bd0aacc338", + "Id": "4b43217252ec4da283c6be1302de1976", + "IsHidden": "False" + }, + { + "Start": "c7ebcc01e0764cd79b2032832ed85c0d", + "End": "ff16f52ecdf7411b85b1f3e3b4753c92", + "Id": "5299002ac6a4472ab64b2ca9ad4ef731", + "IsHidden": "False" + }, + { + "Start": "8913fe982fc643f1a490fc9c1add7d6c", + "End": "6d88ef7d842c4c1488740f1d5d526683", + "Id": "1876523c16e64c3e827f08e9bb59b93f", + "IsHidden": "False" + }, + { + "Start": "2604d92f20104be2b02c4c22d3735e42", + "End": "b133b4f2ca834b1c850458eb8417d666", + "Id": "4db68b1e08ff46c69a681ba0b985a981", + "IsHidden": "False" + } + ], + "Dependencies": [], + "NodeLibraryDependencies": [], + "Thumbnail": "", + "GraphDocumentationURL": null, + "ExtensionWorkspaceData": [ + { + "ExtensionGuid": "28992e1d-abb9-417f-8b1b-05e053bee670", + "Name": "Properties", + "Version": "2.19", + "Data": {} + } + ], + "Author": "None provided", + "Linting": { + "activeLinter": "None", + "activeLinterId": "7b75fb44-43fd-4631-a878-29f4d5d8399a", + "warningCount": 0, + "errorCount": 0 + }, + "Bindings": [], + "View": { + "Dynamo": { + "ScaleFactor": 1.0, + "HasRunWithoutCrash": true, + "IsVisibleInDynamoLibrary": true, + "Version": "2.19.0.5742", + "RunType": "Automatic", + "RunPeriod": "1000" + }, + "Camera": { + "Name": "_Background Preview", + "EyeX": -13.988694190979004, + "EyeY": 18.264490127563477, + "EyeZ": 21.429862976074219, + "LookX": 16.723785400390625, + "LookY": -5.2774238586425781, + "LookZ": -19.588394165039063, + "UpX": -0.009065740741789341, + "UpY": 0.99990254640579224, + "UpZ": 0.010618607513606548 + }, + "ConnectorPins": [], + "NodeViews": [ + { + "Id": "9fc0b46649694e61b247078511609a1b", + "Name": "Range", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -105.42930136059499, + "Y": -50.6419806050325 + }, + { + "Id": "14929b527d744a21878dbc341fd4ec8a", + "Name": "Watch", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 172.570698639405, + "Y": -50.6419806050325 + }, + { + "Id": "c6590d9793774c4fbd16d71349a99990", + "Name": "Integer Slider", + "IsSetAsInput": true, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -553.429301360595, + "Y": -163.6419806050325 + }, + { + "Id": "6931a37a10864bf4a8497ca10be9ceb0", + "Name": "Integer Slider", + "IsSetAsInput": true, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -553.429301360595, + "Y": -16.6419806050325 + }, + { + "Id": "95c90e0829074d499eb60863a04c5f81", + "Name": "Integer Slider", + "IsSetAsInput": true, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -553.429301360595, + "Y": 130.3580193949675 + }, + { + "Id": "a63eae4559f24677a1a3284f788ca02d", + "Name": "Watch", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 961.570698639405, + "Y": 89.3580193949675 + }, + { + "Id": "b4da057a2d40437d82dfa22dd52bf099", + "Name": "Integer Slider", + "IsSetAsInput": true, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 172.570698639405, + "Y": 263.35801939496753 + }, + { + "Id": "08b1a28fcfb1403597955bfb067f2c46", + "Name": "List.TakeEveryNthItem", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 620.570698639405, + "Y": 87.96455127677163 + } + ], + "Annotations": [], + "X": 427.15964372194486, + "Y": 258.73860884937039, + "Zoom": 0.7176339285714286 + } +} \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/DSCore.List.TakeEveryNthItem.md b/doc/distrib/NodeHelpFiles/DSCore.List.TakeEveryNthItem.md new file mode 100644 index 00000000000..a62b3e0ce3d --- /dev/null +++ b/doc/distrib/NodeHelpFiles/DSCore.List.TakeEveryNthItem.md @@ -0,0 +1,8 @@ +## In Depth +`List.TakeEveryNthItem` produces a new list containing only the items from the input list that are at intervals of the input n value. The starting point of the interval can be changed with the `offset` input. For example, inputting 3 into n and leaving the offset as the default of 0 will keep items with indices 2, 5, 8, etc. With an offset of 1, items with indices 0, 3, 6, etc. are kept. Note that the offset “wraps” through the entire list. To remove selected items instead of keeping them, see `List.DropEveryNthItem`. + +In the example below, we first generate a list of numbers using `Range`, and then keep every other number by using 2 as the input for n. +___ +## Example File + +![List.TakeEveryNthItem](./DSCore.List.TakeEveryNthItem_img.jpg) \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/DSCore.List.TakeEveryNthItem_img.jpg b/doc/distrib/NodeHelpFiles/DSCore.List.TakeEveryNthItem_img.jpg new file mode 100644 index 00000000000..3e914d9d20e Binary files /dev/null and b/doc/distrib/NodeHelpFiles/DSCore.List.TakeEveryNthItem_img.jpg differ diff --git a/doc/distrib/NodeHelpFiles/DSCore.List.Transpose.dyn b/doc/distrib/NodeHelpFiles/DSCore.List.Transpose.dyn new file mode 100644 index 00000000000..cb2fb377be8 --- /dev/null +++ b/doc/distrib/NodeHelpFiles/DSCore.List.Transpose.dyn @@ -0,0 +1,225 @@ +{ + "Uuid": "9a4b8b9d-fc59-4ad0-9008-dc433c4db30d", + "IsCustomNode": false, + "Description": "", + "Name": "DSCore.List.Transpose", + "ElementResolver": { + "ResolutionMap": { + "Point": { + "Key": "Autodesk.DesignScript.Geometry.Point", + "Value": "ProtoGeometry.dll" + }, + "List": { + "Key": "List", + "Value": "BuiltIn.ds" + } + } + }, + "Inputs": [], + "Outputs": [], + "Nodes": [ + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "bab0148fd1814679b11e61128ffc9555", + "NodeType": "CodeBlockNode", + "Inputs": [], + "Outputs": [ + { + "Id": "0bb8bd66062d44eb8196f0a9eecec568", + "Name": "", + "Description": "numbers", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "c86177803a7044cfa0f9dc43fd0c6e3b", + "Name": "", + "Description": "letters", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "numbers = 0..5;\nletters = \"A\"..\"E\";" + }, + { + "ConcreteType": "CoreNodeModels.CreateList, CoreNodeModels", + "VariableInputPorts": true, + "Id": "145d73c421f845eea6d6ed2df31adde3", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "d98b8c70befa42b99adaf0251ffa293e", + "Name": "item0", + "Description": "Item Index #0", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "baa51850e00a4c27b6807960d5dfa50e", + "Name": "item1", + "Description": "Item Index #1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "8792f2f61b744c218d2c0bb02e5120ef", + "Name": "list", + "Description": "A list (type: var[]..[])", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Makes a new list from the given inputs" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "60a2d2accad5499a8e3498c3da66b0a5", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "0d2bdcc8f6804a3187a7f1be7b872261", + "Name": "lists", + "Description": "List of lists to be transposed\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "3336d31c4b054798beef5598bca4eca6", + "Name": "lists", + "Description": "List of transposed lists", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.List.Transpose@var[]..[]", + "Replication": "Auto", + "Description": "Swaps rows and columns in a list of lists. If there are some rows that are shorter than others, null values are inserted as place holders in the resultant array such that it is always rectangular.\n\nList.Transpose (lists: var[]..[]): var[]..[]" + } + ], + "Connectors": [ + { + "Start": "0bb8bd66062d44eb8196f0a9eecec568", + "End": "d98b8c70befa42b99adaf0251ffa293e", + "Id": "5127f66ebf6c4afc96bc9d71d021c4e8", + "IsHidden": "False" + }, + { + "Start": "c86177803a7044cfa0f9dc43fd0c6e3b", + "End": "baa51850e00a4c27b6807960d5dfa50e", + "Id": "92859cf3dab543119cf813574b4a84ef", + "IsHidden": "False" + }, + { + "Start": "8792f2f61b744c218d2c0bb02e5120ef", + "End": "0d2bdcc8f6804a3187a7f1be7b872261", + "Id": "0b2d3c618c1144feb80106a745d06c56", + "IsHidden": "False" + } + ], + "Dependencies": [], + "NodeLibraryDependencies": [], + "Thumbnail": "", + "GraphDocumentationURL": null, + "ExtensionWorkspaceData": [ + { + "ExtensionGuid": "28992e1d-abb9-417f-8b1b-05e053bee670", + "Name": "Properties", + "Version": "2.18", + "Data": {} + }, + { + "ExtensionGuid": "DFBD9CC0-DB40-457A-939E-8C8555555A9D", + "Name": "Generative Design", + "Version": "1.2", + "Data": {} + } + ], + "Author": "", + "Linting": { + "activeLinter": "None", + "activeLinterId": "7b75fb44-43fd-4631-a878-29f4d5d8399a", + "warningCount": 0, + "errorCount": 0 + }, + "Bindings": [], + "View": { + "Dynamo": { + "ScaleFactor": 1.0, + "HasRunWithoutCrash": true, + "IsVisibleInDynamoLibrary": true, + "Version": "2.19.0.5742", + "RunType": "Manual", + "RunPeriod": "1000" + }, + "Camera": { + "Name": "_Background Preview", + "EyeX": -17.0, + "EyeY": 24.0, + "EyeZ": 50.0, + "LookX": 12.0, + "LookY": -13.0, + "LookZ": -58.0, + "UpX": 0.0, + "UpY": 1.0, + "UpZ": 0.0 + }, + "ConnectorPins": [], + "NodeViews": [ + { + "Id": "bab0148fd1814679b11e61128ffc9555", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 498.98320627399471, + "Y": -171.195329492495 + }, + { + "Id": "145d73c421f845eea6d6ed2df31adde3", + "Name": "List Create", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 831.48320627399471, + "Y": -179.850329492495 + }, + { + "Id": "60a2d2accad5499a8e3498c3da66b0a5", + "Name": "List.Transpose", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1091.4832062739947, + "Y": -179.850329492495 + } + ], + "Annotations": [], + "X": -555.43366080785813, + "Y": 503.98365094900248, + "Zoom": 1.1643898080562645 + } +} \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/DSCore.List.Transpose.md b/doc/distrib/NodeHelpFiles/DSCore.List.Transpose.md new file mode 100644 index 00000000000..18d2c4d8bdb --- /dev/null +++ b/doc/distrib/NodeHelpFiles/DSCore.List.Transpose.md @@ -0,0 +1,8 @@ +## In Depth +`List.Transpose` swaps the rows and columns in a list of lists. For example, a list that contains 5 sublists of 10 items each would be transposed to 10 lists of 5 items each. Null values are inserted as needed to ensure that each sublist has the same number of items. + +In the example, we generate a list of numbers from 0 to 5 and another list of letters from A to E. We then use `List.Create` to combine them. `List.Transpose` generates 6 lists of 2 items each, one number and one letter per list. Notice that since one of the original lists was longer than the other, `List.Transpose` inserted a null value for the unpaired item. +___ +## Example File + +![List.Transpose](./DSCore.List.Transpose_img.jpg) \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/DSCore.List.Transpose_img.jpg b/doc/distrib/NodeHelpFiles/DSCore.List.Transpose_img.jpg new file mode 100644 index 00000000000..b509eaf286b Binary files /dev/null and b/doc/distrib/NodeHelpFiles/DSCore.List.Transpose_img.jpg differ diff --git a/doc/distrib/NodeHelpFiles/GeometryUI.DeserializeFromSABWithUnits.dyn b/doc/distrib/NodeHelpFiles/GeometryUI.DeserializeFromSABWithUnits.dyn new file mode 100644 index 00000000000..5215fd84fd8 --- /dev/null +++ b/doc/distrib/NodeHelpFiles/GeometryUI.DeserializeFromSABWithUnits.dyn @@ -0,0 +1,229 @@ +{ + "Uuid": "d12f17ed-461d-4cb4-bcda-b58ea984d57c", + "IsCustomNode": false, + "Description": "", + "Name": "Geometry.DeserializeFromSABWithUnits", + "ElementResolver": { + "ResolutionMap": {} + }, + "Inputs": [], + "Outputs": [], + "Nodes": [ + { + "ConcreteType": "GeometryUI.DeserializeFromSABWithUnits, GeometryUI", + "Id": "458871bc1bcd4f42905e2e626024a0f4", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "5fb8167dc79b48aea1069606d5dcd649", + "Name": "buffer", + "Description": "SAB byte array.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "8b34c3bc07db4594b3e5568047c29786", + "Name": "dynamoUnit", + "Description": "A forge unit length, if left null, geometry will be imported as unitless.", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "5fe553df34fe470dae7d42fc7dcc2301", + "Name": "geometry", + "Description": "Loaded geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Auto", + "Description": "Imports geometry from SAB byte array. Set the dynamoUnit input to match how you are interpreting the other numbers in your Dynamo file." + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "0110bd4155d34491bafad05364cd369f", + "NodeType": "CodeBlockNode", + "Inputs": [], + "Outputs": [ + { + "Id": "40b5c8c109df43d89de1c1da3ffd0496", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "[\n [\n 65,\n 67,\n 73,\n 83,\n 32,\n 66,\n 105,\n 110,\n 97,\n 114,\n 121,\n 70,\n 105,\n 108,\n 101,\n 188,\n 2,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 1,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 7,\n 4,\n 76,\n 105,\n 98,\n 71,\n 7,\n 20,\n 65,\n 83,\n 77,\n 32,\n 50,\n 50,\n 57,\n 46,\n 50,\n 46,\n 48,\n 46,\n 54,\n 53,\n 53,\n 51,\n 53,\n 32,\n 78,\n 84,\n 7,\n 24,\n 84,\n 117,\n 101,\n 32,\n 79,\n 99,\n 116,\n 32,\n 32,\n 51,\n 32,\n 49,\n 53,\n 58,\n 53,\n 49,\n 58,\n 48,\n 52,\n 32,\n 50,\n 48,\n 50,\n 51,\n 6,\n 0,\n 0,\n 0,\n 0,\n 0,\n 64,\n 143,\n 64,\n 6,\n 141,\n 237,\n 181,\n 160,\n 247,\n 198,\n 176,\n 62,\n 6,\n 187,\n 189,\n 215,\n 217,\n 223,\n 124,\n 219,\n 61,\n 13,\n 4,\n 98,\n 111,\n 100,\n 121,\n 12,\n 255,\n 255,\n 255,\n 255,\n 4,\n 255,\n 255,\n 255,\n 255,\n 12,\n 255,\n 255,\n 255,\n 255,\n 12,\n 1,\n 0,\n 0,\n 0,\n 12,\n 255,\n 255,\n 255,\n 255,\n 12,\n 2,\n 0,\n 0,\n 0,\n 17,\n 13,\n 4,\n 108,\n 117,\n 109,\n 112,\n 12,\n 255,\n 255,\n 255,\n 255,\n 4,\n 255,\n 255,\n 255,\n 255,\n 12,\n 255,\n 255,\n 255,\n 255,\n 12,\n 255,\n 255,\n 255,\n 255,\n 12,\n 3,\n 0,\n 0,\n 0,\n 12,\n 0,\n 0,\n 0,\n 0,\n 17,\n 13,\n 9,\n 116,\n 114,\n 97,\n 110,\n 115,\n 102,\n 111,\n 114,\n 109,\n 12,\n 255,\n 255,\n 255,\n 255,\n 4,\n 255,\n 255,\n 255,\n 255,\n 20,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 240,\n 63,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 20,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 240,\n 63,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 20,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 240,\n 63,\n 20,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 6,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 240,\n 63,\n 11,\n 11,\n 11,\n 17,\n 13,\n 5,\n 115,\n 104,\n 101,\n 108,\n 108,\n 12,\n 255,\n 255,\n 255,\n 255,\n 4,\n 255,\n 255,\n 255,\n 255,\n 12,\n 255,\n 255,\n 255,\n 255,\n 12,\n 255,\n 255,\n 255,\n 255,\n 12,\n 255,\n 255,\n 255,\n 255,\n 12,\n 4,\n 0,\n 0,\n 0,\n 12,\n 255,\n 255,\n 255,\n 255,\n 12,\n 1,\n 0,\n 0,\n 0,\n 17,\n 13,\n 4,\n 102,\n 97,\n 99,\n 101,\n 12,\n 255,\n 255,\n 255,\n 255,\n 4,\n 255,\n 255,\n 255,\n 255,\n 12,\n 255,\n 255,\n 255,\n 255,\n 12,\n 5,\n 0,\n 0,\n 0,\n 12,\n 6,\n 0,\n 0,\n 0,\n 12,\n 3,\n 0,\n 0,\n 0,\n 12,\n 255,\n 255,\n 255,\n 255,\n 12,\n 7,\n 0,\n 0,\n 0,\n 11,\n 11,\n 17,\n 13,\n 4,\n 102,\n 97,\n 99,\n 101,\n 12,\n 255,\n 255,\n 255,\n 255,\n 4,\n 255,\n 255,\n 255,\n 255,\n 12,\n 255,\n 255,\n 255,\n 255,\n 12,\n 8,\n 0,\n 0,\n 0,\n 12,\n 9,\n 0,\n 0,\n 0,\n 12,\n 3,\n 0,\n 0,\n 0,\n 12,\n 255,\n 255,\n 255,\n 255,\n 12,\n 10,\n 0,\n 0,\n 0,\n 10,\n 11,\n 17,\n 13,\n 4,\n 108,\n 111,\n 111,\n 112,\n 12,\n 255,\n 255,\n 255,\n 255,\n 4,\n 255,\n 255,\n 255,\n 255,\n 12,\n 255,\n 255,\n 255,\n 255,\n 12,\n 255,\n 255,\n 255,\n 255,\n 12,\n 11,\n 0,\n 0,\n 0,\n 12,\n 4,\n 0,\n 0,\n 0,\n 17,\n 14,\n 5,\n 112,\n 108,\n 97,\n 110,\n 101,\n 13,\n 7,\n 115,\n 117,\n 114,\n 102,\n 97,\n 99,\n 101,\n 12,\n 255,\n 255,\n 255,\n 255,\n 4,\n 255,\n 255,\n 255,\n 255,\n 12,\n 255,\n 255,\n 255,\n 255,\n 19,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 240,\n 63,\n 20,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 240,\n 63,\n 20,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 240,\n 63,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 11,\n 11,\n 11,\n 11,\n 11,\n 17,\n 13,\n 4,\n 102,\n 97,\n 99,\n 101,\n 12,\n 255,\n 255,\n 255,\n 255,\n 4,\n 255,\n 255,\n 255,\n 255,\n 12,\n 255,\n 255,\n 255,\n 255,\n 12,\n 12,\n 0,\n 0,\n 0,\n 12,\n 13,\n 0,\n 0,\n 0,\n 12,\n 3,\n 0,\n 0,\n 0,\n 12,\n 255,\n 255,\n 255,\n 255,\n 12,\n 14,\n 0,\n 0,\n 0,\n 10,\n 11,\n 17,\n 13,\n 4,\n 108,\n 111,\n 111,\n 112,\n 12,\n 255,\n 255,\n 255,\n 255,\n 4,\n 255,\n 255,\n 255,\n 255,\n 12,\n 255,\n 255,\n 255,\n 255,\n 12,\n 255,\n 255,\n 255,\n 255,\n 12,\n 15,\n 0,\n 0,\n 0,\n 12,\n 5,\n 0,\n 0,\n 0,\n 17,\n 14,\n 5,\n 112,\n 108,\n 97,\n 110,\n 101,\n 13,\n 7,\n 115,\n 117,\n 114,\n 102,\n 97,\n 99,\n 101,\n 12,\n 255,\n 255,\n 255,\n 255,\n 4,\n 255,\n 255,\n 255,\n 255,\n 12,\n 255,\n 255,\n 255,\n 255,\n 19,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 240,\n 191,\n 20,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 240,\n 63,\n 20,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 240,\n 63,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 11,\n 11,\n 11,\n 11,\n 11,\n 17,\n 13,\n 6,\n 99,\n 111,\n 101,\n 100,\n 103,\n 101,\n 12,\n 255,\n 255,\n 255,\n 255,\n 4,\n 255,\n 255,\n 255,\n 255,\n 12,\n 255,\n 255,\n 255,\n 255,\n 12,\n 16,\n 0,\n 0,\n 0,\n 12,\n 17,\n 0,\n 0,\n 0,\n 12,\n 18,\n 0,\n 0,\n 0,\n 12,\n 19,\n 0,\n 0,\n 0,\n 11,\n 12,\n 6,\n 0,\n 0,\n 0,\n 12,\n 255,\n 255,\n 255,\n 255,\n 17,\n 13,\n 4,\n 102,\n 97,\n 99,\n 101,\n 12,\n 255,\n 255,\n 255,\n 255,\n 4,\n 255,\n 255,\n 255,\n 255,\n 12,\n 255,\n 255,\n 255,\n 255,\n 12,\n 20,\n 0,\n 0,\n 0,\n 12,\n 21,\n 0,\n 0,\n 0,\n 12,\n 3,\n 0,\n 0,\n 0,\n 12,\n 255,\n 255,\n 255,\n 255,\n 12,\n 22,\n 0,\n 0,\n 0,\n 10,\n 11,\n 17,\n 13,\n 4,\n 108,\n 111,\n 111,\n 112,\n 12,\n 255,\n 255,\n 255,\n 255,\n 4,\n 255,\n 255,\n 255,\n 255,\n 12,\n 255,\n 255,\n 255,\n 255,\n 12,\n 255,\n 255,\n 255,\n 255,\n 12,\n 23,\n 0,\n 0,\n 0,\n 12,\n 8,\n 0,\n 0,\n 0,\n 17,\n 14,\n 5,\n 112,\n 108,\n 97,\n 110,\n 101,\n 13,\n 7,\n 115,\n 117,\n 114,\n 102,\n 97,\n 99,\n 101,\n 12,\n 255,\n 255,\n 255,\n 255,\n 4,\n 255,\n 255,\n 255,\n 255,\n 12,\n 255,\n 255,\n 255,\n 255,\n 19,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 240,\n 191,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 20,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 240,\n 63,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 128,\n 20,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 128,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 240,\n 63,\n 11,\n 11,\n 11,\n 11,\n 11,\n 17,\n 13,\n 6,\n 99,\n 111,\n 101,\n 100,\n 103,\n 101,\n 12,\n 255,\n 255,\n 255,\n 255,\n 4,\n 255,\n 255,\n 255,\n 255,\n 12,\n 255,\n 255,\n 255,\n 255,\n 12,\n 24,\n 0,\n 0,\n 0,\n 12,\n 25,\n 0,\n 0,\n 0,\n 12,\n 26,\n 0,\n 0,\n 0,\n 12,\n 27,\n 0,\n 0,\n 0,\n 11,\n 12,\n 9,\n 0,\n 0,\n 0,\n 12,\n 255,\n 255,\n 255,\n 255,\n 17,\n 13,\n 6,\n 99,\n 111,\n 101,\n 100,\n 103,\n 101,\n 12,\n 255,\n 255,\n 255,\n 255,\n 4,\n 255,\n 255,\n 255,\n 255,\n 12,\n 255,\n 255,\n 255,\n 255,\n 12,\n 28,\n 0,\n 0,\n 0,\n 12,\n 11,\n 0,\n 0,\n 0,\n 12,\n 29,\n 0,\n 0,\n 0,\n 12,\n 30,\n 0,\n 0,\n 0,\n 11,\n 12,\n 6,\n 0,\n 0,\n 0,\n 12,\n 255,\n 255,\n 255,\n 255,\n 17,\n 13,\n 6,\n 99,\n 111,\n 101,\n 100,\n 103,\n 101,\n 12,\n 255,\n 255,\n 255,\n 255,\n 4,\n 255,\n 255,\n 255,\n 255,\n 12,\n 255,\n 255,\n 255,\n 255,\n 12,\n 11,\n 0,\n 0,\n 0,\n 12,\n 28,\n 0,\n 0,\n 0,\n 12,\n 31,\n 0,\n 0,\n 0,\n 12,\n 32,\n 0,\n 0,\n 0,\n 11,\n 12,\n 6,\n 0,\n 0,\n 0,\n 12,\n 255,\n 255,\n 255,\n 255,\n 17,\n 13,\n 6,\n 99,\n 111,\n 101,\n 100,\n 103,\n 101,\n 12,\n 255,\n 255,\n 255,\n 255,\n 4,\n 255,\n 255,\n 255,\n 255,\n 12,\n 255,\n 255,\n 255,\n 255,\n 12,\n 33,\n 0,\n 0,\n 0,\n 12,\n 34,\n 0,\n 0,\n 0,\n 12,\n 11,\n 0,\n 0,\n 0,\n 12,\n 19,\n 0,\n 0,\n 0,\n 10,\n 12,\n 35,\n 0,\n 0,\n 0,\n 12,\n 255,\n 255,\n 255,\n 255,\n 17,\n 13,\n 4,\n 101,\n 100,\n 103,\n 101,\n 12,\n 255,\n 255,\n 255,\n 255,\n 4,\n 255,\n 255,\n 255,\n 255,\n 12,\n 255,\n 255,\n 255,\n 255,\n 12,\n 36,\n 0,\n 0,\n 0,\n 6,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 240,\n 191,\n 12,\n 37,\n 0,\n 0,\n 0,\n 6,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 240,\n 63,\n 12,\n 18,\n 0,\n 0,\n 0,\n 12,\n 38,\n 0,\n 0,\n 0,\n 11,\n 7,\n 7,\n 117,\n 110,\n 107,\n 110,\n 111,\n 119,\n 110,\n 17,\n 13,\n 4,\n 102,\n 97,\n 99,\n 101,\n 12,\n 255,\n 255,\n 255,\n 255,\n 4,\n 255,\n 255,\n 255,\n 255,\n 12,\n 255,\n 255,\n 255,\n 255,\n 12,\n 39,\n 0,\n 0,\n 0,\n 12,\n 40,\n 0,\n 0,\n 0,\n 12,\n 3,\n 0,\n 0,\n 0,\n 12,\n 255,\n 255,\n 255,\n 255,\n 12,\n 41,\n 0,\n 0,\n 0,\n 10,\n 11,\n 17,\n 13,\n 4,\n 108,\n 111,\n 111,\n 112,\n 12,\n 255,\n 255,\n 255,\n 255,\n 4,\n 255,\n 255,\n 255,\n 255,\n 12,\n 255,\n 255,\n 255,\n 255,\n 12,\n 255,\n 255,\n 255,\n 255,\n 12,\n 42,\n 0,\n 0,\n 0,\n 12,\n 12,\n 0,\n 0,\n 0,\n 17,\n 14,\n 5,\n 112,\n 108,\n 97,\n 110,\n 101,\n 13,\n 7,\n 115,\n 117,\n 114,\n 102,\n 97,\n 99,\n 101,\n 12,\n 255,\n 255,\n 255,\n 255,\n 4,\n 255,\n 255,\n 255,\n 255,\n 12,\n 255,\n 255,\n 255,\n 255,\n 19,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 240,\n 191,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 20,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 240,\n 63,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 20,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 240,\n 191,\n 11,\n 11,\n 11,\n 11,\n 11,\n 17,\n 13,\n 6,\n 99,\n 111,\n 101,\n 100,\n 103,\n 101,\n 12,\n 255,\n 255,\n 255,\n 255,\n 4,\n 255,\n 255,\n 255,\n 255,\n 12,\n 255,\n 255,\n 255,\n 255,\n 12,\n 43,\n 0,\n 0,\n 0,\n 12,\n 31,\n 0,\n 0,\n 0,\n 12,\n 44,\n 0,\n 0,\n 0,\n 12,\n 45,\n 0,\n 0,\n 0,\n 11,\n 12,\n 13,\n 0,\n 0,\n 0,\n 12,\n 255,\n 255,\n 255,\n 255,\n 17,\n 13,\n 6,\n 99,\n 111,\n 101,\n 100,\n 103,\n 101,\n 12,\n 255,\n 255,\n 255,\n 255,\n 4,\n 255,\n 255,\n 255,\n 255,\n 12,\n 255,\n 255,\n 255,\n 255,\n 12,\n 46,\n 0,\n 0,\n 0,\n 12,\n 15,\n 0,\n 0,\n 0,\n 12,\n 43,\n 0,\n 0,\n 0,\n 12,\n 47,\n 0,\n 0,\n 0,\n 11,\n 12,\n 9,\n 0,\n 0,\n 0,\n 12,\n 255,\n 255,\n 255,\n 255,\n 17,\n 13,\n 6,\n 99,\n 111,\n 101,\n 100,\n 103,\n 101,\n 12,\n 255,\n 255,\n 255,\n 255,\n 4,\n 255,\n 255,\n 255,\n 255,\n 12,\n 255,\n 255,\n 255,\n 255,\n 12,\n 15,\n 0,\n 0,\n 0,\n 12,\n 46,\n 0,\n 0,\n 0,\n 12,\n 48,\n 0,\n 0,\n 0,\n 12,\n 49,\n 0,\n 0,\n 0,\n 11,\n 12,\n 9,\n 0,\n 0,\n 0,\n 12,\n 255,\n 255,\n 255,\n 255,\n 17,\n 13,\n 6,\n 99,\n 111,\n 101,\n 100,\n 103,\n 101,\n 12,\n 255,\n 255,\n 255,\n 255,\n 4,\n 255,\n 255,\n 255,\n 255,\n 12,\n 255,\n 255,\n 255,\n 255,\n 12,\n 34,\n 0,\n 0,\n 0,\n 12,\n 33,\n 0,\n 0,\n 0,\n 12,\n 15,\n 0,\n 0,\n 0,\n 12,\n 27,\n 0,\n 0,\n 0,\n 10,\n 12,\n 35,\n 0,\n 0,\n 0,\n 12,\n 255,\n 255,\n 255,\n 255,\n 17,\n 13,\n 4,\n 101,\n 100,\n 103,\n 101,\n 12,\n 255,\n 255,\n 255,\n 255,\n 4,\n 255,\n 255,\n 255,\n 255,\n 12,\n 255,\n 255,\n 255,\n 255,\n 12,\n 50,\n 0,\n 0,\n 0,\n 6,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 240,\n 191,\n 12,\n 51,\n 0,\n 0,\n 0,\n 6,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 240,\n 63,\n 12,\n 26,\n 0,\n 0,\n 0,\n 12,\n 52,\n 0,\n 0,\n 0,\n 11,\n 7,\n 7,\n 117,\n 110,\n 107,\n 110,\n 111,\n 119,\n 110,\n 17,\n 13,\n 6,\n 99,\n 111,\n 101,\n 100,\n 103,\n 101,\n 12,\n 255,\n 255,\n 255,\n 255,\n 4,\n 255,\n 255,\n 255,\n 255,\n 12,\n 255,\n 255,\n 255,\n 255,\n 12,\n 17,\n 0,\n 0,\n 0,\n 12,\n 16,\n 0,\n 0,\n 0,\n 12,\n 53,\n 0,\n 0,\n 0,\n 12,\n 54,\n 0,\n 0,\n 0,\n 11,\n 12,\n 6,\n 0,\n 0,\n 0,\n 12,\n 255,\n 255,\n 255,\n 255,\n 17,\n 13,\n 6,\n 99,\n 111,\n 101,\n 100,\n 103,\n 101,\n 12,\n 255,\n 255,\n 255,\n 255,\n 4,\n 255,\n 255,\n 255,\n 255,\n 12,\n 255,\n 255,\n 255,\n 255,\n 12,\n 55,\n 0,\n 0,\n 0,\n 12,\n 56,\n 0,\n 0,\n 0,\n 12,\n 16,\n 0,\n 0,\n 0,\n 12,\n 30,\n 0,\n 0,\n 0,\n 10,\n 12,\n 40,\n 0,\n 0,\n 0,\n 12,\n 255,\n 255,\n 255,\n 255,\n 17,\n 13,\n 4,\n 101,\n 100,\n 103,\n 101,\n 12,\n 255,\n 255,\n 255,\n 255,\n 4,\n 255,\n 255,\n 255,\n 255,\n 12,\n 255,\n 255,\n 255,\n 255,\n 12,\n 37,\n 0,\n 0,\n 0,\n 6,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 240,\n 191,\n 12,\n 57,\n 0,\n 0,\n 0,\n 6,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 240,\n 63,\n 12,\n 29,\n 0,\n 0,\n 0,\n 12,\n 58,\n 0,\n 0,\n 0,\n 11,\n 7,\n 7,\n 117,\n 110,\n 107,\n 110,\n 111,\n 119,\n 110,\n 17,\n 13,\n 6,\n 99,\n 111,\n 101,\n 100,\n 103,\n 101,\n 12,\n 255,\n 255,\n 255,\n 255,\n 4,\n 255,\n 255,\n 255,\n 255,\n 12,\n 255,\n 255,\n 255,\n 255,\n 12,\n 23,\n 0,\n 0,\n 0,\n 12,\n 59,\n 0,\n 0,\n 0,\n 12,\n 17,\n 0,\n 0,\n 0,\n 12,\n 32,\n 0,\n 0,\n 0,\n 10,\n 12,\n 13,\n 0,\n 0,\n 0,\n 12,\n 255,\n 255,\n 255,\n 255,\n 17,\n 13,\n 4,\n 101,\n 100,\n 103,\n 101,\n 12,\n 255,\n 255,\n 255,\n 255,\n 4,\n 255,\n 255,\n 255,\n 255,\n 12,\n 255,\n 255,\n 255,\n 255,\n 12,\n 60,\n 0,\n 0,\n 0,\n 6,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 240,\n 191,\n 12,\n 36,\n 0,\n 0,\n 0,\n 6,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 240,\n 63,\n 12,\n 31,\n 0,\n 0,\n 0,\n 12,\n 61,\n 0,\n 0,\n 0,\n 11,\n 7,\n 7,\n 117,\n 110,\n 107,\n 110,\n 111,\n 119,\n 110,\n 17,\n 13,\n 6,\n 99,\n 111,\n 101,\n 100,\n 103,\n 101,\n 12,\n 255,\n 255,\n 255,\n 255,\n 4,\n 255,\n 255,\n 255,\n 255,\n 12,\n 255,\n 255,\n 255,\n 255,\n 12,\n 26,\n 0,\n 0,\n 0,\n 12,\n 18,\n 0,\n 0,\n 0,\n 12,\n 59,\n 0,\n 0,\n 0,\n 12,\n 62,\n 0,\n 0,\n 0,\n 11,\n 12,\n 35,\n 0,\n 0,\n 0,\n 12,\n 255,\n 255,\n 255,\n 255,\n 17,\n 13,\n 6,\n 99,\n 111,\n 101,\n 100,\n 103,\n 101,\n 12,\n 255,\n 255,\n 255,\n 255,\n 4,\n 255,\n 255,\n 255,\n 255,\n 12,\n 255,\n 255,\n 255,\n 255,\n 12,\n 18,\n 0,\n 0,\n 0,\n 12,\n 26,\n 0,\n 0,\n 0,\n 12,\n 55,\n 0,\n 0,\n 0,\n 12,\n 63,\n 0,\n 0,\n 0,\n 10,\n 12,\n 35,\n 0,\n 0,\n 0,\n 12,\n 255,\n 255,\n 255,\n 255,\n 17,\n 13,\n 4,\n 108,\n 111,\n 111,\n 112,\n 12,\n 255,\n 255,\n 255,\n 255,\n 4,\n 255,\n 255,\n 255,\n 255,\n 12,\n 255,\n 255,\n 255,\n 255,\n 12,\n 255,\n 255,\n 255,\n 255,\n 12,\n 33,\n 0,\n 0,\n 0,\n 12,\n 39,\n 0,\n 0,\n 0,\n 17,\n 13,\n 6,\n 118,\n 101,\n 114,\n 116,\n 101,\n 120,\n 12,\n 255,\n 255,\n 255,\n 255,\n 4,\n 255,\n 255,\n 255,\n 255,\n 12,\n 255,\n 255,\n 255,\n 255,\n 12,\n 19,\n 0,\n 0,\n 0,\n 12,\n 64,\n 0,\n 0,\n 0,\n 17,\n 13,\n 6,\n 118,\n 101,\n 114,\n 116,\n 101,\n 120,\n 12,\n 255,\n 255,\n 255,\n 255,\n 4,\n 255,\n 255,\n 255,\n 255,\n 12,\n 255,\n 255,\n 255,\n 255,\n 12,\n 19,\n 0,\n 0,\n 0,\n 12,\n 65,\n 0,\n 0,\n 0,\n 17,\n 14,\n 8,\n 115,\n 116,\n 114,\n 97,\n 105,\n 103,\n 104,\n 116,\n 13,\n 5,\n 99,\n 117,\n 114,\n 118,\n 101,\n 12,\n 255,\n 255,\n 255,\n 255,\n 4,\n 255,\n 255,\n 255,\n 255,\n 12,\n 255,\n 255,\n 255,\n 255,\n 19,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 240,\n 63,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 240,\n 63,\n 20,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 240,\n 63,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 11,\n 11,\n 17,\n 13,\n 4,\n 102,\n 97,\n 99,\n 101,\n 12,\n 255,\n 255,\n 255,\n 255,\n 4,\n 255,\n 255,\n 255,\n 255,\n 12,\n 255,\n 255,\n 255,\n 255,\n 12,\n 255,\n 255,\n 255,\n 255,\n 12,\n 35,\n 0,\n 0,\n 0,\n 12,\n 3,\n 0,\n 0,\n 0,\n 12,\n 255,\n 255,\n 255,\n 255,\n 12,\n 66,\n 0,\n 0,\n 0,\n 10,\n 11,\n 17,\n 13,\n 4,\n 108,\n 111,\n 111,\n 112,\n 12,\n 255,\n 255,\n 255,\n 255,\n 4,\n 255,\n 255,\n 255,\n 255,\n 12,\n 255,\n 255,\n 255,\n 255,\n 12,\n 255,\n 255,\n 255,\n 255,\n 12,\n 55,\n 0,\n 0,\n 0,\n 12,\n 20,\n 0,\n 0,\n 0,\n 17,\n 14,\n 5,\n 112,\n 108,\n 97,\n 110,\n 101,\n 13,\n 7,\n 115,\n 117,\n 114,\n 102,\n 97,\n 99,\n 101,\n 12,\n 255,\n 255,\n 255,\n 255,\n 4,\n 255,\n 255,\n 255,\n 255,\n 12,\n 255,\n 255,\n 255,\n 255,\n 19,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 240,\n 63,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 20,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 240,\n 191,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 20,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 240,\n 191,\n 11,\n 11,\n 11,\n 11,\n 11,\n 17,\n 13,\n 6,\n 99,\n 111,\n 101,\n 100,\n 103,\n 101,\n 12,\n 255,\n 255,\n 255,\n 255,\n 4,\n 255,\n 255,\n 255,\n 255,\n 12,\n 255,\n 255,\n 255,\n 255,\n 12,\n 67,\n 0,\n 0,\n 0,\n 12,\n 53,\n 0,\n 0,\n 0,\n 12,\n 56,\n 0,\n 0,\n 0,\n 12,\n 68,\n 0,\n 0,\n 0,\n 11,\n 12,\n 21,\n 0,\n 0,\n 0,\n 12,\n 255,\n 255,\n 255,\n 255,\n 17,\n 13,\n 6,\n 99,\n 111,\n 101,\n 100,\n 103,\n 101,\n 12,\n 255,\n 255,\n 255,\n 255,\n 4,\n 255,\n 255,\n 255,\n 255,\n 12,\n 255,\n 255,\n 255,\n 255,\n 12,\n 59,\n 0,\n 0,\n 0,\n 12,\n 23,\n 0,\n 0,\n 0,\n 12,\n 24,\n 0,\n 0,\n 0,\n 12,\n 47,\n 0,\n 0,\n 0,\n 10,\n 12,\n 13,\n 0,\n 0,\n 0,\n 12,\n 255,\n 255,\n 255,\n 255,\n 17,\n 13,\n 6,\n 99,\n 111,\n 101,\n 100,\n 103,\n 101,\n 12,\n 255,\n 255,\n 255,\n 255,\n 4,\n 255,\n 255,\n 255,\n 255,\n 12,\n 255,\n 255,\n 255,\n 255,\n 12,\n 53,\n 0,\n 0,\n 0,\n 12,\n 67,\n 0,\n 0,\n 0,\n 12,\n 23,\n 0,\n 0,\n 0,\n 12,\n 45,\n 0,\n 0,\n 0,\n 10,\n 12,\n 21,\n 0,\n 0,\n 0,\n 12,\n 255,\n 255,\n 255,\n 255,\n 17,\n 13,\n 4,\n 101,\n 100,\n 103,\n 101,\n 12,\n 255,\n 255,\n 255,\n 255,\n 4,\n 255,\n 255,\n 255,\n 255,\n 12,\n 255,\n 255,\n 255,\n 255,\n 12,\n 60,\n 0,\n 0,\n 0,\n 6,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 240,\n 191,\n 12,\n 69,\n 0,\n 0,\n 0,\n 6,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 240,\n 63,\n 12,\n 44,\n 0,\n 0,\n 0,\n 12,\n 70,\n 0,\n 0,\n 0,\n 11,\n 7,\n 7,\n 117,\n 110,\n 107,\n 110,\n 111,\n 119,\n 110,\n 17,\n 13,\n 6,\n 99,\n 111,\n 101,\n 100,\n 103,\n 101,\n 12,\n 255,\n 255,\n 255,\n 255,\n 4,\n 255,\n 255,\n 255,\n 255,\n 12,\n 255,\n 255,\n 255,\n 255,\n 12,\n 25,\n 0,\n 0,\n 0,\n 12,\n 24,\n 0,\n 0,\n 0,\n 12,\n 67,\n 0,\n 0,\n 0,\n 12,\n 71,\n 0,\n 0,\n 0,\n 11,\n 12,\n 9,\n 0,\n 0,\n 0,\n 12,\n 255,\n 255,\n 255,\n 255,\n 17,\n 13,\n 4,\n 101,\n 100,\n 103,\n 101,\n 12,\n 255,\n 255,\n 255,\n 255,\n 4,\n 255,\n 255,\n 255,\n 255,\n 12,\n 255,\n 255,\n 255,\n 255,\n 12,\n 51,\n 0,\n 0,\n 0,\n 6,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 240,\n 191,\n 12,\n 69,\n 0,\n 0,\n 0,\n 6,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 240,\n 63,\n 12,\n 43,\n 0,\n 0,\n 0,\n 12,\n 72,\n 0,\n 0,\n 0,\n 11,\n 7,\n 7,\n 117,\n 110,\n 107,\n 110,\n 111,\n 119,\n 110,\n 17,\n 13,\n 6,\n 99,\n 111,\n 101,\n 100,\n 103,\n 101,\n 12,\n 255,\n 255,\n 255,\n 255,\n 4,\n 255,\n 255,\n 255,\n 255,\n 12,\n 255,\n 255,\n 255,\n 255,\n 12,\n 56,\n 0,\n 0,\n 0,\n 12,\n 55,\n 0,\n 0,\n 0,\n 12,\n 25,\n 0,\n 0,\n 0,\n 12,\n 49,\n 0,\n 0,\n 0,\n 10,\n 12,\n 40,\n 0,\n 0,\n 0,\n 12,\n 255,\n 255,\n 255,\n 255,\n 17,\n 13,\n 4,\n 101,\n 100,\n 103,\n 101,\n 12,\n 255,\n 255,\n 255,\n 255,\n 4,\n 255,\n 255,\n 255,\n 255,\n 12,\n 255,\n 255,\n 255,\n 255,\n 12,\n 73,\n 0,\n 0,\n 0,\n 6,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 240,\n 191,\n 12,\n 50,\n 0,\n 0,\n 0,\n 6,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 240,\n 63,\n 12,\n 48,\n 0,\n 0,\n 0,\n 12,\n 74,\n 0,\n 0,\n 0,\n 11,\n 7,\n 7,\n 117,\n 110,\n 107,\n 110,\n 111,\n 119,\n 110,\n 17,\n 13,\n 6,\n 118,\n 101,\n 114,\n 116,\n 101,\n 120,\n 12,\n 255,\n 255,\n 255,\n 255,\n 4,\n 255,\n 255,\n 255,\n 255,\n 12,\n 255,\n 255,\n 255,\n 255,\n 12,\n 27,\n 0,\n 0,\n 0,\n 12,\n 75,\n 0,\n 0,\n 0,\n 17,\n 13,\n 6,\n 118,\n 101,\n 114,\n 116,\n 101,\n 120,\n 12,\n 76,\n 0,\n 0,\n 0,\n 4,\n 255,\n 255,\n 255,\n 255,\n 12,\n 255,\n 255,\n 255,\n 255,\n 12,\n 62,\n 0,\n 0,\n 0,\n 12,\n 77,\n 0,\n 0,\n 0,\n 17,\n 14,\n 8,\n 115,\n 116,\n 114,\n 97,\n 105,\n 103,\n 104,\n 116,\n 13,\n 5,\n 99,\n 117,\n 114,\n 118,\n 101,\n 12,\n 255,\n 255,\n 255,\n 255,\n 4,\n 255,\n 255,\n 255,\n 255,\n 12,\n 255,\n 255,\n 255,\n 255,\n 19,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 240,\n 63,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 240,\n 191,\n 20,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 240,\n 191,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 11,\n 11,\n 17,\n 13,\n 6,\n 99,\n 111,\n 101,\n 100,\n 103,\n 101,\n 12,\n 255,\n 255,\n 255,\n 255,\n 4,\n 255,\n 255,\n 255,\n 255,\n 12,\n 255,\n 255,\n 255,\n 255,\n 12,\n 42,\n 0,\n 0,\n 0,\n 12,\n 44,\n 0,\n 0,\n 0,\n 12,\n 28,\n 0,\n 0,\n 0,\n 12,\n 54,\n 0,\n 0,\n 0,\n 10,\n 12,\n 21,\n 0,\n 0,\n 0,\n 12,\n 255,\n 255,\n 255,\n 255,\n 17,\n 13,\n 4,\n 101,\n 100,\n 103,\n 101,\n 12,\n 255,\n 255,\n 255,\n 255,\n 4,\n 255,\n 255,\n 255,\n 255,\n 12,\n 255,\n 255,\n 255,\n 255,\n 12,\n 57,\n 0,\n 0,\n 0,\n 6,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 240,\n 191,\n 12,\n 60,\n 0,\n 0,\n 0,\n 6,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 240,\n 63,\n 12,\n 53,\n 0,\n 0,\n 0,\n 12,\n 78,\n 0,\n 0,\n 0,\n 11,\n 7,\n 7,\n 117,\n 110,\n 107,\n 110,\n 111,\n 119,\n 110,\n 17,\n 13,\n 6,\n 99,\n 111,\n 101,\n 100,\n 103,\n 101,\n 12,\n 255,\n 255,\n 255,\n 255,\n 4,\n 255,\n 255,\n 255,\n 255,\n 12,\n 255,\n 255,\n 255,\n 255,\n 12,\n 48,\n 0,\n 0,\n 0,\n 12,\n 29,\n 0,\n 0,\n 0,\n 12,\n 34,\n 0,\n 0,\n 0,\n 12,\n 63,\n 0,\n 0,\n 0,\n 11,\n 12,\n 40,\n 0,\n 0,\n 0,\n 12,\n 255,\n 255,\n 255,\n 255,\n 17,\n 13,\n 6,\n 99,\n 111,\n 101,\n 100,\n 103,\n 101,\n 12,\n 255,\n 255,\n 255,\n 255,\n 4,\n 255,\n 255,\n 255,\n 255,\n 12,\n 255,\n 255,\n 255,\n 255,\n 12,\n 29,\n 0,\n 0,\n 0,\n 12,\n 48,\n 0,\n 0,\n 0,\n 12,\n 42,\n 0,\n 0,\n 0,\n 12,\n 68,\n 0,\n 0,\n 0,\n 10,\n 12,\n 40,\n 0,\n 0,\n 0,\n 12,\n 255,\n 255,\n 255,\n 255,\n 17,\n 13,\n 6,\n 118,\n 101,\n 114,\n 116,\n 101,\n 120,\n 12,\n 255,\n 255,\n 255,\n 255,\n 4,\n 255,\n 255,\n 255,\n 255,\n 12,\n 255,\n 255,\n 255,\n 255,\n 12,\n 30,\n 0,\n 0,\n 0,\n 12,\n 79,\n 0,\n 0,\n 0,\n 17,\n 14,\n 8,\n 115,\n 116,\n 114,\n 97,\n 105,\n 103,\n 104,\n 116,\n 13,\n 5,\n 99,\n 117,\n 114,\n 118,\n 101,\n 12,\n 255,\n 255,\n 255,\n 255,\n 4,\n 255,\n 255,\n 255,\n 255,\n 12,\n 255,\n 255,\n 255,\n 255,\n 19,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 240,\n 63,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 240,\n 63,\n 20,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 240,\n 191,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 11,\n 11,\n 17,\n 13,\n 6,\n 99,\n 111,\n 101,\n 100,\n 103,\n 101,\n 12,\n 255,\n 255,\n 255,\n 255,\n 4,\n 255,\n 255,\n 255,\n 255,\n 12,\n 255,\n 255,\n 255,\n 255,\n 12,\n 31,\n 0,\n 0,\n 0,\n 12,\n 43,\n 0,\n 0,\n 0,\n 12,\n 33,\n 0,\n 0,\n 0,\n 12,\n 62,\n 0,\n 0,\n 0,\n 10,\n 12,\n 13,\n 0,\n 0,\n 0,\n 12,\n 255,\n 255,\n 255,\n 255,\n 17,\n 13,\n 6,\n 118,\n 101,\n 114,\n 116,\n 101,\n 120,\n 12,\n 80,\n 0,\n 0,\n 0,\n 4,\n 255,\n 255,\n 255,\n 255,\n 12,\n 255,\n 255,\n 255,\n 255,\n 12,\n 54,\n 0,\n 0,\n 0,\n 12,\n 81,\n 0,\n 0,\n 0,\n 17,\n 14,\n 8,\n 115,\n 116,\n 114,\n 97,\n 105,\n 103,\n 104,\n 116,\n 13,\n 5,\n 99,\n 117,\n 114,\n 118,\n 101,\n 12,\n 255,\n 255,\n 255,\n 255,\n 4,\n 255,\n 255,\n 255,\n 255,\n 12,\n 255,\n 255,\n 255,\n 255,\n 19,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 240,\n 191,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 240,\n 63,\n 20,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 240,\n 63,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 11,\n 11,\n 17,\n 13,\n 4,\n 101,\n 100,\n 103,\n 101,\n 12,\n 255,\n 255,\n 255,\n 255,\n 4,\n 255,\n 255,\n 255,\n 255,\n 12,\n 255,\n 255,\n 255,\n 255,\n 12,\n 36,\n 0,\n 0,\n 0,\n 6,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 240,\n 191,\n 12,\n 51,\n 0,\n 0,\n 0,\n 6,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 240,\n 63,\n 12,\n 33,\n 0,\n 0,\n 0,\n 12,\n 82,\n 0,\n 0,\n 0,\n 11,\n 7,\n 7,\n 117,\n 110,\n 107,\n 110,\n 111,\n 119,\n 110,\n 17,\n 13,\n 4,\n 101,\n 100,\n 103,\n 101,\n 12,\n 255,\n 255,\n 255,\n 255,\n 4,\n 255,\n 255,\n 255,\n 255,\n 12,\n 255,\n 255,\n 255,\n 255,\n 12,\n 37,\n 0,\n 0,\n 0,\n 6,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 240,\n 191,\n 12,\n 50,\n 0,\n 0,\n 0,\n 6,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 240,\n 63,\n 12,\n 34,\n 0,\n 0,\n 0,\n 12,\n 83,\n 0,\n 0,\n 0,\n 11,\n 7,\n 7,\n 117,\n 110,\n 107,\n 110,\n 111,\n 119,\n 110,\n 17,\n 13,\n 5,\n 112,\n 111,\n 105,\n 110,\n 116,\n 12,\n 255,\n 255,\n 255,\n 255,\n 4,\n 255,\n 255,\n 255,\n 255,\n 12,\n 255,\n 255,\n 255,\n 255,\n 19,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 240,\n 63,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 240,\n 191,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 240,\n 63,\n 17,\n 13,\n 5,\n 112,\n 111,\n 105,\n 110,\n 116,\n 12,\n 255,\n 255,\n 255,\n 255,\n 4,\n 255,\n 255,\n 255,\n 255,\n 12,\n 255,\n 255,\n 255,\n 255,\n 19,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 240,\n 63,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 240,\n 63,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 240,\n 63,\n 17,\n 14,\n 5,\n 112,\n 108,\n 97,\n 110,\n 101,\n 13,\n 7,\n 115,\n 117,\n 114,\n 102,\n 97,\n 99,\n 101,\n 12,\n 255,\n 255,\n 255,\n 255,\n 4,\n 255,\n 255,\n 255,\n 255,\n 12,\n 255,\n 255,\n 255,\n 255,\n 19,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 240,\n 63,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 20,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 240,\n 191,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 20,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 128,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 240,\n 63,\n 11,\n 11,\n 11,\n 11,\n 11,\n 17,\n 13,\n 6,\n 99,\n 111,\n 101,\n 100,\n 103,\n 101,\n 12,\n 255,\n 255,\n 255,\n 255,\n 4,\n 255,\n 255,\n 255,\n 255,\n 12,\n 255,\n 255,\n 255,\n 255,\n 12,\n 44,\n 0,\n 0,\n 0,\n 12,\n 42,\n 0,\n 0,\n 0,\n 12,\n 46,\n 0,\n 0,\n 0,\n 12,\n 71,\n 0,\n 0,\n 0,\n 10,\n 12,\n 21,\n 0,\n 0,\n 0,\n 12,\n 255,\n 255,\n 255,\n 255,\n 17,\n 13,\n 4,\n 101,\n 100,\n 103,\n 101,\n 12,\n 255,\n 255,\n 255,\n 255,\n 4,\n 255,\n 255,\n 255,\n 255,\n 12,\n 255,\n 255,\n 255,\n 255,\n 12,\n 57,\n 0,\n 0,\n 0,\n 6,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 240,\n 191,\n 12,\n 73,\n 0,\n 0,\n 0,\n 6,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 240,\n 63,\n 12,\n 56,\n 0,\n 0,\n 0,\n 12,\n 84,\n 0,\n 0,\n 0,\n 11,\n 7,\n 7,\n 117,\n 110,\n 107,\n 110,\n 111,\n 119,\n 110,\n 17,\n 13,\n 6,\n 118,\n 101,\n 114,\n 116,\n 101,\n 120,\n 12,\n 85,\n 0,\n 0,\n 0,\n 4,\n 255,\n 255,\n 255,\n 255,\n 12,\n 255,\n 255,\n 255,\n 255,\n 12,\n 71,\n 0,\n 0,\n 0,\n 12,\n 86,\n 0,\n 0,\n 0,\n 17,\n 14,\n 8,\n 115,\n 116,\n 114,\n 97,\n 105,\n 103,\n 104,\n 116,\n 13,\n 5,\n 99,\n 117,\n 114,\n 118,\n 101,\n 12,\n 255,\n 255,\n 255,\n 255,\n 4,\n 255,\n 255,\n 255,\n 255,\n 12,\n 255,\n 255,\n 255,\n 255,\n 19,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 240,\n 191,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 240,\n 191,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 20,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 240,\n 191,\n 11,\n 11,\n 17,\n 13,\n 4,\n 101,\n 100,\n 103,\n 101,\n 12,\n 255,\n 255,\n 255,\n 255,\n 4,\n 255,\n 255,\n 255,\n 255,\n 12,\n 255,\n 255,\n 255,\n 255,\n 12,\n 69,\n 0,\n 0,\n 0,\n 6,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 240,\n 191,\n 12,\n 73,\n 0,\n 0,\n 0,\n 6,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 240,\n 63,\n 12,\n 67,\n 0,\n 0,\n 0,\n 12,\n 87,\n 0,\n 0,\n 0,\n 11,\n 7,\n 7,\n 117,\n 110,\n 107,\n 110,\n 111,\n 119,\n 110,\n 17,\n 14,\n 8,\n 115,\n 116,\n 114,\n 97,\n 105,\n 103,\n 104,\n 116,\n 13,\n 5,\n 99,\n 117,\n 114,\n 118,\n 101,\n 12,\n 255,\n 255,\n 255,\n 255,\n 4,\n 255,\n 255,\n 255,\n 255,\n 12,\n 255,\n 255,\n 255,\n 255,\n 19,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 240,\n 191,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 240,\n 191,\n 20,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 240,\n 191,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 11,\n 11,\n 17,\n 13,\n 6,\n 118,\n 101,\n 114,\n 116,\n 101,\n 120,\n 12,\n 88,\n 0,\n 0,\n 0,\n 4,\n 255,\n 255,\n 255,\n 255,\n 12,\n 255,\n 255,\n 255,\n 255,\n 12,\n 49,\n 0,\n 0,\n 0,\n 12,\n 89,\n 0,\n 0,\n 0,\n 17,\n 14,\n 8,\n 115,\n 116,\n 114,\n 97,\n 105,\n 103,\n 104,\n 116,\n 13,\n 5,\n 99,\n 117,\n 114,\n 118,\n 101,\n 12,\n 255,\n 255,\n 255,\n 255,\n 4,\n 255,\n 255,\n 255,\n 255,\n 12,\n 255,\n 255,\n 255,\n 255,\n 19,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 240,\n 63,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 240,\n 191,\n 20,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 240,\n 63,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 11,\n 11,\n 17,\n 13,\n 5,\n 112,\n 111,\n 105,\n 110,\n 116,\n 12,\n 255,\n 255,\n 255,\n 255,\n 4,\n 255,\n 255,\n 255,\n 255,\n 12,\n 255,\n 255,\n 255,\n 255,\n 19,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 240,\n 63,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 240,\n 63,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 240,\n 191,\n 17,\n 14,\n 13,\n 115,\n 116,\n 114,\n 105,\n 110,\n 103,\n 95,\n 97,\n 116,\n 116,\n 114,\n 105,\n 98,\n 14,\n 11,\n 110,\n 97,\n 109,\n 101,\n 95,\n 97,\n 116,\n 116,\n 114,\n 105,\n 98,\n 14,\n 3,\n 103,\n 101,\n 110,\n 13,\n 6,\n 97,\n 116,\n 116,\n 114,\n 105,\n 98,\n 12,\n 255,\n 255,\n 255,\n 255,\n 4,\n 255,\n 255,\n 255,\n 255,\n 12,\n 255,\n 255,\n 255,\n 255,\n 12,\n 255,\n 255,\n 255,\n 255,\n 12,\n 51,\n 0,\n 0,\n 0,\n 21,\n 1,\n 0,\n 0,\n 0,\n 21,\n 1,\n 0,\n 0,\n 0,\n 21,\n 1,\n 0,\n 0,\n 0,\n 21,\n 2,\n 0,\n 0,\n 0,\n 7,\n 13,\n 100,\n 105,\n 109,\n 101,\n 110,\n 115,\n 105,\n 111,\n 110,\n 95,\n 116,\n 97,\n 103,\n 7,\n 5,\n 119,\n 105,\n 100,\n 116,\n 104,\n 17,\n 13,\n 5,\n 112,\n 111,\n 105,\n 110,\n 116,\n 12,\n 255,\n 255,\n 255,\n 255,\n 4,\n 255,\n 255,\n 255,\n 255,\n 12,\n 255,\n 255,\n 255,\n 255,\n 19,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 240,\n 63,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 240,\n 191,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 240,\n 191,\n 17,\n 14,\n 8,\n 115,\n 116,\n 114,\n 97,\n 105,\n 103,\n 104,\n 116,\n 13,\n 5,\n 99,\n 117,\n 114,\n 118,\n 101,\n 12,\n 255,\n 255,\n 255,\n 255,\n 4,\n 255,\n 255,\n 255,\n 255,\n 12,\n 255,\n 255,\n 255,\n 255,\n 19,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 240,\n 191,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 240,\n 63,\n 20,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 240,\n 191,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 11,\n 11,\n 17,\n 13,\n 5,\n 112,\n 111,\n 105,\n 110,\n 116,\n 12,\n 255,\n 255,\n 255,\n 255,\n 4,\n 255,\n 255,\n 255,\n 255,\n 12,\n 255,\n 255,\n 255,\n 255,\n 19,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 240,\n 191,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 240,\n 63,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 240,\n 63,\n 17,\n 14,\n 13,\n 115,\n 116,\n 114,\n 105,\n 110,\n 103,\n 95,\n 97,\n 116,\n 116,\n 114,\n 105,\n 98,\n 14,\n 11,\n 110,\n 97,\n 109,\n 101,\n 95,\n 97,\n 116,\n 116,\n 114,\n 105,\n 98,\n 14,\n 3,\n 103,\n 101,\n 110,\n 13,\n 6,\n 97,\n 116,\n 116,\n 114,\n 105,\n 98,\n 12,\n 255,\n 255,\n 255,\n 255,\n 4,\n 255,\n 255,\n 255,\n 255,\n 12,\n 255,\n 255,\n 255,\n 255,\n 12,\n 255,\n 255,\n 255,\n 255,\n 12,\n 60,\n 0,\n 0,\n 0,\n 21,\n 1,\n 0,\n 0,\n 0,\n 21,\n 1,\n 0,\n 0,\n 0,\n 21,\n 1,\n 0,\n 0,\n 0,\n 21,\n 2,\n 0,\n 0,\n 0,\n 7,\n 13,\n 100,\n 105,\n 109,\n 101,\n 110,\n 115,\n 105,\n 111,\n 110,\n 95,\n 116,\n 97,\n 103,\n 7,\n 6,\n 104,\n 101,\n 105,\n 103,\n 104,\n 116,\n 17,\n 13,\n 5,\n 112,\n 111,\n 105,\n 110,\n 116,\n 12,\n 255,\n 255,\n 255,\n 255,\n 4,\n 255,\n 255,\n 255,\n 255,\n 12,\n 255,\n 255,\n 255,\n 255,\n 19,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 240,\n 191,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 240,\n 191,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 240,\n 63,\n 17,\n 14,\n 8,\n 115,\n 116,\n 114,\n 97,\n 105,\n 103,\n 104,\n 116,\n 13,\n 5,\n 99,\n 117,\n 114,\n 118,\n 101,\n 12,\n 255,\n 255,\n 255,\n 255,\n 4,\n 255,\n 255,\n 255,\n 255,\n 12,\n 255,\n 255,\n 255,\n 255,\n 19,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 240,\n 63,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 240,\n 191,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 20,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 240,\n 191,\n 11,\n 11,\n 17,\n 14,\n 8,\n 115,\n 116,\n 114,\n 97,\n 105,\n 103,\n 104,\n 116,\n 13,\n 5,\n 99,\n 117,\n 114,\n 118,\n 101,\n 12,\n 255,\n 255,\n 255,\n 255,\n 4,\n 255,\n 255,\n 255,\n 255,\n 12,\n 255,\n 255,\n 255,\n 255,\n 19,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 240,\n 63,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 240,\n 63,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 20,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 240,\n 191,\n 11,\n 11,\n 17,\n 14,\n 8,\n 115,\n 116,\n 114,\n 97,\n 105,\n 103,\n 104,\n 116,\n 13,\n 5,\n 99,\n 117,\n 114,\n 118,\n 101,\n 12,\n 255,\n 255,\n 255,\n 255,\n 4,\n 255,\n 255,\n 255,\n 255,\n 12,\n 255,\n 255,\n 255,\n 255,\n 19,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 240,\n 191,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 240,\n 63,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 20,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 240,\n 191,\n 11,\n 11,\n 17,\n 14,\n 13,\n 115,\n 116,\n 114,\n 105,\n 110,\n 103,\n 95,\n 97,\n 116,\n 116,\n 114,\n 105,\n 98,\n 14,\n 11,\n 110,\n 97,\n 109,\n 101,\n 95,\n 97,\n 116,\n 116,\n 114,\n 105,\n 98,\n 14,\n 3,\n 103,\n 101,\n 110,\n 13,\n 6,\n 97,\n 116,\n 116,\n 114,\n 105,\n 98,\n 12,\n 255,\n 255,\n 255,\n 255,\n 4,\n 255,\n 255,\n 255,\n 255,\n 12,\n 255,\n 255,\n 255,\n 255,\n 12,\n 255,\n 255,\n 255,\n 255,\n 12,\n 69,\n 0,\n 0,\n 0,\n 21,\n 1,\n 0,\n 0,\n 0,\n 21,\n 1,\n 0,\n 0,\n 0,\n 21,\n 1,\n 0,\n 0,\n 0,\n 21,\n 2,\n 0,\n 0,\n 0,\n 7,\n 13,\n 100,\n 105,\n 109,\n 101,\n 110,\n 115,\n 105,\n 111,\n 110,\n 95,\n 116,\n 97,\n 103,\n 7,\n 4,\n 114,\n 111,\n 111,\n 116,\n 17,\n 13,\n 5,\n 112,\n 111,\n 105,\n 110,\n 116,\n 12,\n 255,\n 255,\n 255,\n 255,\n 4,\n 255,\n 255,\n 255,\n 255,\n 12,\n 255,\n 255,\n 255,\n 255,\n 19,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 240,\n 191,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 240,\n 191,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 240,\n 191,\n 17,\n 14,\n 8,\n 115,\n 116,\n 114,\n 97,\n 105,\n 103,\n 104,\n 116,\n 13,\n 5,\n 99,\n 117,\n 114,\n 118,\n 101,\n 12,\n 255,\n 255,\n 255,\n 255,\n 4,\n 255,\n 255,\n 255,\n 255,\n 12,\n 255,\n 255,\n 255,\n 255,\n 19,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 240,\n 191,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 240,\n 191,\n 20,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 240,\n 63,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 11,\n 11,\n 17,\n 14,\n 13,\n 115,\n 116,\n 114,\n 105,\n 110,\n 103,\n 95,\n 97,\n 116,\n 116,\n 114,\n 105,\n 98,\n 14,\n 11,\n 110,\n 97,\n 109,\n 101,\n 95,\n 97,\n 116,\n 116,\n 114,\n 105,\n 98,\n 14,\n 3,\n 103,\n 101,\n 110,\n 13,\n 6,\n 97,\n 116,\n 116,\n 114,\n 105,\n 98,\n 12,\n 255,\n 255,\n 255,\n 255,\n 4,\n 255,\n 255,\n 255,\n 255,\n 12,\n 255,\n 255,\n 255,\n 255,\n 12,\n 255,\n 255,\n 255,\n 255,\n 12,\n 73,\n 0,\n 0,\n 0,\n 21,\n 1,\n 0,\n 0,\n 0,\n 21,\n 1,\n 0,\n 0,\n 0,\n 21,\n 1,\n 0,\n 0,\n 0,\n 21,\n 2,\n 0,\n 0,\n 0,\n 7,\n 13,\n 100,\n 105,\n 109,\n 101,\n 110,\n 115,\n 105,\n 111,\n 110,\n 95,\n 116,\n 97,\n 103,\n 7,\n 6,\n 108,\n 101,\n 110,\n 103,\n 116,\n 104,\n 17,\n 13,\n 5,\n 112,\n 111,\n 105,\n 110,\n 116,\n 12,\n 255,\n 255,\n 255,\n 255,\n 4,\n 255,\n 255,\n 255,\n 255,\n 12,\n 255,\n 255,\n 255,\n 255,\n 19,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 240,\n 191,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 240,\n 63,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 240,\n 191,\n 17,\n 14,\n 3,\n 69,\n 110,\n 100,\n 14,\n 2,\n 111,\n 102,\n 14,\n 4,\n 65,\n 67,\n 73,\n 83,\n 13,\n 4,\n 100,\n 97,\n 116,\n 97\n ]\n];" + }, + { + "ConcreteType": "UnitsUI.Units, UnitsNodeModels", + "SelectedIndex": 218, + "SelectedString": "Millimeters", + "Id": "05d03c1556094b1f86b75fa4184437ce", + "NodeType": "ExtensionNode", + "Inputs": [], + "Outputs": [ + { + "Id": "97078c509bb04256b8e8f91e307fee39", + "Name": "Unit", + "Description": "The selected Unit", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Select a Unit type" + } + ], + "Connectors": [ + { + "Start": "40b5c8c109df43d89de1c1da3ffd0496", + "End": "5fb8167dc79b48aea1069606d5dcd649", + "Id": "dfcc7212bedf4e5aaab3490bffe38571", + "IsHidden": "False" + }, + { + "Start": "97078c509bb04256b8e8f91e307fee39", + "End": "8b34c3bc07db4594b3e5568047c29786", + "Id": "8a92c93f416b461ba1e61a9580802bea", + "IsHidden": "False" + } + ], + "Dependencies": [], + "NodeLibraryDependencies": [], + "Thumbnail": "", + "GraphDocumentationURL": null, + "ExtensionWorkspaceData": [ + { + "ExtensionGuid": "28992e1d-abb9-417f-8b1b-05e053bee670", + "Name": "Properties", + "Version": "2.19", + "Data": {} + } + ], + "Author": "", + "Linting": { + "activeLinter": "None", + "activeLinterId": "7b75fb44-43fd-4631-a878-29f4d5d8399a", + "warningCount": 0, + "errorCount": 0 + }, + "Bindings": [], + "View": { + "Dynamo": { + "ScaleFactor": 1.0, + "HasRunWithoutCrash": true, + "IsVisibleInDynamoLibrary": true, + "Version": "2.19.0.6156", + "RunType": "Manual", + "RunPeriod": "1000" + }, + "Camera": { + "Name": "_Background Preview", + "EyeX": -1009.1293755334449, + "EyeY": 1102.2848813722055, + "EyeZ": 2707.7727379578423, + "LookX": 1009.1293755334449, + "LookY": -1102.2848813722055, + "LookZ": -2707.7727379578423, + "UpX": 0.051617458462715149, + "UpY": 0.98901587724685669, + "UpZ": -0.13850393891334534 + }, + "ConnectorPins": [], + "NodeViews": [ + { + "Id": "458871bc1bcd4f42905e2e626024a0f4", + "Name": "Geometry.DeserializeFromSABWithUnits", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 863.50445799529371, + "Y": 155.19691479962725 + }, + { + "Id": "0110bd4155d34491bafad05364cd369f", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 591.00445799529371, + "Y": 211.09691479962726 + }, + { + "Id": "05d03c1556094b1f86b75fa4184437ce", + "Name": "Units", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 554.68617357188941, + "Y": 331.08396677271031 + } + ], + "Annotations": [ + { + "Id": "1b3e20ec6a504296923fc2090b470909", + "Title": "Serialized binary stream data", + "DescriptionText": "Collapsed as a group as this Code Block is wildly long...", + "IsExpanded": false, + "WidthAdjustment": 0.0, + "HeightAdjustment": 0.0, + "Nodes": [ + "0110bd4155d34491bafad05364cd369f" + ], + "HasNestedGroups": false, + "Left": 581.00445799529371, + "Top": 18.096914799627257, + "Width": 120.0, + "Height": 272.0, + "FontSize": 36.0, + "GroupStyleId": "883066aa-1fe2-44a4-9bd1-c3df86bfe9f6", + "InitialTop": 211.09691479962726, + "InitialHeight": 145.0, + "TextblockHeight": 183.0, + "Background": "#FFFFB8D8" + }, + { + "Id": "915b709cae874caebfd110402de36986", + "Title": "Original Cuboid geometry generated with 2 units of measurement (Unitless), using the 'dynamoUnit' input will scale to the chosen Unit for use in other software.", + "DescriptionText": null, + "IsExpanded": true, + "WidthAdjustment": 0.0, + "HeightAdjustment": 0.0, + "Nodes": [], + "HasNestedGroups": false, + "Left": 901.50445799529371, + "Top": 61.196914799627251, + "Width": 0.0, + "Height": 0.0, + "FontSize": 36.0, + "GroupStyleId": "00000000-0000-0000-0000-000000000000", + "InitialTop": 0.0, + "InitialHeight": 0.0, + "TextblockHeight": 0.0, + "Background": "#FFC1D676", + "PinnedNode": "458871bc1bcd4f42905e2e626024a0f4" + } + ], + "X": -379.88590178434822, + "Y": 284.59185342632111, + "Zoom": 0.9488025363447179 + } +} \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/GeometryUI.DeserializeFromSABWithUnits.md b/doc/distrib/NodeHelpFiles/GeometryUI.DeserializeFromSABWithUnits.md index 3b0dbcd826c..53e387ad086 100644 --- a/doc/distrib/NodeHelpFiles/GeometryUI.DeserializeFromSABWithUnits.md +++ b/doc/distrib/NodeHelpFiles/GeometryUI.DeserializeFromSABWithUnits.md @@ -1,4 +1,11 @@ ## In Depth -`Geometry.DeserializeFromSABWithUnits` imports Geometry to Dynamo from a .SAB byte array and `DynamoUnit.Unit` that is convertible from `millimeters`. This node takes a `byte[]` as the first input and a `DynamoUnit` as the second. If the unit input is left null, the default, this imports the .SAB geometry as unitless, simply importing the geometric data in the array without any unit conversion. If a `Unit` is passed, the internal units of the .SAB array are converted to the units specified. +`Geometry.DeserializeFromSABWithUnits` imports geometry to Dynamo from a .SAB (Standard ACIS Binary) byte array and `DynamoUnit.Unit` that is convertible from millimeters. This node takes a byte[] as the first input and a `dynamoUnit` as the second. If the `dynamoUnit` input is left null, this imports the .SAB geometry as unitless, importing the geometric data in the array without any unit conversion. If a unit is provided, the internal units of the .SAB array are converted to the units specified. Dynamo is unitless, but the numeric values in your Dynamo graph likely still have some implicit unit. You can use the `dynamoUnit` input to scale the internal geometry of the .SAB to that unit system. + +In the example below, a cuboid is generated from SAB with 2 units of measurement (unitless). The `dynamoUnit` input scales the chosen unit for use in other software. + +___ +## Example File + +![Geometry.DeserializeFromSABWithUnits](./GeometryUI.DeserializeFromSABWithUnits_img.jpg) \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/GeometryUI.DeserializeFromSABWithUnits_img.jpg b/doc/distrib/NodeHelpFiles/GeometryUI.DeserializeFromSABWithUnits_img.jpg new file mode 100644 index 00000000000..4ad9d06cdc7 Binary files /dev/null and b/doc/distrib/NodeHelpFiles/GeometryUI.DeserializeFromSABWithUnits_img.jpg differ diff --git a/doc/distrib/NodeHelpFiles/GeometryUI.ExportWithUnits.dyn b/doc/distrib/NodeHelpFiles/GeometryUI.ExportWithUnits.dyn new file mode 100644 index 00000000000..a10dae48a1b --- /dev/null +++ b/doc/distrib/NodeHelpFiles/GeometryUI.ExportWithUnits.dyn @@ -0,0 +1,882 @@ +{ + "Uuid": "baaf6052-9b49-488f-8f01-a28a858d23d7", + "IsCustomNode": false, + "Description": "", + "Name": "GeometryUI.ExportWithUnits", + "ElementResolver": { + "ResolutionMap": {} + }, + "Inputs": [ + { + "Id": "97b319c8678b4ba9935d0355a77b4c9c", + "Name": "File Path", + "Type": "string", + "Type2": "string", + "Value": "No file selected.", + "Description": "Allows you to select a file on the system and returns its file path", + "SelectedIndex": 0 + } + ], + "Outputs": [], + "Nodes": [ + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "6dcb0b06e6d147b98f817235d27b203f", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "453098e6695e403b919668b2814d9965", + "Name": "x", + "Description": "X coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "5c15552cea374af0bcde68715da646fa", + "Name": "y", + "Description": "Y coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "6fa0e8be0e394f818fadea607b4a6a58", + "Name": "z", + "Description": "Z coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "212ac2af3033489d8eaab39dd46d11a8", + "Name": "Point", + "Description": "Point created by coordinates", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Point.ByCoordinates@double,double,double", + "Replication": "Auto", + "Description": "Form a Point given 3 cartesian coordinates\n\nPoint.ByCoordinates (x: double = 0, y: double = 0, z: double = 0): Point" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "3da18c1927f7469e8307da74ca1d2685", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "dec16edf3fbb4adeb55ac8dcea284ec9", + "Name": "x", + "Description": "X coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "506bd0af4ba0447b8a4755edcf4ed257", + "Name": "y", + "Description": "Y coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "85c9a649c2224c3ca181bc1a252b9eee", + "Name": "z", + "Description": "Z coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "12d3ff9e2e6846a2a63236fff4edf5e3", + "Name": "Point", + "Description": "Point created by coordinates", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Point.ByCoordinates@double,double,double", + "Replication": "Auto", + "Description": "Form a Point given 3 cartesian coordinates\n\nPoint.ByCoordinates (x: double = 0, y: double = 0, z: double = 0): Point" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "20f4e6550d704f80b7c61775938f91ef", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "b090dceb2ea34be4b4f04c14379847dd", + "Name": "centerPoint", + "Description": "Point\nDefault value : Autodesk.DesignScript.Geometry.Point.ByCoordinates(0, 0, 0)", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "fdf4cdf3fe964cfdae3a3d1407f55645", + "Name": "radius", + "Description": "double\nDefault value : 1", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "55b94f530e1147f0aab4219467eb986e", + "Name": "Sphere", + "Description": "Sphere", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Sphere.ByCenterPointRadius@Autodesk.DesignScript.Geometry.Point,double", + "Replication": "Auto", + "Description": "Create a Solid Sphere cetered at the input Point, with given radius.\n\nSphere.ByCenterPointRadius (centerPoint: Point = Autodesk.DesignScript.Geometry.Point.ByCoordinates(0, 0, 0), radius: double = 1): Sphere" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "70b7b2032a0346e2a3ef4a33b75b16d6", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "77597bf8991641f0b4aa11b85002fe68", + "Name": "centerPoint", + "Description": "Point\nDefault value : Autodesk.DesignScript.Geometry.Point.ByCoordinates(0, 0, 0)", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "a4359564ed2a44929f35b07ae33eeb1b", + "Name": "radius", + "Description": "double\nDefault value : 1", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "9b50edbd0ebf46baa9e256bb81a1e805", + "Name": "Sphere", + "Description": "Sphere", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Sphere.ByCenterPointRadius@Autodesk.DesignScript.Geometry.Point,double", + "Replication": "Auto", + "Description": "Create a Solid Sphere cetered at the input Point, with given radius.\n\nSphere.ByCenterPointRadius (centerPoint: Point = Autodesk.DesignScript.Geometry.Point.ByCoordinates(0, 0, 0), radius: double = 1): Sphere" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "75a6566341c940b7951ce28a90b873dc", + "NodeType": "CodeBlockNode", + "Inputs": [], + "Outputs": [ + { + "Id": "6f7ceb79118c4c4890e412f40e8b0443", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "5;" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "c66e3330feba4c43aea0b47910584c5b", + "NodeType": "CodeBlockNode", + "Inputs": [], + "Outputs": [ + { + "Id": "a4abbd7022bf47afa77a39a4c3c1eeaf", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "9686859dd3f547038f8656797171a4c3", + "Name": "", + "Description": "Value of expression at line 2", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "fc5b80398c874bd4b28125e093dd203d", + "Name": "", + "Description": "Value of expression at line 3", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "5;\n2;\n8;" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "fdbcec629f5046a1be1a68647d5db95a", + "NodeType": "CodeBlockNode", + "Inputs": [], + "Outputs": [ + { + "Id": "90ee0223959944fc9fefa6e375e74feb", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "8b10fc55e29042528654b8e72823fe96", + "Name": "", + "Description": "Value of expression at line 2", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "ac2b35636105420cbc5172b66c49b0aa", + "Name": "", + "Description": "Value of expression at line 3", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "1;\n2;\n3;" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "1803be16255347a8bfcd31647f522eec", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "fe8e296035c141a0a0fbd670b9a9e4c5", + "Name": "x", + "Description": "X coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "3a2cbb8e0a8a44aba64a8ca0874853bd", + "Name": "y", + "Description": "Y coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "22718d87f8a747f9bc0087b819459dde", + "Name": "z", + "Description": "Z coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "8e6164a7037f42e9b18a9d8cb603627d", + "Name": "Point", + "Description": "Point created by coordinates", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Point.ByCoordinates@double,double,double", + "Replication": "Auto", + "Description": "Form a Point given 3 cartesian coordinates\n\nPoint.ByCoordinates (x: double = 0, y: double = 0, z: double = 0): Point" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "d1a25ced3c88415f8b4d34bec3b87714", + "NodeType": "CodeBlockNode", + "Inputs": [], + "Outputs": [ + { + "Id": "adb8e84bd9cf47b79c7c8635c01da1a8", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "1ea04c8206044ca4a204b6ed46496326", + "Name": "", + "Description": "Value of expression at line 2", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "5a28223ec9ab4823af5a7b74b19c3570", + "Name": "", + "Description": "Value of expression at line 3", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "5;\n1;\n4;" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "d089d566f4c747f78b026a2da6fb4f50", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "d69e399dc17e4716a58452ae56b90ace", + "Name": "centerPoint", + "Description": "Point\nDefault value : Autodesk.DesignScript.Geometry.Point.ByCoordinates(0, 0, 0)", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "43fc9f6903e645a091a9ef6b620e17e4", + "Name": "radius", + "Description": "double\nDefault value : 1", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "9764ae56d92e42cab0fd54adfb943ce6", + "Name": "Sphere", + "Description": "Sphere", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Sphere.ByCenterPointRadius@Autodesk.DesignScript.Geometry.Point,double", + "Replication": "Auto", + "Description": "Create a Solid Sphere cetered at the input Point, with given radius.\n\nSphere.ByCenterPointRadius (centerPoint: Point = Autodesk.DesignScript.Geometry.Point.ByCoordinates(0, 0, 0), radius: double = 1): Sphere" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "0eb7d5f8b7304af082683d679f29cd3b", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "fdd1139d49ab4c478fbc166dfe949b73", + "Name": "geometry", + "Description": "Autodesk.DesignScript.Geometry.Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "6e39f981e47c4d4e9fdd5c962056d73e", + "Name": "others", + "Description": "Geometry[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "c092547d04ea4c7687b99d1d8be46b03", + "Name": "Geometry[]", + "Description": "Geometry[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Geometry.IntersectAll@Autodesk.DesignScript.Geometry.Geometry[]", + "Replication": "Auto", + "Description": "Get the intersection of Geometry for this object and a collection of other Geometries. Finds common geometry of all participants.\n\nGeometry.IntersectAll (others: Geometry[]): Geometry[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSVarArgFunction, DynamoCore", + "FunctionSignature": "DSCore.List.Join@var[]..[]", + "FunctionType": "VariableArgument", + "Id": "2b117b50cc3a4861a10b902f573d4a54", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "09e2f1e8c40744c48d4ca30c7a4d778f", + "Name": "list0", + "Description": "Lists to join into one.\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "9e10e8b3e68a469a9cf9f850e0ea8471", + "Name": "list1", + "Description": "var[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "25d517060806422787ff04366e4025d6", + "Name": "list", + "Description": "Joined list.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Auto", + "Description": "Concatenates all given lists into a single list.\n\nList.Join (lists: var[]..[]): var[]..[]" + }, + { + "ConcreteType": "GeometryUI.ExportWithUnits, GeometryUI", + "SelectedExportedUnitsSource": [ + 0, + 1, + 2, + 3, + 5, + 4 + ], + "SelectedExportedUnit": 0, + "Id": "c5311efa92b14140b7a9839fb368ed8d", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "406357016daf42f58383529395257293", + "Name": "geometry", + "Description": "Geometry to export into a SAT file.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "f110ba07c04d4dbdb344c92e6339903a", + "Name": "filePath", + "Description": "File to export the geometry to.", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "45a12b4305e64cd5b106788ae25df642", + "Name": "string", + "Description": "The file path of the exported file. Note this may change from the input in it contains non-ASCII characters.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Exports the given geometry to the given SAT file path" + }, + { + "ConcreteType": "CoreNodeModels.Input.Filename, CoreNodeModels", + "Id": "97b319c8678b4ba9935d0355a77b4c9c", + "NodeType": "ExtensionNode", + "Inputs": [], + "Outputs": [ + { + "Id": "c6273b6c301249e8ba053a3c6e531a7b", + "Name": "", + "Description": "File Path", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows you to select a file on the system and returns its file path", + "HintPath": "C:\\Users\\tellro\\Downloads\\UpdatedDynamoSampleGraphs\\No file selected", + "InputValue": "No file selected." + } + ], + "Connectors": [ + { + "Start": "212ac2af3033489d8eaab39dd46d11a8", + "End": "77597bf8991641f0b4aa11b85002fe68", + "Id": "3bd4f307d77648ae8cfb16da7b695091", + "IsHidden": "False" + }, + { + "Start": "12d3ff9e2e6846a2a63236fff4edf5e3", + "End": "b090dceb2ea34be4b4f04c14379847dd", + "Id": "525ff18b33594b15bccd1f54f1592ec5", + "IsHidden": "False" + }, + { + "Start": "55b94f530e1147f0aab4219467eb986e", + "End": "09e2f1e8c40744c48d4ca30c7a4d778f", + "Id": "1d7709a99fb54944b2df0f3ef8ec30cd", + "IsHidden": "False" + }, + { + "Start": "9b50edbd0ebf46baa9e256bb81a1e805", + "End": "fdd1139d49ab4c478fbc166dfe949b73", + "Id": "12e3bec8cf9c43488eecb524035bcdeb", + "IsHidden": "False" + }, + { + "Start": "6f7ceb79118c4c4890e412f40e8b0443", + "End": "a4359564ed2a44929f35b07ae33eeb1b", + "Id": "e17cfcc2f99445768cef7194dbf05e3d", + "IsHidden": "False" + }, + { + "Start": "6f7ceb79118c4c4890e412f40e8b0443", + "End": "fdf4cdf3fe964cfdae3a3d1407f55645", + "Id": "63efbf90326b4d168fc868911428aea1", + "IsHidden": "False" + }, + { + "Start": "6f7ceb79118c4c4890e412f40e8b0443", + "End": "43fc9f6903e645a091a9ef6b620e17e4", + "Id": "d7ed46a49d21400bb019ae60099df93b", + "IsHidden": "False" + }, + { + "Start": "a4abbd7022bf47afa77a39a4c3c1eeaf", + "End": "453098e6695e403b919668b2814d9965", + "Id": "f5cd3fe68e844db6933991ec53cd61c6", + "IsHidden": "False" + }, + { + "Start": "9686859dd3f547038f8656797171a4c3", + "End": "5c15552cea374af0bcde68715da646fa", + "Id": "c7abb8cbf08f47deb5f386612316194e", + "IsHidden": "False" + }, + { + "Start": "fc5b80398c874bd4b28125e093dd203d", + "End": "6fa0e8be0e394f818fadea607b4a6a58", + "Id": "fd0a9d086889460f9071730fe2538744", + "IsHidden": "False" + }, + { + "Start": "90ee0223959944fc9fefa6e375e74feb", + "End": "dec16edf3fbb4adeb55ac8dcea284ec9", + "Id": "09b5c741040d4ec0be2584c648cf71dc", + "IsHidden": "False" + }, + { + "Start": "8b10fc55e29042528654b8e72823fe96", + "End": "506bd0af4ba0447b8a4755edcf4ed257", + "Id": "e8ffb8de86684d89b81d57a152ae78f4", + "IsHidden": "False" + }, + { + "Start": "ac2b35636105420cbc5172b66c49b0aa", + "End": "85c9a649c2224c3ca181bc1a252b9eee", + "Id": "789df2645ffb401aba2dd2abfc40be1c", + "IsHidden": "False" + }, + { + "Start": "8e6164a7037f42e9b18a9d8cb603627d", + "End": "d69e399dc17e4716a58452ae56b90ace", + "Id": "aca9f301ca7f4d4d8b347e0b92ee3a3e", + "IsHidden": "False" + }, + { + "Start": "adb8e84bd9cf47b79c7c8635c01da1a8", + "End": "fe8e296035c141a0a0fbd670b9a9e4c5", + "Id": "c080e2cc851a45d993b3e17d9d4f684b", + "IsHidden": "False" + }, + { + "Start": "1ea04c8206044ca4a204b6ed46496326", + "End": "3a2cbb8e0a8a44aba64a8ca0874853bd", + "Id": "9d629d79be8d42068ff1114a76270262", + "IsHidden": "False" + }, + { + "Start": "5a28223ec9ab4823af5a7b74b19c3570", + "End": "22718d87f8a747f9bc0087b819459dde", + "Id": "7c7fd0d6583f48ac93f548ee29c152c4", + "IsHidden": "False" + }, + { + "Start": "9764ae56d92e42cab0fd54adfb943ce6", + "End": "9e10e8b3e68a469a9cf9f850e0ea8471", + "Id": "0e0a38b5569548a6ad8bb00593a23de0", + "IsHidden": "False" + }, + { + "Start": "c092547d04ea4c7687b99d1d8be46b03", + "End": "406357016daf42f58383529395257293", + "Id": "030973c27c564ee5ad8a75f0614d5fc0", + "IsHidden": "False" + }, + { + "Start": "25d517060806422787ff04366e4025d6", + "End": "6e39f981e47c4d4e9fdd5c962056d73e", + "Id": "391274aacda2450097ec141a64b8d0ab", + "IsHidden": "False" + }, + { + "Start": "c6273b6c301249e8ba053a3c6e531a7b", + "End": "f110ba07c04d4dbdb344c92e6339903a", + "Id": "ef742f1575f94e33adc08111b99626e4", + "IsHidden": "False" + } + ], + "Dependencies": [], + "NodeLibraryDependencies": [], + "Thumbnail": "", + "GraphDocumentationURL": null, + "ExtensionWorkspaceData": [ + { + "ExtensionGuid": "28992e1d-abb9-417f-8b1b-05e053bee670", + "Name": "Properties", + "Version": "2.19", + "Data": {} + } + ], + "Author": "None provided", + "Linting": { + "activeLinter": "None", + "activeLinterId": "7b75fb44-43fd-4631-a878-29f4d5d8399a", + "warningCount": 0, + "errorCount": 0 + }, + "Bindings": [], + "View": { + "Dynamo": { + "ScaleFactor": 1.0, + "HasRunWithoutCrash": true, + "IsVisibleInDynamoLibrary": true, + "Version": "2.19.4.6632", + "RunType": "Automatic", + "RunPeriod": "1000" + }, + "Camera": { + "Name": "_Background Preview", + "EyeX": -15.944196701049805, + "EyeY": 11.278770446777344, + "EyeZ": 16.994457244873047, + "LookX": 20.185733795166016, + "LookY": -3.4630277156829834, + "LookZ": -20.405805587768555, + "UpX": -0.067404754459857941, + "UpY": 0.9953961968421936, + "UpZ": 0.068139612674713135 + }, + "ConnectorPins": [], + "NodeViews": [ + { + "Id": "6dcb0b06e6d147b98f817235d27b203f", + "Name": "Point.ByCoordinates", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": false, + "X": 536.564451465025, + "Y": 342.60147997032647 + }, + { + "Id": "3da18c1927f7469e8307da74ca1d2685", + "Name": "Point.ByCoordinates", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": false, + "X": 211.56445146502494, + "Y": 462.60147997032647 + }, + { + "Id": "20f4e6550d704f80b7c61775938f91ef", + "Name": "Sphere.ByCenterPointRadius", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": false, + "X": 536.564451465025, + "Y": 567.60147997032641 + }, + { + "Id": "70b7b2032a0346e2a3ef4a33b75b16d6", + "Name": "Sphere.ByCenterPointRadius", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": false, + "X": 924.564451465025, + "Y": 417.60147997032647 + }, + { + "Id": "75a6566341c940b7951ce28a90b873dc", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": false, + "X": 211.56445146502494, + "Y": 687.42897997032651 + }, + { + "Id": "c66e3330feba4c43aea0b47910584c5b", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 211.56445146502494, + "Y": 289.08397997032642 + }, + { + "Id": "fdbcec629f5046a1be1a68647d5db95a", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -42.435548534975055, + "Y": 480.08397997032642 + }, + { + "Id": "1803be16255347a8bfcd31647f522eec", + "Name": "Point.ByCoordinates", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": false, + "X": 211.56445146502494, + "Y": 846.60147997032641 + }, + { + "Id": "d1a25ced3c88415f8b4d34bec3b87714", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -42.435548534975055, + "Y": 864.08397997032648 + }, + { + "Id": "d089d566f4c747f78b026a2da6fb4f50", + "Name": "Sphere.ByCenterPointRadius", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": false, + "X": 536.564451465025, + "Y": 756.60147997032641 + }, + { + "Id": "0eb7d5f8b7304af082683d679f29cd3b", + "Name": "Geometry.IntersectAll", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1312.5644514650248, + "Y": 495.60147997032647 + }, + { + "Id": "2b117b50cc3a4861a10b902f573d4a54", + "Name": "List.Join", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": false, + "X": 925.6376298593849, + "Y": 612.96737194212653 + }, + { + "Id": "c5311efa92b14140b7a9839fb368ed8d", + "Name": "ExportToSAT", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1664.5644514650248, + "Y": 567.60147997032641 + }, + { + "Id": "97b319c8678b4ba9935d0355a77b4c9c", + "Name": "File Path", + "IsSetAsInput": true, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1312.5644514650248, + "Y": 673.60147997032641 + } + ], + "Annotations": [], + "X": 174.24590094730922, + "Y": -94.90557497714056, + "Zoom": 0.55152031146487834 + } +} \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/GeometryUI.ExportWithUnits.md b/doc/distrib/NodeHelpFiles/GeometryUI.ExportWithUnits.md new file mode 100644 index 00000000000..cad7895efa6 --- /dev/null +++ b/doc/distrib/NodeHelpFiles/GeometryUI.ExportWithUnits.md @@ -0,0 +1,9 @@ +## In Depth +`ExportToSAT` exports geometry from Dynamo to a SAT file type. + +In the example below, a PolySurface from the intersection of three spheres can be exported to a SAT file once a file path is selected. + +___ +## Example File + +![ExportToSAT](./GeometryUI.ExportWithUnits_img.jpg) \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/GeometryUI.ExportWithUnits_img.jpg b/doc/distrib/NodeHelpFiles/GeometryUI.ExportWithUnits_img.jpg new file mode 100644 index 00000000000..177c4446c1e Binary files /dev/null and b/doc/distrib/NodeHelpFiles/GeometryUI.ExportWithUnits_img.jpg differ diff --git a/doc/distrib/NodeHelpFiles/GeometryUI.ImportFromSATWithUnits.dyn b/doc/distrib/NodeHelpFiles/GeometryUI.ImportFromSATWithUnits.dyn new file mode 100644 index 00000000000..495ce2f8f73 --- /dev/null +++ b/doc/distrib/NodeHelpFiles/GeometryUI.ImportFromSATWithUnits.dyn @@ -0,0 +1,194 @@ +{ + "Uuid": "c4758f40-b2f9-49d3-8912-447a3d19952b", + "IsCustomNode": false, + "Description": "", + "Name": "GeometryUI.ImportFromSATWithUnits", + "ElementResolver": { + "ResolutionMap": {} + }, + "Inputs": [], + "Outputs": [], + "Nodes": [ + { + "ConcreteType": "GeometryUI.ImportFromSATWithUnits, GeometryUI", + "Id": "d7c0d6b38be24ac6a2b92ffc0a46135b", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "6206dde1a5e5410980a74470efc591be", + "Name": "file|filePath", + "Description": "Filepath or File object to import .SAT from.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "eb908af10cb64fcba495384f95a6dc06", + "Name": "dynamoUnit", + "Description": "A forge unit length, if left null, geometry will be imported as unitless.", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "90845a606f964ecba8f6acca24250eec", + "Name": "geometry", + "Description": "Loaded geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Auto", + "Description": "Imports geometry from SAT filepath. Set the dynamoUnit input to match how you are interpreting the other numbers in your Dynamo file." + }, + { + "ConcreteType": "CoreNodeModels.Input.Filename, CoreNodeModels", + "Id": "83955cad28004241a5cfbd08176f89b2", + "NodeType": "ExtensionNode", + "Inputs": [], + "Outputs": [ + { + "Id": "a85bf7a1f8434f3495249d0fdaaf395c", + "Name": "", + "Description": "File Path", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows you to select a file on the system and returns its file path", + "HintPath": "C:\\Users\\tellro\\Downloads\\invalid.sat", + "InputValue": "..\\invalid.sat" + }, + { + "ConcreteType": "UnitsUI.Units, UnitsNodeModels", + "SelectedIndex": 74, + "SelectedString": "Feet", + "Id": "29442523ab9847f99872f385c741111a", + "NodeType": "ExtensionNode", + "Inputs": [], + "Outputs": [ + { + "Id": "b153232f784745ceaae101169d901266", + "Name": "Unit", + "Description": "The selected Unit", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Select a Unit type" + } + ], + "Connectors": [ + { + "Start": "a85bf7a1f8434f3495249d0fdaaf395c", + "End": "6206dde1a5e5410980a74470efc591be", + "Id": "20368ef90fe44702b695e51aeae11ac6", + "IsHidden": "False" + }, + { + "Start": "b153232f784745ceaae101169d901266", + "End": "eb908af10cb64fcba495384f95a6dc06", + "Id": "947719f002b24acc95c4a482dcc6b8e6", + "IsHidden": "False" + } + ], + "Dependencies": [], + "NodeLibraryDependencies": [ + { + "Name": "invalid.sat", + "ReferenceType": "External", + "Nodes": [ + "83955cad28004241a5cfbd08176f89b2" + ] + } + ], + "Thumbnail": "", + "GraphDocumentationURL": null, + "ExtensionWorkspaceData": [ + { + "ExtensionGuid": "28992e1d-abb9-417f-8b1b-05e053bee670", + "Name": "Properties", + "Version": "3.0", + "Data": {} + } + ], + "Author": "", + "Linting": { + "activeLinter": "None", + "activeLinterId": "7b75fb44-43fd-4631-a878-29f4d5d8399a", + "warningCount": 0, + "errorCount": 0 + }, + "Bindings": [], + "View": { + "Dynamo": { + "ScaleFactor": 10000.0, + "HasRunWithoutCrash": true, + "IsVisibleInDynamoLibrary": true, + "Version": "2.19.0.5874", + "RunType": "Manual", + "RunPeriod": "1000" + }, + "Camera": { + "Name": "_Background Preview", + "EyeX": -90.59619140625, + "EyeY": 112.69316101074219, + "EyeZ": 237.396240234375, + "LookX": 84.426651000976563, + "LookY": -91.945541381835938, + "LookZ": -286.13116455078125, + "UpX": 0.023434815928339958, + "UpY": 0.99656552076339722, + "UpZ": -0.079423002898693085 + }, + "ConnectorPins": [], + "NodeViews": [ + { + "Id": "d7c0d6b38be24ac6a2b92ffc0a46135b", + "Name": "Geometry.ImportFromSATWithUnits", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 809.5, + "Y": 142.8273452655626 + }, + { + "Id": "83955cad28004241a5cfbd08176f89b2", + "Name": "File Path", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 329.0, + "Y": 144.0 + }, + { + "Id": "29442523ab9847f99872f385c741111a", + "Name": "Units", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 329.0, + "Y": 333.25 + } + ], + "Annotations": [], + "X": -162.03046243201658, + "Y": 89.286905128884712, + "Zoom": 0.852765925581498 + } +} \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/GeometryUI.ImportFromSATWithUnits.md b/doc/distrib/NodeHelpFiles/GeometryUI.ImportFromSATWithUnits.md index 2a6bd9cb342..ff9441c5131 100644 --- a/doc/distrib/NodeHelpFiles/GeometryUI.ImportFromSATWithUnits.md +++ b/doc/distrib/NodeHelpFiles/GeometryUI.ImportFromSATWithUnits.md @@ -1,4 +1,11 @@ ## In Depth -`Geometry.ImportFromSATWithUnits` imports Geometry to Dynamo from a .SAT file and `DynamoUnit.Unit` that is convertible from `millimeters`. This node takes a `file object` or `filepath` as the first input and a `DynamoUnit` as the second. If the unit input is left null, the default, this imports the .SAT geometry as unitless, simply importing the geometric data in the file without any unit conversion. If a `Unit` is passed, the internal units of the .SAT file are converted to the units specified. +`Geometry.ImportFromSATWithUnits` imports geometry to Dynamo from a .SAT file and `DynamoUnit.Unit` that is convertible from millimeters. This node takes a file object or file path as the first input and a `dynamoUnit` as the second. If the `dynamoUnit` input is left null, the .SAT geometry is imported as unitless, simply importing the geometric data in the file without any unit conversion. If a unit is passed, the internal units of the .SAT file are converted to the specified units. Dynamo is unitless, but the numeric values in your Dynamo graph likely still have some implicit unit. You can use the `dynamoUnit` input to scale the internal geometry of the .SAT file to that unit system. + +In the example below, geometry is imported from a .SAT file, with feet as the unit. To get this example file to work on your computer, download this example SAT file and point the `File Path` node to the invalid.sat file. + +___ +## Example File + +![Geometry.ImportFromSATWithUnits](./GeometryUI.ImportFromSATWithUnits_img.jpg) \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/GeometryUI.ImportFromSATWithUnits_img.jpg b/doc/distrib/NodeHelpFiles/GeometryUI.ImportFromSATWithUnits_img.jpg new file mode 100644 index 00000000000..82591934955 Binary files /dev/null and b/doc/distrib/NodeHelpFiles/GeometryUI.ImportFromSATWithUnits_img.jpg differ diff --git a/doc/distrib/NodeHelpFiles/KLFVJ5DI7APVNODARMSE3JM5C27DG62OXUUQRS3HCDTZYO6IBOZA.md b/doc/distrib/NodeHelpFiles/KLFVJ5DI7APVNODARMSE3JM5C27DG62OXUUQRS3HCDTZYO6IBOZA.md index 5d49cf86dd1..83b3d61a162 100644 --- a/doc/distrib/NodeHelpFiles/KLFVJ5DI7APVNODARMSE3JM5C27DG62OXUUQRS3HCDTZYO6IBOZA.md +++ b/doc/distrib/NodeHelpFiles/KLFVJ5DI7APVNODARMSE3JM5C27DG62OXUUQRS3HCDTZYO6IBOZA.md @@ -1,7 +1,9 @@ ## In Depth -Add in-depth information about ByOriginVectors (origin, xAxis, yAxis, zAxis)... +`CoordinateSystem.ByOriginVectors (origin, xAxis, yAxis, zAxis)` returns a new CoordinateSystem at an input origin point with input X, Y, and Z axes. + +In the example below, the CoordinateSystem is placed at an origin with new vectors for the X, Y, and Z axes. The result is a CoordinateSystem rotated relative to the original CoordinateSystem. ___ ## Example File diff --git a/doc/distrib/NodeHelpFiles/List.GroupByFunction.dyn b/doc/distrib/NodeHelpFiles/List.GroupByFunction.dyn new file mode 100644 index 00000000000..85cc0319ff2 --- /dev/null +++ b/doc/distrib/NodeHelpFiles/List.GroupByFunction.dyn @@ -0,0 +1,605 @@ +{ + "Uuid": "6ed1d215-7060-46bc-827c-52304820ba6e", + "IsCustomNode": false, + "Description": "", + "Name": "List.GroupByFunction", + "ElementResolver": { + "ResolutionMap": {} + }, + "Inputs": [ + { + "Id": "0564d7b6bd064293826f566e956c342a", + "Name": "Number", + "Type": "number", + "Type2": "number", + "Value": "3", + "NumberType": "Double", + "Description": "Creates a number", + "SelectedIndex": 0 + } + ], + "Outputs": [], + "Nodes": [ + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "823e4a7d29da46e9887826a6cbce4f9a", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "c8239d36a8be46ceada0b96564f52328", + "Name": "list", + "Description": "list of values\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "5c125a75dfc745aba7e7e166fc79da73", + "Name": "groupFunction", + "Description": "Function to group list\n\nFunction", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "c53cd96cbee54f27b07bc5b91cac6472", + "Name": "groupedList", + "Description": "List of arbitrary rank/levels (type: var[]..[])", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "List.GroupByFunction@var[]..[],Function", + "Replication": "Auto", + "Description": "Use a function to determine how list items should be grouped.\n\nList.GroupByFunction (list: var[]..[], groupFunction: Function): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "c684876f9b444e129c82482149e91347", + "NodeType": "CodeBlockNode", + "Inputs": [], + "Outputs": [ + { + "Id": "6d34fecee00848429f3c703cacde622f", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "0..9..#10;" + }, + { + "ConcreteType": "CoreNodeModels.Watch, CoreNodeModels", + "WatchWidth": 200.0, + "WatchHeight": 200.0, + "Id": "1fd75dca684a491ab272748143d718d7", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "e052818fffb344ae9f17106b249d6da8", + "Name": "", + "Description": "Node to show output from", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "cbebc0da43584d8bb15c05d7150c57c7", + "Name": "", + "Description": "Node output", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Visualizes a node's output" + }, + { + "ConcreteType": "CoreNodeModels.Watch, CoreNodeModels", + "WatchWidth": 200.0, + "WatchHeight": 200.0, + "Id": "b2fd2d23deac467b88c7b831a0f361fc", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "89a332baafbe41189ee26ac31dd88e8c", + "Name": "", + "Description": "Node to show output from", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "4d1184c2f615454489bbf4f0c60ed325", + "Name": "", + "Description": "Node output", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Visualizes a node's output" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "be4275e2188d4580bfa73b702bd071b2", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "b81c8e5edfe04085a6ce0c6782fc449e", + "Name": "list", + "Description": "List to fetch an item from.\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "680b6d2acabb4ff6a330e8e2e466e884", + "Name": "index", + "Description": "Index of the item to be fetched.\n\nint", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "bbc46dba70eb4cc79d1a936a784b7e05", + "Name": "item", + "Description": "Item in the list at the given index.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.List.GetItemAtIndex@var[]..[],int", + "Replication": "Auto", + "Description": "Returns an item from the given list that's located at the specified index.\n\nList.GetItemAtIndex (list: var[]..[], index: int): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "b5c02cffce164183a0f98b9d338ae165", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "6696f643f35e43dca5cb0ba95328c832", + "Name": "list", + "Description": "List to chop into sublists\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "fa6bdf9b229e4be0bd91d024efd96381", + "Name": "lengths", + "Description": "Lengths of consecutive sublists to be created from the input list\n\nint[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "a4f142aea15d409898b266d7ebd50ed4", + "Name": "lists", + "Description": "Sublists created from the list", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.List.Chop@var[]..[],int[]", + "Replication": "Auto", + "Description": "Chop a list into a set of consecutive sublists with the specified lengths. List division begins at the top of the list.\n\nList.Chop (list: var[]..[], lengths: int[]): var[]..[]" + }, + { + "ConcreteType": "CoreNodeModels.Watch, CoreNodeModels", + "WatchWidth": 200.0, + "WatchHeight": 200.0, + "Id": "e552b029a81b4418bb7521703df45ec0", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "ee1e5c6e009948a991299919b7d4db45", + "Name": "", + "Description": "Node to show output from", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "c7f446620015487d9be2e554f2baed54", + "Name": "", + "Description": "Node output", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Visualizes a node's output" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "695d06233d034d18998a0228e5f8bbeb", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "74fb5e4fb6404a43a036fc17ef99c09f", + "Name": "list", + "Description": "list of values\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "6d8154476f894282a62b770860302a74", + "Name": "groupFunction", + "Description": "Function to group list\n\nFunction", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "8e68c79de3034c0b9c4358a4870944f7", + "Name": "groupedList", + "Description": "List of arbitrary rank/levels (type: var[]..[])", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "List.GroupByFunction@var[]..[],Function", + "Replication": "Auto", + "Description": "Use a function to determine how list items should be grouped.\n\nList.GroupByFunction (list: var[]..[], groupFunction: Function): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "0e4503aaa58e49338a086ca58f6d765a", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "34227c9b69334b189e5a230121bce89d", + "Name": "list", + "Description": "List to fetch an item from.\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "10acbd7aed284a548ea2df0b592fa7af", + "Name": "index", + "Description": "Index of the item to be fetched.\n\nint", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "71d49e2b278d47aab6eff478b5b42dc9", + "Name": "item", + "Description": "Item in the list at the given index.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.List.GetItemAtIndex@var[]..[],int", + "Replication": "Auto", + "Description": "Returns an item from the given list that's located at the specified index.\n\nList.GetItemAtIndex (list: var[]..[], index: int): var[]..[]" + }, + { + "ConcreteType": "CoreNodeModels.Watch, CoreNodeModels", + "WatchWidth": 200.0, + "WatchHeight": 200.0, + "Id": "585f243fbfc848f7b9ee58cc73ece284", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "95ef031dc2694ec492f7c81ec354e2d9", + "Name": "", + "Description": "Node to show output from", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "dbe2177364d74c0d9caa2b27a54f33f9", + "Name": "", + "Description": "Node output", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Visualizes a node's output" + }, + { + "ConcreteType": "CoreNodeModels.Input.DoubleInput, CoreNodeModels", + "NumberType": "Double", + "Id": "0564d7b6bd064293826f566e956c342a", + "NodeType": "NumberInputNode", + "Inputs": [], + "Outputs": [ + { + "Id": "0ee2680f5d7f4f9fb3f944fe64817038", + "Name": "", + "Description": "Double", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Creates a number", + "InputValue": 3.0 + } + ], + "Connectors": [ + { + "Start": "c53cd96cbee54f27b07bc5b91cac6472", + "End": "e052818fffb344ae9f17106b249d6da8", + "Id": "6529ee2ca13d467b98f218cc9b355415", + "IsHidden": "False" + }, + { + "Start": "6d34fecee00848429f3c703cacde622f", + "End": "89a332baafbe41189ee26ac31dd88e8c", + "Id": "9334fe002f7149479031648358464806", + "IsHidden": "False" + }, + { + "Start": "6d34fecee00848429f3c703cacde622f", + "End": "6696f643f35e43dca5cb0ba95328c832", + "Id": "10cc801f92bc44bf9366e117009d2a68", + "IsHidden": "False" + }, + { + "Start": "4d1184c2f615454489bbf4f0c60ed325", + "End": "74fb5e4fb6404a43a036fc17ef99c09f", + "Id": "6e3364f50bcb43118c77f88f76c946a9", + "IsHidden": "False" + }, + { + "Start": "bbc46dba70eb4cc79d1a936a784b7e05", + "End": "5c125a75dfc745aba7e7e166fc79da73", + "Id": "69f3183dd38f4839b3a0dbbb90980fb4", + "IsHidden": "False" + }, + { + "Start": "a4f142aea15d409898b266d7ebd50ed4", + "End": "ee1e5c6e009948a991299919b7d4db45", + "Id": "a8ff42151646405a9136dba0eadd7004", + "IsHidden": "False" + }, + { + "Start": "a4f142aea15d409898b266d7ebd50ed4", + "End": "c8239d36a8be46ceada0b96564f52328", + "Id": "529c0136820c45ffbc9a82f5f5304b25", + "IsHidden": "False" + }, + { + "Start": "8e68c79de3034c0b9c4358a4870944f7", + "End": "95ef031dc2694ec492f7c81ec354e2d9", + "Id": "b1e25aa1cb6545229a94e299591b59f4", + "IsHidden": "False" + }, + { + "Start": "71d49e2b278d47aab6eff478b5b42dc9", + "End": "6d8154476f894282a62b770860302a74", + "Id": "cccadf5f4bf549998b42dbfa4e6b54e7", + "IsHidden": "False" + }, + { + "Start": "0ee2680f5d7f4f9fb3f944fe64817038", + "End": "fa6bdf9b229e4be0bd91d024efd96381", + "Id": "f236305b51074a03b899e7b42c6e063e", + "IsHidden": "False" + } + ], + "Dependencies": [], + "NodeLibraryDependencies": [], + "Thumbnail": "", + "GraphDocumentationURL": null, + "ExtensionWorkspaceData": [ + { + "ExtensionGuid": "28992e1d-abb9-417f-8b1b-05e053bee670", + "Name": "Properties", + "Version": "2.19", + "Data": {} + } + ], + "Author": "None provided", + "Linting": { + "activeLinter": "None", + "activeLinterId": "7b75fb44-43fd-4631-a878-29f4d5d8399a", + "warningCount": 0, + "errorCount": 0 + }, + "Bindings": [], + "View": { + "Dynamo": { + "ScaleFactor": 1.0, + "HasRunWithoutCrash": true, + "IsVisibleInDynamoLibrary": true, + "Version": "2.19.0.5742", + "RunType": "Automatic", + "RunPeriod": "1000" + }, + "Camera": { + "Name": "_Background Preview", + "EyeX": -17.0, + "EyeY": 24.0, + "EyeZ": 50.0, + "LookX": 12.0, + "LookY": -13.0, + "LookZ": -58.0, + "UpX": 0.0, + "UpY": 1.0, + "UpZ": 0.0 + }, + "ConnectorPins": [], + "NodeViews": [ + { + "Id": "823e4a7d29da46e9887826a6cbce4f9a", + "Name": "List.GroupByFunction", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 618.649972687126, + "Y": 363.56796132811496 + }, + { + "Id": "c684876f9b444e129c82482149e91347", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -21.350027312873976, + "Y": 229.14546132811495 + }, + { + "Id": "1fd75dca684a491ab272748143d718d7", + "Name": "Watch", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1001.649972687126, + "Y": 363.56796132811496 + }, + { + "Id": "b2fd2d23deac467b88c7b831a0f361fc", + "Name": "Watch", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 241.64997268712602, + "Y": -104.43203867188504 + }, + { + "Id": "be4275e2188d4580bfa73b702bd071b2", + "Name": "List.GetItemAtIndex", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 241.64997268712602, + "Y": 385.567961328115 + }, + { + "Id": "b5c02cffce164183a0f98b9d338ae165", + "Name": "List.Chop", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 241.64997268712602, + "Y": 563.067961328115 + }, + { + "Id": "e552b029a81b4418bb7521703df45ec0", + "Name": "Watch", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1001.649972687126, + "Y": 676.567961328115 + }, + { + "Id": "695d06233d034d18998a0228e5f8bbeb", + "Name": "List.GroupByFunction", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 618.649972687126, + "Y": 50.567961328114961 + }, + { + "Id": "0e4503aaa58e49338a086ca58f6d765a", + "Name": "List.GetItemAtIndex", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 241.64997268712602, + "Y": 208.56796132811496 + }, + { + "Id": "585f243fbfc848f7b9ee58cc73ece284", + "Name": "Watch", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1001.649972687126, + "Y": 50.567961328114961 + }, + { + "Id": "0564d7b6bd064293826f566e956c342a", + "Name": "Number", + "IsSetAsInput": true, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -21.350027312873976, + "Y": 597.067961328115 + } + ], + "Annotations": [], + "X": 310.81726197630809, + "Y": 90.166202731076623, + "Zoom": 0.57612781954887216 + } +} \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/List.GroupByFunction.md b/doc/distrib/NodeHelpFiles/List.GroupByFunction.md new file mode 100644 index 00000000000..376f4bfefe6 --- /dev/null +++ b/doc/distrib/NodeHelpFiles/List.GroupByFunction.md @@ -0,0 +1,10 @@ +## In Depth +`List.GroupByFunction` returns a new list grouped by a function. + +The `groupFunction` input requires a node in a function state (i.e., it returns a function). This means that at least one of the node’s inputs is not connected. Dynamo then runs the node function on each item in the input list of `List.GroupByFunction` to use the output as a grouping mechanism. + +In the example below, two different lists are grouped using `List.GetItemAtIndex` as the function. This function creates groups (a new list) from each top-level index. +___ +## Example File + +![List.GroupByFunction](./List.GroupByFunction_img.jpg) \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/List.GroupByFunction_img.jpg b/doc/distrib/NodeHelpFiles/List.GroupByFunction_img.jpg new file mode 100644 index 00000000000..64a1c96f228 Binary files /dev/null and b/doc/distrib/NodeHelpFiles/List.GroupByFunction_img.jpg differ diff --git a/doc/distrib/NodeHelpFiles/List.MaximumItemByKey.dyn b/doc/distrib/NodeHelpFiles/List.MaximumItemByKey.dyn new file mode 100644 index 00000000000..fbff98fdfb8 --- /dev/null +++ b/doc/distrib/NodeHelpFiles/List.MaximumItemByKey.dyn @@ -0,0 +1,525 @@ +{ + "Uuid": "2523e4be-3126-479e-9d17-09d4e569fdb5", + "IsCustomNode": false, + "Description": "", + "Name": "List.MaximumItemByKey", + "ElementResolver": { + "ResolutionMap": { + "Point": { + "Key": "Autodesk.DesignScript.Geometry.Point", + "Value": "ProtoGeometry.dll" + } + } + }, + "Inputs": [], + "Outputs": [], + "Nodes": [ + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "1deff9adde5a40a8b641573444966dde", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "e0e8ee0d18ba495cafa4006afe7ca8db", + "Name": "centerPoint", + "Description": "Center point of circle\n\nPoint\nDefault value : Autodesk.DesignScript.Geometry.Point.ByCoordinates(0, 0, 0)", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "d24aa2c1750946bcbee0f4afae18ec2c", + "Name": "radius", + "Description": "Radius\n\ndouble\nDefault value : 1", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "e5a2be3971c44b49b3589571371e030d", + "Name": "Circle", + "Description": "Circle created with center point and radius", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Circle.ByCenterPointRadius@Autodesk.DesignScript.Geometry.Point,double", + "Replication": "Auto", + "Description": "Creates a Circle with input center Point and radius in the world XY plane, with world Z as normal.\n\nCircle.ByCenterPointRadius (centerPoint: Point = Autodesk.DesignScript.Geometry.Point.ByCoordinates(0, 0, 0), radius: double = 1): Circle" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "f7232beb5bad41b186a8b6bdf3605e9a", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "59f93c5a0d4f4a249ce38427a7869f69", + "Name": "centerPoint", + "Description": "Center point of circle\n\nPoint\nDefault value : Autodesk.DesignScript.Geometry.Point.ByCoordinates(0, 0, 0)", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "1c6b78008ce24a8c8065738b791e85d4", + "Name": "radius", + "Description": "Radius\n\ndouble\nDefault value : 1", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "d346db59783240cf9b282e74f4ba20a9", + "Name": "Circle", + "Description": "Circle created with center point and radius", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Circle.ByCenterPointRadius@Autodesk.DesignScript.Geometry.Point,double", + "Replication": "Auto", + "Description": "Creates a Circle with input center Point and radius in the world XY plane, with world Z as normal.\n\nCircle.ByCenterPointRadius (centerPoint: Point = Autodesk.DesignScript.Geometry.Point.ByCoordinates(0, 0, 0), radius: double = 1): Circle" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "1b7d33f74dde44498454337fc91932bb", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "6c0e3a6dff254ba4988bae135a4289cf", + "Name": "centerPoint", + "Description": "Center point of circle\n\nPoint\nDefault value : Autodesk.DesignScript.Geometry.Point.ByCoordinates(0, 0, 0)", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "e3268eaf627242d4b72a677c8a803301", + "Name": "radius", + "Description": "Radius\n\ndouble\nDefault value : 1", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "efceaf4193ae4b9cb3279f2b65a5427c", + "Name": "Circle", + "Description": "Circle created with center point and radius", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Circle.ByCenterPointRadius@Autodesk.DesignScript.Geometry.Point,double", + "Replication": "Auto", + "Description": "Creates a Circle with input center Point and radius in the world XY plane, with world Z as normal.\n\nCircle.ByCenterPointRadius (centerPoint: Point = Autodesk.DesignScript.Geometry.Point.ByCoordinates(0, 0, 0), radius: double = 1): Circle" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "481dd24950a24aa3bfd3610c6837095f", + "NodeType": "CodeBlockNode", + "Inputs": [], + "Outputs": [ + { + "Id": "67d3c0bbf6844b9e90cf9b407d56f9ba", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "ddd57bab537c4285a969855012071b64", + "Name": "", + "Description": "Value of expression at line 2", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "4cc4200f115e40fb923c1e527018ad10", + "Name": "", + "Description": "Value of expression at line 3", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "Point.ByCoordinates(0,0,0);\nPoint.ByCoordinates(2,0,0);\nPoint.ByCoordinates(5,0,0);" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "affa88d2b3b4456bb7f076e31cc987f5", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "9bd3f590c22d41738e6c09bf26aa4986", + "Name": "circle", + "Description": "Autodesk.DesignScript.Geometry.Circle", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "1ed111c17472441ca6d42772f5172e42", + "Name": "double", + "Description": "double", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Circle.Radius", + "Replication": "Auto", + "Description": "Returns the radius of the circle.\n\nCircle.Radius: double" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "09109438de644647b8aeabddd012dfea", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "33ad37990c5d4086a813afec6fd29e8b", + "Name": "list", + "Description": "list of values\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "fbf57cbcb6de40d7928a569194bc2f25", + "Name": "keyFunction", + "Description": "function applied to the list items\n\nFunction", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "154cad19da704a09931d61b0b1cbd18a", + "Name": "maximumItem", + "Description": "Maximum item in list using keyFunction (type: var[]..[])", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "List.MaximumItemByKey@var[]..[],Function", + "Replication": "Auto", + "Description": "Returns the items from the list that generate the maximum values for the function supplied as the key projector\n\nList.MaximumItemByKey (list: var[]..[], keyFunction: Function): var[]..[]" + }, + { + "ConcreteType": "CoreNodeModels.CreateList, CoreNodeModels", + "VariableInputPorts": true, + "Id": "706d6f41820d4b6db7c04e58a2cce7a4", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "6f1c31f987834387be0be3375ce74d44", + "Name": "item0", + "Description": "Item Index #0", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "c6f711199557403fb81e6ca76e63b52e", + "Name": "item1", + "Description": "Item Index #1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "912d9ee580944285a08a4d9451776322", + "Name": "item2", + "Description": "Item Index #2", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "0f25d4fe59444730a2ef8a70c68e3ed1", + "Name": "list", + "Description": "A list (type: var[]..[])", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Makes a new list from the given inputs" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "a9b2020a7bc947cdb242fae61e665b80", + "NodeType": "CodeBlockNode", + "Inputs": [], + "Outputs": [ + { + "Id": "505de6781ea14954a924563e633d699d", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "843f45fa8f4446bea4f662cca44eb625", + "Name": "", + "Description": "Value of expression at line 2", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "6acd969418094a0398b15292ebccd3b8", + "Name": "", + "Description": "Value of expression at line 3", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "0.5;\n1;\n1.5;" + } + ], + "Connectors": [ + { + "Start": "e5a2be3971c44b49b3589571371e030d", + "End": "6f1c31f987834387be0be3375ce74d44", + "Id": "2b8072afbb934252ac6091e3e2c6937f", + "IsHidden": "False" + }, + { + "Start": "d346db59783240cf9b282e74f4ba20a9", + "End": "c6f711199557403fb81e6ca76e63b52e", + "Id": "e3f66489b74b4f2197e65397f70c2fa2", + "IsHidden": "False" + }, + { + "Start": "efceaf4193ae4b9cb3279f2b65a5427c", + "End": "912d9ee580944285a08a4d9451776322", + "Id": "b39bdc6f5c32442b8df49120f263efab", + "IsHidden": "False" + }, + { + "Start": "67d3c0bbf6844b9e90cf9b407d56f9ba", + "End": "e0e8ee0d18ba495cafa4006afe7ca8db", + "Id": "54c334a290b947ceab82fe402cd49c19", + "IsHidden": "False" + }, + { + "Start": "ddd57bab537c4285a969855012071b64", + "End": "59f93c5a0d4f4a249ce38427a7869f69", + "Id": "23a7f80c2bbd493c973f0380fb8fd138", + "IsHidden": "False" + }, + { + "Start": "4cc4200f115e40fb923c1e527018ad10", + "End": "6c0e3a6dff254ba4988bae135a4289cf", + "Id": "885fe5efd6764614ba8b771d2d873c0d", + "IsHidden": "False" + }, + { + "Start": "1ed111c17472441ca6d42772f5172e42", + "End": "fbf57cbcb6de40d7928a569194bc2f25", + "Id": "d5ec806dc9e445c3aa2d4d9654b654e4", + "IsHidden": "False" + }, + { + "Start": "0f25d4fe59444730a2ef8a70c68e3ed1", + "End": "33ad37990c5d4086a813afec6fd29e8b", + "Id": "54dffa64de684030ab5194c327c732b3", + "IsHidden": "False" + }, + { + "Start": "505de6781ea14954a924563e633d699d", + "End": "d24aa2c1750946bcbee0f4afae18ec2c", + "Id": "0f5b2f8eadcc4bfb88da72c59d262853", + "IsHidden": "False" + }, + { + "Start": "843f45fa8f4446bea4f662cca44eb625", + "End": "1c6b78008ce24a8c8065738b791e85d4", + "Id": "6e9f41943d1444ae8c71ffe9735a34d6", + "IsHidden": "False" + }, + { + "Start": "6acd969418094a0398b15292ebccd3b8", + "End": "e3268eaf627242d4b72a677c8a803301", + "Id": "32d4327aa0454df4bdb70ec4b763b9d4", + "IsHidden": "False" + } + ], + "Dependencies": [], + "NodeLibraryDependencies": [], + "Thumbnail": "", + "GraphDocumentationURL": null, + "ExtensionWorkspaceData": [ + { + "ExtensionGuid": "28992e1d-abb9-417f-8b1b-05e053bee670", + "Name": "Properties", + "Version": "2.19", + "Data": {} + } + ], + "Author": "None provided", + "Linting": { + "activeLinter": "None", + "activeLinterId": "7b75fb44-43fd-4631-a878-29f4d5d8399a", + "warningCount": 0, + "errorCount": 0 + }, + "Bindings": [], + "View": { + "Dynamo": { + "ScaleFactor": 1.0, + "HasRunWithoutCrash": true, + "IsVisibleInDynamoLibrary": true, + "Version": "2.19.0.5742", + "RunType": "Automatic", + "RunPeriod": "1000" + }, + "Camera": { + "Name": "_Background Preview", + "EyeX": 1.1602656841278076, + "EyeY": 8.9741945266723633, + "EyeZ": 1.2702900171279907, + "LookX": 0.02100752666592598, + "LookY": -8.5661163330078125, + "LookZ": -2.4595201015472412, + "UpX": 0.0075130779296159744, + "UpY": 0.4756242036819458, + "UpZ": -0.87961649894714355 + }, + "ConnectorPins": [], + "NodeViews": [ + { + "Id": "1deff9adde5a40a8b641573444966dde", + "Name": "Circle.ByCenterPointRadius", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 682.2, + "Y": 690.8 + }, + { + "Id": "f7232beb5bad41b186a8b6bdf3605e9a", + "Name": "Circle.ByCenterPointRadius", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 682.2, + "Y": 868.8 + }, + { + "Id": "1b7d33f74dde44498454337fc91932bb", + "Name": "Circle.ByCenterPointRadius", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": false, + "X": 682.2, + "Y": 1046.7999999999997 + }, + { + "Id": "481dd24950a24aa3bfd3610c6837095f", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 286.20000000000005, + "Y": 782.28249999999991 + }, + { + "Id": "affa88d2b3b4456bb7f076e31cc987f5", + "Name": "Circle.Radius", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1058.2, + "Y": 1060.7999999999997 + }, + { + "Id": "09109438de644647b8aeabddd012dfea", + "Name": "List.MaximumItemByKey", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1360.2, + "Y": 930.8 + }, + { + "Id": "706d6f41820d4b6db7c04e58a2cce7a4", + "Name": "List.Create", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": false, + "X": 1058.2, + "Y": 834.8 + }, + { + "Id": "a9b2020a7bc947cdb242fae61e665b80", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 286.20000000000005, + "Y": 956.28249999999991 + } + ], + "Annotations": [], + "X": -110.4210889356882, + "Y": -651.595904742232, + "Zoom": 0.94308467029363308 + } +} \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/List.MaximumItemByKey.md b/doc/distrib/NodeHelpFiles/List.MaximumItemByKey.md new file mode 100644 index 00000000000..5873ff1c484 --- /dev/null +++ b/doc/distrib/NodeHelpFiles/List.MaximumItemByKey.md @@ -0,0 +1,8 @@ +## In Depth +`List.MaximumItemByKey` returns the largest item in a list based on a key function. + +In the example below, a series of three circles with increasing radii are compared using radius as the key. The circle at (5,0,0) is returned, as it has the largest radius. +___ +## Example File + +![List.MaximumItemByKey](./List.MaximumItemByKey_img.jpg) \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/List.MaximumItemByKey_img.jpg b/doc/distrib/NodeHelpFiles/List.MaximumItemByKey_img.jpg new file mode 100644 index 00000000000..d357bd3b559 Binary files /dev/null and b/doc/distrib/NodeHelpFiles/List.MaximumItemByKey_img.jpg differ diff --git a/doc/distrib/NodeHelpFiles/List.MinimumItemByKey.dyn b/doc/distrib/NodeHelpFiles/List.MinimumItemByKey.dyn new file mode 100644 index 00000000000..0f2947bd1fc --- /dev/null +++ b/doc/distrib/NodeHelpFiles/List.MinimumItemByKey.dyn @@ -0,0 +1,525 @@ +{ + "Uuid": "37894edf-db9a-42d2-87bd-89145719baa7", + "IsCustomNode": false, + "Description": "", + "Name": "List.MinimumItemByKey", + "ElementResolver": { + "ResolutionMap": { + "Point": { + "Key": "Autodesk.DesignScript.Geometry.Point", + "Value": "ProtoGeometry.dll" + } + } + }, + "Inputs": [], + "Outputs": [], + "Nodes": [ + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "0b916b3a9d4f442d96db8c5739565c67", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "529a47c650ec4f4683bb637b02d5d015", + "Name": "centerPoint", + "Description": "Center point of circle\n\nPoint\nDefault value : Autodesk.DesignScript.Geometry.Point.ByCoordinates(0, 0, 0)", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "f171de1541f74ba0a3f0ad2c67bd4900", + "Name": "radius", + "Description": "Radius\n\ndouble\nDefault value : 1", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "274bdff8da77468ea67b129f0df7db3d", + "Name": "Circle", + "Description": "Circle created with center point and radius", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Circle.ByCenterPointRadius@Autodesk.DesignScript.Geometry.Point,double", + "Replication": "Auto", + "Description": "Creates a Circle with input center Point and radius in the world XY plane, with world Z as normal.\n\nCircle.ByCenterPointRadius (centerPoint: Point = Autodesk.DesignScript.Geometry.Point.ByCoordinates(0, 0, 0), radius: double = 1): Circle" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "033c20cbca2d472bb496b3f3e135dcc7", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "7a5b8a93bd894c018a69cd85eef8cdbb", + "Name": "centerPoint", + "Description": "Center point of circle\n\nPoint\nDefault value : Autodesk.DesignScript.Geometry.Point.ByCoordinates(0, 0, 0)", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "d47ab32bc89d433faec756ba2b495204", + "Name": "radius", + "Description": "Radius\n\ndouble\nDefault value : 1", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "eeceddc21a124ac68d7e725c87287506", + "Name": "Circle", + "Description": "Circle created with center point and radius", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Circle.ByCenterPointRadius@Autodesk.DesignScript.Geometry.Point,double", + "Replication": "Auto", + "Description": "Creates a Circle with input center Point and radius in the world XY plane, with world Z as normal.\n\nCircle.ByCenterPointRadius (centerPoint: Point = Autodesk.DesignScript.Geometry.Point.ByCoordinates(0, 0, 0), radius: double = 1): Circle" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "a089cf9c950b485e8fe5e79ca60ad9a6", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "f140d509ba7d4587bb637d784b37fe22", + "Name": "centerPoint", + "Description": "Center point of circle\n\nPoint\nDefault value : Autodesk.DesignScript.Geometry.Point.ByCoordinates(0, 0, 0)", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "f5ce2b22fee54c62a57191e3a87e6917", + "Name": "radius", + "Description": "Radius\n\ndouble\nDefault value : 1", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "639a02bbf949498e846dadfa150ec323", + "Name": "Circle", + "Description": "Circle created with center point and radius", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Circle.ByCenterPointRadius@Autodesk.DesignScript.Geometry.Point,double", + "Replication": "Auto", + "Description": "Creates a Circle with input center Point and radius in the world XY plane, with world Z as normal.\n\nCircle.ByCenterPointRadius (centerPoint: Point = Autodesk.DesignScript.Geometry.Point.ByCoordinates(0, 0, 0), radius: double = 1): Circle" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "aa4d71f4895b4a7bb4343ba292cb4b86", + "NodeType": "CodeBlockNode", + "Inputs": [], + "Outputs": [ + { + "Id": "a819f21751854f66adb874f2bdb9ecce", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "b122929f9f5749d7a7574a01b4e92915", + "Name": "", + "Description": "Value of expression at line 2", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "acca783e967a4eac9a5ecd315dbef281", + "Name": "", + "Description": "Value of expression at line 3", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "Point.ByCoordinates(0,0,0);\nPoint.ByCoordinates(2,0,0);\nPoint.ByCoordinates(5,0,0);" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "112395bfa3b745ca9466ea7b4197ba94", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "2f7a338487314a4081adfc4a6cbd29a5", + "Name": "circle", + "Description": "Autodesk.DesignScript.Geometry.Circle", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "ff853adbced84302840db51277e06bfd", + "Name": "double", + "Description": "double", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Circle.Radius", + "Replication": "Auto", + "Description": "Returns the radius of the circle.\n\nCircle.Radius: double" + }, + { + "ConcreteType": "CoreNodeModels.CreateList, CoreNodeModels", + "VariableInputPorts": true, + "Id": "ee21502e4e9740c18e52d47d41e32f8d", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "2d52e583135249f292175dc73a50c376", + "Name": "item0", + "Description": "Item Index #0", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "2e3115a76e784e46a09c86b296374447", + "Name": "item1", + "Description": "Item Index #1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "76ea73b55f314f5cbdc5a328d895d855", + "Name": "item2", + "Description": "Item Index #2", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "08809a472f08405bbafd730cd30fcd99", + "Name": "list", + "Description": "A list (type: var[]..[])", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Makes a new list from the given inputs" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "29a7e48d36a2480788fdb361d81cea56", + "NodeType": "CodeBlockNode", + "Inputs": [], + "Outputs": [ + { + "Id": "a7e3c88dd695496aa0bbba9dce53e044", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "a8a5fee8930548d3be16cd03317ab292", + "Name": "", + "Description": "Value of expression at line 2", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "abe38319cfa549b985e1dc7257d00b57", + "Name": "", + "Description": "Value of expression at line 3", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "0.5;\n1;\n1.5;" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "11cce9605c6d41adbe9fb21641ef2941", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "de454d6d489847d8a4dcdcfbd6cf2f68", + "Name": "list", + "Description": "list of values\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "7cc0f97b7f134c92a4fa254617ddefbe", + "Name": "keyFunction", + "Description": "function applied to the list items\n\nFunction", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "e55ba619c5c049fb8e647994571fefa3", + "Name": "minimumItem", + "Description": "Minimum item in list using keyFunction (type: var[]..[])", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "List.MinimumItemByKey@var[]..[],Function", + "Replication": "Auto", + "Description": "Returns the items from the list that generate the minimum values for the function supplied as the key projector\n\nList.MinimumItemByKey (list: var[]..[], keyFunction: Function): var[]..[]" + } + ], + "Connectors": [ + { + "Start": "274bdff8da77468ea67b129f0df7db3d", + "End": "2d52e583135249f292175dc73a50c376", + "Id": "2386a101f801424aa1440a410f491386", + "IsHidden": "False" + }, + { + "Start": "eeceddc21a124ac68d7e725c87287506", + "End": "2e3115a76e784e46a09c86b296374447", + "Id": "dd114e79bd7942dba907ddaa8250478e", + "IsHidden": "False" + }, + { + "Start": "639a02bbf949498e846dadfa150ec323", + "End": "76ea73b55f314f5cbdc5a328d895d855", + "Id": "6fca6d2692f64685b4e0317b25af66b2", + "IsHidden": "False" + }, + { + "Start": "a819f21751854f66adb874f2bdb9ecce", + "End": "529a47c650ec4f4683bb637b02d5d015", + "Id": "f4024e4479e94a4babeaa365d81d70d1", + "IsHidden": "False" + }, + { + "Start": "b122929f9f5749d7a7574a01b4e92915", + "End": "7a5b8a93bd894c018a69cd85eef8cdbb", + "Id": "2925611267c54cb9b09004f02416b8d4", + "IsHidden": "False" + }, + { + "Start": "acca783e967a4eac9a5ecd315dbef281", + "End": "f140d509ba7d4587bb637d784b37fe22", + "Id": "4fa431ccdc564190815cf4f84d075262", + "IsHidden": "False" + }, + { + "Start": "ff853adbced84302840db51277e06bfd", + "End": "7cc0f97b7f134c92a4fa254617ddefbe", + "Id": "939ded22ea9f4cfa8684f1bd6b6ce1ab", + "IsHidden": "False" + }, + { + "Start": "08809a472f08405bbafd730cd30fcd99", + "End": "de454d6d489847d8a4dcdcfbd6cf2f68", + "Id": "0c0dc4f86b8844179e6083e35294f341", + "IsHidden": "False" + }, + { + "Start": "a7e3c88dd695496aa0bbba9dce53e044", + "End": "f171de1541f74ba0a3f0ad2c67bd4900", + "Id": "f76ecb857d6544a781d4e742ef2613b5", + "IsHidden": "False" + }, + { + "Start": "a8a5fee8930548d3be16cd03317ab292", + "End": "d47ab32bc89d433faec756ba2b495204", + "Id": "13e2a5d9c06a4008af0a132ba45e81b8", + "IsHidden": "False" + }, + { + "Start": "abe38319cfa549b985e1dc7257d00b57", + "End": "f5ce2b22fee54c62a57191e3a87e6917", + "Id": "73387b014e8749e1addc72aa10febe11", + "IsHidden": "False" + } + ], + "Dependencies": [], + "NodeLibraryDependencies": [], + "Thumbnail": "", + "GraphDocumentationURL": null, + "ExtensionWorkspaceData": [ + { + "ExtensionGuid": "28992e1d-abb9-417f-8b1b-05e053bee670", + "Name": "Properties", + "Version": "2.19", + "Data": {} + } + ], + "Author": "None provided", + "Linting": { + "activeLinter": "None", + "activeLinterId": "7b75fb44-43fd-4631-a878-29f4d5d8399a", + "warningCount": 0, + "errorCount": 0 + }, + "Bindings": [], + "View": { + "Dynamo": { + "ScaleFactor": 1.0, + "HasRunWithoutCrash": true, + "IsVisibleInDynamoLibrary": true, + "Version": "2.19.0.5742", + "RunType": "Automatic", + "RunPeriod": "1000" + }, + "Camera": { + "Name": "_Background Preview", + "EyeX": 1.1677411794662476, + "EyeY": 5.9259648323059082, + "EyeZ": 0.39507651329040527, + "LookX": 0.013532042503356934, + "LookY": -5.5178866386413574, + "LookZ": -1.5843065977096558, + "UpX": 0.0075130779296159744, + "UpY": 0.4756242036819458, + "UpZ": -0.87961649894714355 + }, + "ConnectorPins": [], + "NodeViews": [ + { + "Id": "0b916b3a9d4f442d96db8c5739565c67", + "Name": "Circle.ByCenterPointRadius", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": false, + "X": 682.2, + "Y": 684.8 + }, + { + "Id": "033c20cbca2d472bb496b3f3e135dcc7", + "Name": "Circle.ByCenterPointRadius", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 682.2, + "Y": 874.8 + }, + { + "Id": "a089cf9c950b485e8fe5e79ca60ad9a6", + "Name": "Circle.ByCenterPointRadius", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 682.2, + "Y": 1052.7999999999997 + }, + { + "Id": "aa4d71f4895b4a7bb4343ba292cb4b86", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 286.20000000000005, + "Y": 788.28249999999991 + }, + { + "Id": "112395bfa3b745ca9466ea7b4197ba94", + "Name": "Circle.Radius", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1058.2, + "Y": 1062.7999999999997 + }, + { + "Id": "ee21502e4e9740c18e52d47d41e32f8d", + "Name": "List.Create", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": false, + "X": 1058.2, + "Y": 836.8 + }, + { + "Id": "29a7e48d36a2480788fdb361d81cea56", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 286.20000000000005, + "Y": 962.28249999999991 + }, + { + "Id": "11cce9605c6d41adbe9fb21641ef2941", + "Name": "List.MinimumItemByKey", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1360.2, + "Y": 932.8 + } + ], + "Annotations": [], + "X": -112.20798388517778, + "Y": -434.89263853696275, + "Zoom": 0.670714334439528 + } +} \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/List.MinimumItemByKey.md b/doc/distrib/NodeHelpFiles/List.MinimumItemByKey.md new file mode 100644 index 00000000000..660bcbdf6e0 --- /dev/null +++ b/doc/distrib/NodeHelpFiles/List.MinimumItemByKey.md @@ -0,0 +1,8 @@ +## In Depth +`List.MinimumItemByKey` returns the smallest item in a list based on a key function. + +In the example below, a series of three circles with increasing radii are compared using radius as the key. The circle at the origin is returned, as it has the smallest radius. +___ +## Example File + +![List.MinimumItemByKey](./List.MinimumItemByKey_img.jpg) \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/List.MinimumItemByKey_img.jpg b/doc/distrib/NodeHelpFiles/List.MinimumItemByKey_img.jpg new file mode 100644 index 00000000000..073c7038e91 Binary files /dev/null and b/doc/distrib/NodeHelpFiles/List.MinimumItemByKey_img.jpg differ diff --git a/doc/distrib/NodeHelpFiles/List.SortByFunction.dyn b/doc/distrib/NodeHelpFiles/List.SortByFunction.dyn new file mode 100644 index 00000000000..efc58c64c39 --- /dev/null +++ b/doc/distrib/NodeHelpFiles/List.SortByFunction.dyn @@ -0,0 +1,739 @@ +{ + "Uuid": "b43ec02a-241a-48c9-be66-dbd3766a4584", + "IsCustomNode": false, + "Description": "", + "Name": "List.SortByFunction", + "ElementResolver": { + "ResolutionMap": { + "Point": { + "Key": "Autodesk.DesignScript.Geometry.Point", + "Value": "ProtoGeometry.dll" + }, + "Math.Sin": { + "Key": "DSCore.Math", + "Value": "DSCoreNodes.dll" + }, + "Math": { + "Key": "DSCore.Math", + "Value": "DSCoreNodes.dll" + }, + "Geometry": { + "Key": "Autodesk.DesignScript.Geometry.Geometry", + "Value": "ProtoGeometry.dll" + } + } + }, + "Inputs": [], + "Outputs": [], + "Nodes": [ + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "a34bc3d883854789a7331a9bc024fcc5", + "NodeType": "CodeBlockNode", + "Inputs": [], + "Outputs": [ + { + "Id": "b7754699416a4c43b15bc6851ff4e9e9", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "49a4768159f945928d5c2c89b9bb13b1", + "Name": "", + "Description": "Value of expression at line 2", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "Math.RandomList(20);\nMath.RandomList(20);" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "40a68775f5cd4e099a8dbd3a902cfb75", + "NodeType": "CodeBlockNode", + "Inputs": [ + { + "Id": "0930ace161be45fbbefa2f788abf087a", + "Name": "x", + "Description": "x", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "55da9101dd594e44bfb4083584e49176", + "Name": "y", + "Description": "y", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "f74b31f8c7614c6c902d2c61d01d7d72", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "Point.ByCoordinates(10*x,10*y);" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "783add990252426fa578cfea2cda50a2", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "15b5d9d4d5f14d6d937e7b7383b512e9", + "Name": "points", + "Description": "Points for nurbs curve\n\nPoint[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "86b3211bed97426dbf46f245bb3c6faa", + "Name": "NurbsCurve", + "Description": "Nurbscurve created from points", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.NurbsCurve.ByControlPoints@Autodesk.DesignScript.Geometry.Point[]", + "Replication": "Auto", + "Description": "Create a BSplineCurve by using explicit control points. NOTE 1: BSplineCurves with deg=1 have G1 discontinuities, which cause problems for extrusion, sweep, and other operations. They should be avoided. Use a PolyCurve instead. NOTE 2: If the curve is periodic (closed), then the first and last points MUST be the same.\n\nNurbsCurve.ByControlPoints (points: Point[]): NurbsCurve" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "a9fc237260f2471099132b72c36a7ebb", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "b814fda099b44458a6a9e7ac76d92d10", + "Name": "list", + "Description": "list of values\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "678b656e576a4f57b9cd240baeb86144", + "Name": "sortFunction", + "Description": "function used to sort list\n\nFunction", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "3e6b0053d5c54958bd6b40d8402add81", + "Name": "sortedList", + "Description": "type: var[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "List.SortByFunction@var[]..[],Function", + "Replication": "Auto", + "Description": "Use a function to determine how list items should be sorted.\n\nList.SortByFunction (list: var[]..[], sortFunction: Function): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "dac4654d4b50405bab82284ad3e5714d", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "c61013bccf224b33b6983eed1cbb7c55", + "Name": "point", + "Description": "Autodesk.DesignScript.Geometry.Point", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "51506aa025ff4e1bb23c81523a2aa6a8", + "Name": "double", + "Description": "double", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Point.X", + "Replication": "Auto", + "Description": "Get the X component of a Point\n\nPoint.X: double" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "5dea9cd52c1b4884ad17f6653656a758", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "cd7afaf2dba54313b14621b7a672ee26", + "Name": "points", + "Description": "Points for nurbs curve\n\nPoint[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "c61325c9d6a844ecb4ed892aed457b32", + "Name": "NurbsCurve", + "Description": "Nurbscurve created from points", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.NurbsCurve.ByControlPoints@Autodesk.DesignScript.Geometry.Point[]", + "Replication": "Auto", + "Description": "Create a BSplineCurve by using explicit control points. NOTE 1: BSplineCurves with deg=1 have G1 discontinuities, which cause problems for extrusion, sweep, and other operations. They should be avoided. Use a PolyCurve instead. NOTE 2: If the curve is periodic (closed), then the first and last points MUST be the same.\n\nNurbsCurve.ByControlPoints (points: Point[]): NurbsCurve" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "5e537627d95048dab7a1b853bb9d1d70", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "8b3d96c762d04da7aeaaa4d9e7a4529e", + "Name": "geometry", + "Description": "Autodesk.DesignScript.Geometry.Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "cc7310d3615f41c7a8203a1b8b3e08e2", + "Name": "xTranslation", + "Description": "Displacement along X-axis.\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "d746f6e5412543d8aeaa884aa0c7e896", + "Name": "yTranslation", + "Description": "Displacement along Y-axis.\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "ddf4cd9886aa4f0eb28a184d8b61ada9", + "Name": "zTranslation", + "Description": "Displacement along Z-axis.\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "940082ebff8f441684d5ad176d94dfab", + "Name": "Geometry", + "Description": "Transformed Geometry.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Geometry.Translate@double,double,double", + "Replication": "Auto", + "Description": "Translates any given geometry by the given displacements in the x, y, and z directions defined in WCS respectively.\n\nGeometry.Translate (xTranslation: double = 0, yTranslation: double = 0, zTranslation: double = 0): Geometry" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "7ec3288272ea44ba8a30efc8e878821c", + "NodeType": "CodeBlockNode", + "Inputs": [], + "Outputs": [ + { + "Id": "f8131a3bdb014cd38b9397ae540a1256", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "10;" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "547e2b15be0f427ebdf0efd998c9d2fa", + "NodeType": "CodeBlockNode", + "Inputs": [], + "Outputs": [ + { + "Id": "b24fa777e5044d1b8dbc1550a6c6f41d", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "20;" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "72a277a2a6a3468d948b9373bd1ffb62", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "5f90ddc19b1f4813b72f01a3e2885410", + "Name": "geometry", + "Description": "Autodesk.DesignScript.Geometry.Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "15397e23fd0f40fba6cdce772cf212df", + "Name": "xTranslation", + "Description": "Displacement along X-axis.\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "6ca35f3b39cb4e28b999098d11520cd7", + "Name": "yTranslation", + "Description": "Displacement along Y-axis.\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "d3aed79af66a45db89fc3aef3bdc32bd", + "Name": "zTranslation", + "Description": "Displacement along Z-axis.\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "257f8f9e8a314adcb043c6941c7897c9", + "Name": "Geometry", + "Description": "Transformed Geometry.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Geometry.Translate@double,double,double", + "Replication": "Auto", + "Description": "Translates any given geometry by the given displacements in the x, y, and z directions defined in WCS respectively.\n\nGeometry.Translate (xTranslation: double = 0, yTranslation: double = 0, zTranslation: double = 0): Geometry" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "6068fb1205ca4ddb9f310d56e4497fa5", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "eee111eaaafc42aeb22c0d2bd2587417", + "Name": "list", + "Description": "list of values\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "5e035e58854d4866b48a8cd62844a677", + "Name": "sortFunction", + "Description": "function used to sort list\n\nFunction", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "85045319ae1b47b0bfcbf8c367d4e633", + "Name": "sortedList", + "Description": "type: var[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "List.SortByFunction@var[]..[],Function", + "Replication": "Auto", + "Description": "Use a function to determine how list items should be sorted.\n\nList.SortByFunction (list: var[]..[], sortFunction: Function): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "a1ca58fd1f7145fd9b6660b1d9533bf4", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "f8c5eea106c641899a8d1f6ced51fa5b", + "Name": "points", + "Description": "Points for nurbs curve\n\nPoint[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "b95d3986e5d54cb8ad9a785bfaac444f", + "Name": "NurbsCurve", + "Description": "Nurbscurve created from points", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.NurbsCurve.ByControlPoints@Autodesk.DesignScript.Geometry.Point[]", + "Replication": "Auto", + "Description": "Create a BSplineCurve by using explicit control points. NOTE 1: BSplineCurves with deg=1 have G1 discontinuities, which cause problems for extrusion, sweep, and other operations. They should be avoided. Use a PolyCurve instead. NOTE 2: If the curve is periodic (closed), then the first and last points MUST be the same.\n\nNurbsCurve.ByControlPoints (points: Point[]): NurbsCurve" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "484d99eee45f4ac2a0e432bf3e0ed6c3", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "ab3147a57dfe496b968aef584c1fe4b9", + "Name": "point", + "Description": "Autodesk.DesignScript.Geometry.Point", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "6e63e64f8b604b22a130c831e2c0b6ee", + "Name": "double", + "Description": "double", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Point.Y", + "Replication": "Auto", + "Description": "Get the Y component of a Point\n\nPoint.Y: double" + } + ], + "Connectors": [ + { + "Start": "b7754699416a4c43b15bc6851ff4e9e9", + "End": "0930ace161be45fbbefa2f788abf087a", + "Id": "a3474db6aa59497b8365b84f9abe26df", + "IsHidden": "False" + }, + { + "Start": "49a4768159f945928d5c2c89b9bb13b1", + "End": "55da9101dd594e44bfb4083584e49176", + "Id": "706d373844f24c459224213dc644e416", + "IsHidden": "False" + }, + { + "Start": "f74b31f8c7614c6c902d2c61d01d7d72", + "End": "eee111eaaafc42aeb22c0d2bd2587417", + "Id": "534ad18da68c471890a32e505032e1fe", + "IsHidden": "False" + }, + { + "Start": "f74b31f8c7614c6c902d2c61d01d7d72", + "End": "b814fda099b44458a6a9e7ac76d92d10", + "Id": "b290efe1b33948e3a1d8672294fe4d04", + "IsHidden": "False" + }, + { + "Start": "f74b31f8c7614c6c902d2c61d01d7d72", + "End": "15b5d9d4d5f14d6d937e7b7383b512e9", + "Id": "505b2647f7ba4921a80ecae104b1a7f0", + "IsHidden": "False" + }, + { + "Start": "3e6b0053d5c54958bd6b40d8402add81", + "End": "8b3d96c762d04da7aeaaa4d9e7a4529e", + "Id": "09efad53751c4d74865e244cd74d696f", + "IsHidden": "False" + }, + { + "Start": "51506aa025ff4e1bb23c81523a2aa6a8", + "End": "678b656e576a4f57b9cd240baeb86144", + "Id": "cd9529165337433380cf32990d3e9d7f", + "IsHidden": "False" + }, + { + "Start": "940082ebff8f441684d5ad176d94dfab", + "End": "cd7afaf2dba54313b14621b7a672ee26", + "Id": "43070e7cdf0f4ab4bb5a5568ef656fe4", + "IsHidden": "False" + }, + { + "Start": "f8131a3bdb014cd38b9397ae540a1256", + "End": "cc7310d3615f41c7a8203a1b8b3e08e2", + "Id": "af9b045be42a486dbd032a0d3d80246c", + "IsHidden": "False" + }, + { + "Start": "b24fa777e5044d1b8dbc1550a6c6f41d", + "End": "15397e23fd0f40fba6cdce772cf212df", + "Id": "3f5b25e10dea4b5aa89e8083add6acfd", + "IsHidden": "False" + }, + { + "Start": "257f8f9e8a314adcb043c6941c7897c9", + "End": "f8c5eea106c641899a8d1f6ced51fa5b", + "Id": "c38efd4c946647edb74db5b824940713", + "IsHidden": "False" + }, + { + "Start": "85045319ae1b47b0bfcbf8c367d4e633", + "End": "5f90ddc19b1f4813b72f01a3e2885410", + "Id": "eb0800c68e3346ea8c7f4f247a1a7352", + "IsHidden": "False" + }, + { + "Start": "6e63e64f8b604b22a130c831e2c0b6ee", + "End": "5e035e58854d4866b48a8cd62844a677", + "Id": "a03547224db04f1aaec166f1baaf0631", + "IsHidden": "False" + } + ], + "Dependencies": [], + "NodeLibraryDependencies": [], + "Thumbnail": "", + "GraphDocumentationURL": null, + "ExtensionWorkspaceData": [ + { + "ExtensionGuid": "28992e1d-abb9-417f-8b1b-05e053bee670", + "Name": "Properties", + "Version": "2.19", + "Data": {} + } + ], + "Author": "None provided", + "Linting": { + "activeLinter": "None", + "activeLinterId": "7b75fb44-43fd-4631-a878-29f4d5d8399a", + "warningCount": 0, + "errorCount": 0 + }, + "Bindings": [], + "View": { + "Dynamo": { + "ScaleFactor": 1.0, + "HasRunWithoutCrash": true, + "IsVisibleInDynamoLibrary": true, + "Version": "2.19.0.5742", + "RunType": "Automatic", + "RunPeriod": "1000" + }, + "Camera": { + "Name": "_Background Preview", + "EyeX": 16.726314544677734, + "EyeY": 20.129474639892578, + "EyeZ": 8.0907392501831055, + "LookX": -0.070718042552471161, + "LookY": -14.076128005981445, + "LookZ": -13.043798446655273, + "UpX": -0.0030941260047256947, + "UpY": 0.82114923000335693, + "UpZ": -0.57070517539978027 + }, + "ConnectorPins": [], + "NodeViews": [ + { + "Id": "a34bc3d883854789a7331a9bc024fcc5", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -108.66335369327658, + "Y": 105.26135129218801 + }, + { + "Id": "40a68775f5cd4e099a8dbd3a902cfb75", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 232.33664630672342, + "Y": 96.606351292188037 + }, + { + "Id": "783add990252426fa578cfea2cda50a2", + "Name": "NurbsCurve.ByControlPoints", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1407.3366463067234, + "Y": 175.77885129218802 + }, + { + "Id": "a9fc237260f2471099132b72c36a7ebb", + "Name": "List.SortByFunction", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 687.33664630672342, + "Y": 161.77885129218802 + }, + { + "Id": "dac4654d4b50405bab82284ad3e5714d", + "Name": "Point.X", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 232.33664630672342, + "Y": 274.77885129218805 + }, + { + "Id": "5dea9cd52c1b4884ad17f6653656a758", + "Name": "NurbsCurve.ByControlPoints", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1407.3366463067234, + "Y": 322.77885129218805 + }, + { + "Id": "5e537627d95048dab7a1b853bb9d1d70", + "Name": "Geometry.Translate", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1049.3366463067234, + "Y": 272.77885129218805 + }, + { + "Id": "7ec3288272ea44ba8a30efc8e878821c", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 687.33664630672342, + "Y": 339.60635129218804 + }, + { + "Id": "547e2b15be0f427ebdf0efd998c9d2fa", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 687.33664630672342, + "Y": 664.60635129218792 + }, + { + "Id": "72a277a2a6a3468d948b9373bd1ffb62", + "Name": "Geometry.Translate", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1049.3366463067234, + "Y": 519.778851292188 + }, + { + "Id": "6068fb1205ca4ddb9f310d56e4497fa5", + "Name": "List.SortByFunction", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 687.33664630672342, + "Y": 486.77885129218805 + }, + { + "Id": "a1ca58fd1f7145fd9b6660b1d9533bf4", + "Name": "NurbsCurve.ByControlPoints", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1407.3366463067234, + "Y": 469.77885129218805 + }, + { + "Id": "484d99eee45f4ac2a0e432bf3e0ed6c3", + "Name": "Point.Y", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 232.33664630672342, + "Y": 520.77885129218794 + } + ], + "Annotations": [], + "X": 108.66212032371095, + "Y": -30.258246163124795, + "Zoom": 0.61703316676792574 + } +} \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/List.SortByFunction.md b/doc/distrib/NodeHelpFiles/List.SortByFunction.md new file mode 100644 index 00000000000..8bd605e0087 --- /dev/null +++ b/doc/distrib/NodeHelpFiles/List.SortByFunction.md @@ -0,0 +1,8 @@ +## In Depth +`List.SortByFunction` returns a list sorted by a function. + +In the example below, a line is drawn through a list of randomly placed points that have been sorted with different functions. The first curve through an unsorted list is non-directional. Sorting the list using the X or Y component of each point results in directional lines progressing across X and Y, respectively. +___ +## Example File + +![List.SortByFunction](./List.SortByFunction_img.jpg) \ No newline at end of file diff --git a/doc/distrib/NodeHelpFiles/List.SortByFunction_img.jpg b/doc/distrib/NodeHelpFiles/List.SortByFunction_img.jpg new file mode 100644 index 00000000000..5f4cd2f88d9 Binary files /dev/null and b/doc/distrib/NodeHelpFiles/List.SortByFunction_img.jpg differ diff --git a/doc/distrib/NodeHelpFiles/Tessellation.ConvexHull.ByPoints.md b/doc/distrib/NodeHelpFiles/Tessellation.ConvexHull.ByPoints.md index 4e928212ef0..1bcf6af2c58 100644 --- a/doc/distrib/NodeHelpFiles/Tessellation.ConvexHull.ByPoints.md +++ b/doc/distrib/NodeHelpFiles/Tessellation.ConvexHull.ByPoints.md @@ -1,5 +1,8 @@ ## In Depth -Revit will generate and contour a mesh from a list of supplied points. The points cannot be collinear. +`ConvexHull.ByPoints` returns a list of curves that represent the convex hull of a set of points. + +In the example below, a list of points randomly placed in 3D returns a list of curves representing their convex hull. + ___ ## Example File diff --git a/doc/distrib/NodeHelpFiles/Tessellation.Delaunay.ByParametersOnSurface.md b/doc/distrib/NodeHelpFiles/Tessellation.Delaunay.ByParametersOnSurface.md index 0e96944d147..a908997a665 100644 --- a/doc/distrib/NodeHelpFiles/Tessellation.Delaunay.ByParametersOnSurface.md +++ b/doc/distrib/NodeHelpFiles/Tessellation.Delaunay.ByParametersOnSurface.md @@ -1,5 +1,8 @@ ## In Depth -ByParametersOnSurface will return a Voronoi representation of a surface's UV as a list of curves. In the example below, a Voronoi representation is created on a surface using a UV system of 50 random values. In order for the Voronoi to stop at the edges of the surface, the returned curves must be intersected with the surface. +`Delaunay.ByParametersOnSurface` returns a Delaunay triangulation of an input surface. + +In the example below, a Delaunay triangulation of a NurbsSurface is returned with a UV count of 400. Increasing the UV count will create a better approximation of the underlying surface but with more triangles. + ___ ## Example File diff --git a/doc/distrib/NodeHelpFiles/Tessellation.Delaunay.ByPoints.md b/doc/distrib/NodeHelpFiles/Tessellation.Delaunay.ByPoints.md index 4af97856230..f374176ded2 100644 --- a/doc/distrib/NodeHelpFiles/Tessellation.Delaunay.ByPoints.md +++ b/doc/distrib/NodeHelpFiles/Tessellation.Delaunay.ByPoints.md @@ -1,5 +1,8 @@ ## In Depth -Revit will generate and contour a mesh from a list of supplied points. The points cannot be collinear. +`Delaunay.ByPoints` returns a list of curves that represent the Delaunay triangulation of a set of points. + +In the example below, a list of points randomly placed in 3D returns a list of curves representing their Delaunay triangulation. + ___ ## Example File diff --git a/doc/distrib/Open Source Licenses/OFL.txt b/doc/distrib/Open Source Licenses/OFL.txt new file mode 100644 index 00000000000..1456c1809da --- /dev/null +++ b/doc/distrib/Open Source Licenses/OFL.txt @@ -0,0 +1,97 @@ +Copyright (c) , (), +with Reserved Font Name . +Copyright (c) , (), +with Reserved Font Name . +Copyright (c) , (). + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/extern/ProtoGeometry/ProtoGeometry.config b/extern/ProtoGeometry/ProtoGeometry.config index af759bbc39f..1304d2ad9d2 100644 --- a/extern/ProtoGeometry/ProtoGeometry.config +++ b/extern/ProtoGeometry/ProtoGeometry.config @@ -1,4 +1,4 @@ - libg_229_0_0/LibG.ProtoInterface.dll + libg_230_0_0/LibG.ProtoInterface.dll diff --git a/src/Config/CS_SDK.props b/src/Config/CS_SDK.props index efaf33a260d..09ae2fd3263 100644 --- a/src/Config/CS_SDK.props +++ b/src/Config/CS_SDK.props @@ -4,8 +4,11 @@ Debug AnyCPU x64 + + + net6.0 16.0 - net6.0 + $(DotNet) 512 false false @@ -18,8 +21,6 @@ en-US Library false - true - false @@ -49,7 +50,7 @@ false - win10-x64 + win-x64 $(DefineConstants);_WINDOWS @@ -57,13 +58,7 @@ $(DefineConstants);_LINUX - net6.0-windows - true - true - - - - net6.0-windows + $(TargetFramework)-windows true true @@ -90,10 +85,10 @@ false - + $(OutputPath)\..\..\..\test\test_dependencies - + all runtime @@ -132,27 +127,12 @@ - + dll - - exe - - v4.8 - - - + - - - - - - $(FrameworkAssembliesPath)System.Drawing.dll - - - @@ -166,4 +146,4 @@ - + \ No newline at end of file diff --git a/src/DocumentationBrowserViewExtension/DocumentationBrowserView.xaml.cs b/src/DocumentationBrowserViewExtension/DocumentationBrowserView.xaml.cs index 75dcee02c63..766261cab34 100644 --- a/src/DocumentationBrowserViewExtension/DocumentationBrowserView.xaml.cs +++ b/src/DocumentationBrowserViewExtension/DocumentationBrowserView.xaml.cs @@ -1,6 +1,7 @@ using System; using System.Diagnostics; using System.IO; +using System.Reflection; using System.Web; using System.Windows; using System.Windows.Controls; @@ -132,16 +133,24 @@ async void InitializeAsync() VirtualFolderPath = string.Empty; try { - if (viewModel.Link != null && !string.IsNullOrEmpty(viewModel.CurrentPackageName)) + //if this node is from a package then we set the virtual host path to the packages docs directory. + if (viewModel.Link != null && !string.IsNullOrEmpty(viewModel.CurrentPackageName) && viewModel.IsOwnedByPackage) { - var absolutePath = Path.GetDirectoryName(HttpUtility.UrlDecode(viewModel.Link.AbsolutePath)); - //We move two levels up so it will be located in same level than the the NodeHelpSharedDocs directory - var imagesLocation = new DirectoryInfo(absolutePath).Parent.Parent.FullName; - //Adds the NodeHelpSharedDocs directory to the path - VirtualFolderPath = Path.Combine(imagesLocation, SharedDocsDirectoryName); + VirtualFolderPath = Path.GetDirectoryName(HttpUtility.UrlDecode(viewModel.Link.AbsolutePath)); } + //if the node is not from a package, then set the virtual host path to the shared docs folder. + else if (viewModel.Link != null && !viewModel.IsOwnedByPackage) + { + VirtualFolderPath = Path.Combine(new FileInfo(Assembly.GetExecutingAssembly().Location).DirectoryName, SharedDocsDirectoryName); + } + //unclear what would cause this. else + { VirtualFolderPath = FallbackDirectoryName; + } + //TODO - the above will not handle the case that a package's images/dyns are located in the shared folder + //we may have to do some inspection of the package docs folder and decide to fallback in some cases, or mark the package + //in some way. } catch (Exception ex) { diff --git a/src/DocumentationBrowserViewExtension/DocumentationBrowserViewExtension.cs b/src/DocumentationBrowserViewExtension/DocumentationBrowserViewExtension.cs index 7e293c1d00a..b56498864e5 100644 --- a/src/DocumentationBrowserViewExtension/DocumentationBrowserViewExtension.cs +++ b/src/DocumentationBrowserViewExtension/DocumentationBrowserViewExtension.cs @@ -208,13 +208,19 @@ private void OnInsertFile(object sender, InsertDocumentationLinkEventArgs e) if (!DynamoSelection.Instance.Selection.Any()) return; - GroupInsertedGraph(existingGroups, e.Name); - DoEvents(); - - // We have selected all the nodes and notes from the inserted graph - // Now is the time to auto layout the inserted nodes - this.DynamoViewModel.GraphAutoLayoutCommand.Execute(null); - this.DynamoViewModel.FitViewCommand.Execute(false); + Dispatcher.CurrentDispatcher.BeginInvoke(() => + { + GroupInsertedGraph(existingGroups, e.Name); + }); + //we want to wait for the new group to be inserted and actually rendered, so we add the layout command + //as a background priority task on the ui dispatcher. + Dispatcher.CurrentDispatcher.BeginInvoke(() => + { + // We have selected all the nodes and notes from the inserted graph + // Now is the time to auto layout the inserted nodes + this.DynamoViewModel.GraphAutoLayoutCommand.Execute(null); + this.DynamoViewModel.FitViewCommand.Execute(false); + },DispatcherPriority.Background); } @@ -522,33 +528,5 @@ public override void Closed() this.documentationBrowserMenuItem.IsChecked = false; } } - - #region helper methods - - /// - /// Force the Dispatcher to empty it's queue - /// - [SecurityPermission(SecurityAction.Demand, Flags = SecurityPermissionFlag.UnmanagedCode)] - public static void DoEvents() - { - var frame = new DispatcherFrame(); - Dispatcher.CurrentDispatcher.Invoke(DispatcherPriority.Background, - new DispatcherOperationCallback(ExitFrame), frame); - Dispatcher.PushFrame(frame); - } - - /// - /// Helper method for DispatcherUtil - /// - /// - /// - private static object ExitFrame(object frame) - { - ((DispatcherFrame)frame).Continue = false; - return null; - } - - #endregion - } } diff --git a/src/DocumentationBrowserViewExtension/DocumentationBrowserViewModel.cs b/src/DocumentationBrowserViewExtension/DocumentationBrowserViewModel.cs index 07dd12fad5d..7bcac36b885 100644 --- a/src/DocumentationBrowserViewExtension/DocumentationBrowserViewModel.cs +++ b/src/DocumentationBrowserViewExtension/DocumentationBrowserViewModel.cs @@ -5,6 +5,7 @@ using System.Reflection; using System.Web; using System.Windows; +using System.Windows.Documents; using Dynamo.Core; using Dynamo.DocumentationBrowser.Properties; using Dynamo.Logging; @@ -84,25 +85,24 @@ private set } private Uri link; - private string graphPath; private string content; - private string currentPackageName; /// - /// Package Name + /// Package Name of the current node for docs display, if this node is from a package. /// - internal string CurrentPackageName - { - get - { - return currentPackageName; - } - set - { - currentPackageName = value; - } - } + internal string CurrentPackageName { get; set; } + /// + /// True if the current node for docs display is owned by a package. + /// + internal bool IsOwnedByPackage { get; set; } + /// + /// Name of the current node's sample dyn for docs display, this is the currently always the node name. + /// + internal string CurrentGraphName { get; set; } + + //path to the current node's sample dyn, usually extracted from the .md file. + internal string GraphPath { get; set; } private MarkdownHandler MarkdownHandlerInstance => markdownHandler ?? (markdownHandler = new MarkdownHandler()); public bool HasContent => !string.IsNullOrWhiteSpace(this.content); @@ -202,25 +202,32 @@ private void HandleLocalResource(OpenDocumentationLinkEventArgs e) try { string targetContent; - string graph; + string graphPath; string graphName; + bool ownedByPackage = false; + string packageName = string.Empty; Uri link; + switch (e) { case OpenNodeAnnotationEventArgs openNodeAnnotationEventArgs: + packageName = openNodeAnnotationEventArgs.PackageName; + ownedByPackage = !string.IsNullOrEmpty(openNodeAnnotationEventArgs.PackageName); + var mdLink = packageManagerDoc.GetAnnotationDoc( openNodeAnnotationEventArgs.MinimumQualifiedName, openNodeAnnotationEventArgs.PackageName); link = string.IsNullOrEmpty(mdLink) ? new Uri(String.Empty, UriKind.Relative) : new Uri(mdLink); - graph = GetGraphLinkFromMDLocation(link); + graphPath = GetGraphLinkFromMDLocation(link, ownedByPackage); targetContent = CreateNodeAnnotationContent(openNodeAnnotationEventArgs); graphName = openNodeAnnotationEventArgs.MinimumQualifiedName; + break; case OpenDocumentationLinkEventArgs openDocumentationLink: link = openDocumentationLink.Link; - graph = GetGraphLinkFromMDLocation(link); + graphPath = GetGraphLinkFromMDLocation(link, false); targetContent = ResourceUtilities.LoadContentFromResources(openDocumentationLink.Link.ToString(), GetType().Assembly); graphName = null; break; @@ -228,7 +235,7 @@ private void HandleLocalResource(OpenDocumentationLinkEventArgs e) default: // Navigate to unsupported targetContent = null; - graph = null; + graphPath = null; link = null; graphName = null; break; @@ -241,8 +248,10 @@ private void HandleLocalResource(OpenDocumentationLinkEventArgs e) else { this.content = targetContent; - this.graphPath = graph; - this.currentPackageName = graphName; + this.GraphPath = graphPath; + IsOwnedByPackage = ownedByPackage; + CurrentPackageName = packageName; + CurrentGraphName = graphName; this.Link = link; } } @@ -264,13 +273,13 @@ private void HandleLocalResource(OpenDocumentationLinkEventArgs e) this.shouldLoadDefaultContent = false; } - private string GetGraphLinkFromMDLocation(Uri link) + private string GetGraphLinkFromMDLocation(Uri link,bool isOwnedByPackage) { if (link == null || link.Equals(new Uri(String.Empty, UriKind.Relative))) return string.Empty; try { - string graphPath = DynamoGraphFromMDFilePath(link.AbsolutePath); - return File.Exists(graphPath) ? graphPath : null; + string gp = DynamoGraphFromMDFilePath(link.AbsolutePath, isOwnedByPackage); + return File.Exists(gp) ? gp : null; } catch (Exception) { @@ -315,7 +324,7 @@ private void OnCurrentMdFileChanged(object sender, FileSystemEventArgs e) var nodeAnnotationArgs = openDocumentationLinkEventArgs as OpenNodeAnnotationEventArgs; this.content = CreateNodeAnnotationContent(nodeAnnotationArgs); this.Link = new Uri(e.FullPath); - this.graphPath = GetGraphLinkFromMDLocation(this.Link); + this.GraphPath = GetGraphLinkFromMDLocation(this.Link,nodeAnnotationArgs.PackageName != string.Empty); } private string CreateNodeAnnotationContent(OpenNodeAnnotationEventArgs e) @@ -427,14 +436,15 @@ internal void InsertGraph() if (raiseInsertGraph != null) { - if (graphPath != null) + if (GraphPath != null) { - var graphName = this.currentPackageName ?? Path.GetFileNameWithoutExtension(graphPath); - raiseInsertGraph(this, new InsertDocumentationLinkEventArgs(graphPath, graphName)); + var graphName = CurrentPackageName ?? Path.GetFileNameWithoutExtension(GraphPath); + raiseInsertGraph(this, new InsertDocumentationLinkEventArgs(GraphPath, graphName)); } else { - raiseInsertGraph(this, new InsertDocumentationLinkEventArgs(Resources.FileNotFoundFailureMessage, DynamoGraphFromMDFilePath(this.Link.AbsolutePath))); + raiseInsertGraph(this, new InsertDocumentationLinkEventArgs(Resources.FileNotFoundFailureMessage, + DynamoGraphFromMDFilePath(this.Link.AbsolutePath,IsOwnedByPackage))); return; } } @@ -443,12 +453,20 @@ internal void InsertGraph() internal delegate void InsertDocumentationLinkEventHandler(object sender, InsertDocumentationLinkEventArgs e); internal event InsertDocumentationLinkEventHandler HandleInsertFile; - private string DynamoGraphFromMDFilePath(string path) + private string DynamoGraphFromMDFilePath(string path, bool IsOwnedByPackage) { path = HttpUtility.UrlDecode(path); - var rootLevelDir = Path.GetDirectoryName(path); - var imagesLocation = Path.Combine(new DirectoryInfo(rootLevelDir).Parent.Parent.FullName, DocumentationBrowserView.SharedDocsDirectoryName); - return Path.Combine(imagesLocation, Path.GetFileNameWithoutExtension(path)) + ".dyn"; + if (!IsOwnedByPackage) + { + + var sharedDocsLocation = Path.Combine(new FileInfo(Assembly.GetExecutingAssembly().Location).DirectoryName, + DocumentationBrowserView.SharedDocsDirectoryName); + return Path.Combine(sharedDocsLocation, Path.GetFileNameWithoutExtension(path)) + ".dyn"; + } + else + { + return Path.Combine(Path.GetDirectoryName(path), Path.GetFileNameWithoutExtension(path)) + ".dyn"; + } } diff --git a/src/Dynamo.All.sln b/src/Dynamo.All.sln index e5b0e4c705b..01c0f093706 100644 --- a/src/Dynamo.All.sln +++ b/src/Dynamo.All.sln @@ -103,8 +103,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DynamoCoreTests", "..\test\ EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FFITarget", "..\test\Engine\FFITarget\FFITarget.csproj", "{C70FE632-5500-4C57-B3D6-9B5574137551}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DynamoCrypto", "DynamoCrypto\DynamoCrypto.csproj", "{96643E77-C786-498C-AAA9-80E449854CE9}" -EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ProtoTestFx", "..\test\Engine\ProtoTestFx\ProtoTestFx.csproj", "{2235F7CA-AB25-4177-92BC-4B574D2D5DF6}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ProtoTest", "..\test\Engine\ProtoTest\ProtoTest.csproj", "{6E1177DB-5E4F-4E2E-82E7-902437E56AED}" @@ -343,10 +341,6 @@ Global {C70FE632-5500-4C57-B3D6-9B5574137551}.Debug|Any CPU.Build.0 = Debug|Any CPU {C70FE632-5500-4C57-B3D6-9B5574137551}.Release|Any CPU.ActiveCfg = Release|Any CPU {C70FE632-5500-4C57-B3D6-9B5574137551}.Release|Any CPU.Build.0 = Release|Any CPU - {96643E77-C786-498C-AAA9-80E449854CE9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {96643E77-C786-498C-AAA9-80E449854CE9}.Debug|Any CPU.Build.0 = Debug|Any CPU - {96643E77-C786-498C-AAA9-80E449854CE9}.Release|Any CPU.ActiveCfg = Release|Any CPU - {96643E77-C786-498C-AAA9-80E449854CE9}.Release|Any CPU.Build.0 = Release|Any CPU {2235F7CA-AB25-4177-92BC-4B574D2D5DF6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {2235F7CA-AB25-4177-92BC-4B574D2D5DF6}.Debug|Any CPU.Build.0 = Debug|Any CPU {2235F7CA-AB25-4177-92BC-4B574D2D5DF6}.Release|Any CPU.ActiveCfg = Release|Any CPU diff --git a/src/DynamoCLI/CommandLineRunner.cs b/src/DynamoCLI/CommandLineRunner.cs index 8b9a26547c0..b10f511bed6 100644 --- a/src/DynamoCLI/CommandLineRunner.cs +++ b/src/DynamoCLI/CommandLineRunner.cs @@ -1,4 +1,4 @@ -īģŋusing System; +using System; using System.Collections; using System.Collections.Generic; using System.IO; @@ -46,7 +46,7 @@ private static XmlDocument RunCommandLineArgs(DynamoModel model, StartupUtils.Co Console.WriteLine("geometryFilePath option is only available when running DynamoWPFCLI, not DynamoCLI"); } - model.HostAnalyticsInfo = cmdLineArgs.AnalyticsInfo; + DynamoModel.HostAnalyticsInfo = cmdLineArgs.AnalyticsInfo; cmdLineArgs.ImportedPaths.ToList().ForEach(path => { diff --git a/src/DynamoCore/Configuration/Configurations.cs b/src/DynamoCore/Configuration/Configurations.cs index fa2a42ea0fd..bd42b49c333 100644 --- a/src/DynamoCore/Configuration/Configurations.cs +++ b/src/DynamoCore/Configuration/Configurations.cs @@ -429,5 +429,12 @@ internal static Dictionary SupportedUnits } #endregion + + #region Notifications Constants + /// + /// Request timeOut for notifications service + /// + public const int NotificationsDefaultTimeOut = 10000; + #endregion } } diff --git a/src/DynamoCore/Configuration/GraphChecksumItem.cs b/src/DynamoCore/Configuration/GraphChecksumItem.cs new file mode 100644 index 00000000000..a00b4538800 --- /dev/null +++ b/src/DynamoCore/Configuration/GraphChecksumItem.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.ObjectModel; +using Dynamo.Core; +using Dynamo.Properties; + +namespace Dynamo.Configuration +{ + /// + /// Represents the stringified version of the nodes connections from a graph + /// + public class GraphChecksumItem + { + public string GraphId { get; set; } + + public string Checksum { get; set; } + } +} diff --git a/src/DynamoCore/Configuration/IPreferences.cs b/src/DynamoCore/Configuration/IPreferences.cs index e3d79c34c9a..7798668f18b 100644 --- a/src/DynamoCore/Configuration/IPreferences.cs +++ b/src/DynamoCore/Configuration/IPreferences.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using Dynamo.Configuration; using Dynamo.Graph.Connectors; namespace Dynamo.Interfaces @@ -146,6 +147,11 @@ public interface IPreferences /// Background preview name /// Active state to set void SetIsBackgroundPreviewActive(string name, bool value); + + /// + /// Return a list of GraphChecksumItems + /// + List GraphChecksumItemsList { get; set; } } /// diff --git a/src/DynamoCore/Configuration/PreferenceSettings.cs b/src/DynamoCore/Configuration/PreferenceSettings.cs index 529585c287e..b21576a294c 100644 --- a/src/DynamoCore/Configuration/PreferenceSettings.cs +++ b/src/DynamoCore/Configuration/PreferenceSettings.cs @@ -6,6 +6,7 @@ using System.Reflection; using System.Xml; using System.Xml.Serialization; +using Autodesk.DesignScript.Runtime; using Dynamo.Core; using Dynamo.Graph.Connectors; using Dynamo.Interfaces; @@ -68,6 +69,7 @@ internal readonly static Lazy private bool isTimeStampIncludedInExportFilePath; private bool isCreatedFromValidFile = true; private string backupLocation; + private bool isMLAutocompleteTOUApproved; #region Constants /// @@ -464,6 +466,11 @@ public bool DisableTrustWarnings /// private List trustedLocations { get; set; } = new List(); + /// + /// Return a list of GraphChecksumItems + /// + public List GraphChecksumItemsList { get; set; } + // This function is used to deserialize the trusted locations manually // so that the TrustedLocation propertie's setter does not need to be public. private List DeserializeTrustedLocations(XmlNode preferenceSettingsElement) @@ -619,6 +626,15 @@ public string PythonTemplateFilePath /// public bool EnableNodeAutoComplete { get; set; } + /// + /// PolyCurve normal and direction behavior has been made predictable in Dynamo 3.0 and has therefore changed. + /// This defines whether legacy (pre-3.0) PolyCurve behavior is selected by default. + /// This flag can be overridden by individual workspaces that have the EnableLegacyPolyCurveBehavior flag defined. + /// Note: For internal use only and will be removed in a future version of Dynamo. + /// + [IsObsolete("This property will be removed in a future version of Dynamo.")] + public bool DefaultEnableLegacyPolyCurveBehavior { get; set; } + /// /// This defines if user wants to hide the nodes below a specific confidenc level. /// @@ -687,6 +703,21 @@ public bool EnableStaticSplashScreen } } + /// + /// This defines if the user is agree to the ML Automcomplete Terms of Use + /// + public bool IsMLAutocompleteTOUApproved + { + get + { + return isMLAutocompleteTOUApproved; + } + set + { + isMLAutocompleteTOUApproved = value; + } + } + /// /// Engine used by default for new Python script and string nodes. If not empty, this takes precedence over any system settings. /// @@ -841,6 +872,12 @@ public string IronPythonResolveTargetVersion #region Dynamo Player and Generative Design settings + /// + /// Enable legacy behavior for Dynamo Player to allow renamed Watch nodes to be seen as graph output. + /// This flag is for use in the 2024 product release year and can removed for 2025 + /// + public bool EnableDynamoPlayerRenamedWatchAsOutput { get; set; } + /// /// Collections of folders used by individual Dynamo Player or Generative Design as entry points. /// @@ -902,6 +939,7 @@ public PreferenceSettings() IsIronPythonDialogDisabled = false; ShowTabsAndSpacesInScriptEditor = false; EnableNodeAutoComplete = true; + DefaultEnableLegacyPolyCurveBehavior = true; HideNodesBelowSpecificConfidenceLevel = false; MLRecommendationConfidenceLevel = 10; MLRecommendationNumberOfResults = 10; @@ -913,8 +951,11 @@ public PreferenceSettings() ViewExtensionSettings = new List(); GroupStyleItemsList = new List(); ReadNotificationIds = new List(); + EnableDynamoPlayerRenamedWatchAsOutput = false; DynamoPlayerFolderGroups = new List(); backupLocation = string.Empty; + GraphChecksumItemsList = new List(); + isMLAutocompleteTOUApproved = false; } /// @@ -994,7 +1035,6 @@ public static PreferenceSettings Load(string filePath) return new PreferenceSettings() { isCreatedFromValidFile = false }; } } - settings.CustomPackageFolders = settings.CustomPackageFolders.Distinct().ToList(); settings.GroupStyleItemsList = settings.GroupStyleItemsList.GroupBy(entry => entry.Name).Select(result => result.First()).ToList(); MigrateStdLibTokenToBuiltInToken(settings); diff --git a/src/DynamoCore/Core/IDSDKManager.cs b/src/DynamoCore/Core/IDSDKManager.cs index 5b5d7cc7fbf..b3411d11d78 100644 --- a/src/DynamoCore/Core/IDSDKManager.cs +++ b/src/DynamoCore/Core/IDSDKManager.cs @@ -10,7 +10,7 @@ namespace Dynamo.Core /// /// The class to provide auth APIs for IDSDK related methods. /// - public class IDSDKManager : IOAuth2AuthProvider, IOAuth2AccessTokenProvider + public class IDSDKManager : IOAuth2AuthProvider, IOAuth2AccessTokenProvider, IDisposable { /// /// Used by the auth provider to request authentication. @@ -228,8 +228,10 @@ private bool Initialize() } bool ret = GetClientIDAndServer(out idsdk_server server, out string client_id); - if (ret) + if (ret) { + Client.LogoutCompleteEvent += AuthCompleteEventHandler; + Client.LoginCompleteEvent += AuthCompleteEventHandler; ret = SetProductConfigs("Dynamo", server, client_id); Client.SetServer(server); return ret; @@ -253,6 +255,11 @@ private bool Deinitialize() } return false; } + public void Dispose() + { + Client.LoginCompleteEvent -= AuthCompleteEventHandler; + Client.LogoutCompleteEvent -= AuthCompleteEventHandler; + } private bool GetClientIDAndServer(out idsdk_server server, out string client_id) { server = idsdk_server.IDSDK_PRODUCTION_SERVER; @@ -273,6 +280,12 @@ private bool GetClientIDAndServer(out idsdk_server server, out string client_id) } return !string.IsNullOrEmpty(client_id); } + + // Event handler for LogoutCompleteEvent and LoginCompleteEvent that is thrown whenever the user's auth state changes. + private void AuthCompleteEventHandler(object sender, Client.TypedEventArgs e) + { + OnLoginStateChanged(LoginState); + } #endregion } } diff --git a/src/DynamoCore/DynamoCore.csproj b/src/DynamoCore/DynamoCore.csproj index c53292d0eb3..c7d68ccebc2 100644 --- a/src/DynamoCore/DynamoCore.csproj +++ b/src/DynamoCore/DynamoCore.csproj @@ -19,7 +19,7 @@ - + @@ -27,15 +27,15 @@ - - - + + + - + - + @@ -111,31 +111,32 @@ $(PkgDynamoVisualProgramming_LibG_229_0_0)\tools\libg_locale - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + @@ -169,15 +170,15 @@ - + - + - + - + diff --git a/src/DynamoCore/Engine/EngineController.cs b/src/DynamoCore/Engine/EngineController.cs index 78d7f984753..63b9b665a95 100644 --- a/src/DynamoCore/Engine/EngineController.cs +++ b/src/DynamoCore/Engine/EngineController.cs @@ -1,7 +1,6 @@ using System; using System.Collections.Generic; using System.Linq; -using System.Runtime.Serialization; using Dynamo.Engine.CodeCompletion; using Dynamo.Engine.CodeGeneration; using Dynamo.Engine.NodeToCode; @@ -10,6 +9,7 @@ using Dynamo.Graph.Workspaces; using Dynamo.Logging; using Dynamo.Scheduler; +using Dynamo.Utilities; using ProtoCore.AST.AssociativeAST; using ProtoCore.DSASM.Mirror; using ProtoCore.Mirror; @@ -44,6 +44,11 @@ public class EngineController : LogSourceBase, IAstNodeContainer, IDisposable /// internal static event Action VMLibrariesReset; + /// + /// Dynamo version in which the current workspace was last created or modified. + /// + internal Version CurrentWorkspaceVersion { get; set; } + /// /// This event is fired when is completed. /// @@ -153,6 +158,8 @@ public EngineController(LibraryServices libraryServices, string geometryFactoryF syncDataManager = new SyncDataManager(); VerboseLogging = verboseLogging; + + CurrentWorkspaceVersion = AssemblyHelper.GetDynamoVersion(); } /// @@ -523,7 +530,7 @@ internal void ReconcileTraceDataAndNotify() throw new ObjectDisposedException("EngineController"); } - var callsiteToOrphanMap = new Dictionary>(); + var callsiteToOrphanMap = new Dictionary>(); foreach (var cs in liveRunnerServices.RuntimeCore.RuntimeData.CallsiteCache.Values) { var orphanedSerializables = cs.GetOrphanedSerializables().ToList(); @@ -673,11 +680,11 @@ internal bool PreCompileCodeBlock(ParseParam parseParams) internal class TraceReconciliationEventArgs : EventArgs { /// - /// A list of ISerializable items. + /// A list of string items. /// - public Dictionary> CallsiteToOrphanMap { get; private set; } + public Dictionary> CallsiteToOrphanMap { get; private set; } - public TraceReconciliationEventArgs(Dictionary> callsiteToOrphanMap) + public TraceReconciliationEventArgs(Dictionary> callsiteToOrphanMap) { CallsiteToOrphanMap = callsiteToOrphanMap; } @@ -685,6 +692,6 @@ public TraceReconciliationEventArgs(Dictionary> callsi public interface ITraceReconciliationProcessor { - void PostTraceReconciliation(Dictionary> orphanedSerializables); + void PostTraceReconciliation(Dictionary> orphanedSerializables); } } diff --git a/src/DynamoCore/Extensions/ReadyParams.cs b/src/DynamoCore/Extensions/ReadyParams.cs index bf0a25c58ab..8de32c8fe06 100644 --- a/src/DynamoCore/Extensions/ReadyParams.cs +++ b/src/DynamoCore/Extensions/ReadyParams.cs @@ -1,4 +1,4 @@ -īģŋusing System; +using System; using System.Collections.Generic; using System.ComponentModel; using Dynamo.Graph.Workspaces; @@ -78,7 +78,7 @@ public virtual ICommandExecutive CommandExecutive /// /// HostInfo object, Useful to determine what host context Dynamo is running in. /// - internal HostAnalyticsInfo HostInfo => dynamoModel.HostAnalyticsInfo; + internal HostAnalyticsInfo HostInfo => DynamoModel.HostAnalyticsInfo; /// diff --git a/src/DynamoCore/Extensions/StartupParams.cs b/src/DynamoCore/Extensions/StartupParams.cs index 3820c74ca7d..033a800e4f5 100644 --- a/src/DynamoCore/Extensions/StartupParams.cs +++ b/src/DynamoCore/Extensions/StartupParams.cs @@ -120,7 +120,7 @@ internal StartupParams(DynamoModel dynamoModel) pathManager = dynamoModel.PathManager; libraryLoader = new ExtensionLibraryLoader(dynamoModel); customNodeManager = dynamoModel.CustomNodeManager; - dynamoVersion = new Version(dynamoModel.Version); + dynamoVersion = new Version(DynamoModel.Version); preferences = dynamoModel.PreferenceSettings; linterManager = dynamoModel.LinterManager; IsGeometryLibraryLoaded = dynamoModel.IsASMLoaded; diff --git a/src/DynamoCore/Graph/Nodes/NodeCategories.cs b/src/DynamoCore/Graph/Nodes/NodeCategories.cs index 54c06acdd8b..47f94374d94 100644 --- a/src/DynamoCore/Graph/Nodes/NodeCategories.cs +++ b/src/DynamoCore/Graph/Nodes/NodeCategories.cs @@ -1,4 +1,4 @@ -īģŋusing System; +using System; using System.Collections.Generic; using System.IO; using System.Linq; @@ -7,7 +7,6 @@ using System.Xml; using Dynamo.Configuration; using Dynamo.Engine; -using Dynamo.Graph.Nodes.CustomNodes; using Dynamo.Library; using ProtoCore; @@ -282,7 +281,7 @@ internal static string GetDocumentXmlPath(XmlDocument document) /// Returns a dictionary of deserialized node-data-list pairs /// loaded from the given XmlDocument. internal static IEnumerable>> - LoadTraceDataFromXmlDocument(XmlDocument document) + LoadTraceDataFromXmlDocument(XmlDocument document, out bool containsLegacyTraceData) { if (document == null) throw new ArgumentNullException("document"); @@ -301,7 +300,10 @@ where childNode.Name.Equals(sessionXmlTagName) var loadedData = new Dictionary>(); if (!query.Any()) // There's no data, return empty dictionary. + { + containsLegacyTraceData = false; return loadedData; + } XmlElement sessionElement = query.ElementAt(0); foreach (XmlElement nodeElement in sessionElement.ChildNodes) @@ -313,14 +315,12 @@ where childNode.Name.Equals(sessionXmlTagName) var callsiteId = string.Empty; if (child.HasAttribute(Configurations.CallSiteID)) { - callsiteId = child.GetAttribute(Configurations.CallSiteID); + containsLegacyTraceData = true; + return loadedData; } - var traceData = child.InnerText; - callsiteTraceData.Add(new CallSite.RawTraceData(callsiteId, traceData)); } - loadedData.Add(guid, callsiteTraceData); } - + containsLegacyTraceData = false; return loadedData; } diff --git a/src/DynamoCore/Graph/Nodes/NodeInputData.cs b/src/DynamoCore/Graph/Nodes/NodeInputData.cs index 3b572da1e21..e0a7ce8b617 100644 --- a/src/DynamoCore/Graph/Nodes/NodeInputData.cs +++ b/src/DynamoCore/Graph/Nodes/NodeInputData.cs @@ -127,7 +127,7 @@ public NodeInputTypes Type /// The index of the selected item. /// [JsonProperty(NullValueHandling = NullValueHandling.Ignore)] - public int SelectedIndex { get; set; } + public int? SelectedIndex { get; set; } private static Dictionary dotNetTypeToNodeInputType = new Dictionary { diff --git a/src/DynamoCore/Graph/Workspaces/CustomNodeWorkspaceModel.cs b/src/DynamoCore/Graph/Workspaces/CustomNodeWorkspaceModel.cs index cc3dc6bd1ab..add23d7f767 100644 --- a/src/DynamoCore/Graph/Workspaces/CustomNodeWorkspaceModel.cs +++ b/src/DynamoCore/Graph/Workspaces/CustomNodeWorkspaceModel.cs @@ -4,7 +4,6 @@ using System.Diagnostics; using System.IO; using System.Linq; -using System.Xml; using Dynamo.Engine; using Dynamo.Graph.Annotations; using Dynamo.Graph.Nodes; @@ -315,23 +314,5 @@ public override void Save(string newPath, bool isBackup = false, EngineControlle base.Save(newPath, isBackup, engine); } - - [Obsolete("Method will be deprecated in Dynamo 3.0.")] - protected override bool PopulateXmlDocument(XmlDocument document) - { - if (!base.PopulateXmlDocument(document)) - return false; - - var root = document.DocumentElement; - if (root == null) - return false; - - var guid = CustomNodeDefinition != null ? CustomNodeDefinition.FunctionId : Guid.NewGuid(); - root.SetAttribute("ID", guid.ToString()); - root.SetAttribute("Description", Description); - root.SetAttribute("Category", Category); - - return true; - } } } diff --git a/src/DynamoCore/Graph/Workspaces/HomeWorkspaceModel.cs b/src/DynamoCore/Graph/Workspaces/HomeWorkspaceModel.cs index 3234073dc57..fece34b574f 100644 --- a/src/DynamoCore/Graph/Workspaces/HomeWorkspaceModel.cs +++ b/src/DynamoCore/Graph/Workspaces/HomeWorkspaceModel.cs @@ -1,12 +1,10 @@ using System; using System.Collections.Generic; using System.Diagnostics; -using System.Globalization; using System.Linq; -using System.Runtime.Serialization; -using System.Xml; using Dynamo.Core; using Dynamo.Engine; +using Dynamo.Events; using Dynamo.Extensions; using Dynamo.Graph.Annotations; using Dynamo.Graph.Nodes; @@ -125,6 +123,25 @@ public Uri GraphDocumentationURL } } + private bool? enableLegacyPolyCurveBehavior; + /// + /// PolyCurve normal and direction behavior has been made predictable in Dynamo 3.0 and has therefore changed. + /// This reflects whether legacy (pre-3.0) PolyCurve behavior is selected either in preference settings or in the workspace. + /// A workspace setting if exists, overrides the default preference setting. + /// + [JsonProperty] + internal bool? EnableLegacyPolyCurveBehavior + { + get { return enableLegacyPolyCurveBehavior; } + set + { + if(value == null) return; + + enableLegacyPolyCurveBehavior = value; + WorkspaceEvents.OnWorkspaceSettingsChanged(enableLegacyPolyCurveBehavior.GetValueOrDefault()); + } + } + /// /// Workspace thumbnail as Base64 string. @@ -644,24 +661,7 @@ internal void StopPeriodicEvaluation() } #endregion - - [Obsolete("Method will be deprecated in Dynamo 3.0.")] - protected override bool PopulateXmlDocument(XmlDocument document) - { - if (!base.PopulateXmlDocument(document)) - return false; - - var root = document.DocumentElement; - if (root == null) - return false; - - root.SetAttribute("RunType", RunSettings.RunType.ToString()); - root.SetAttribute("RunPeriod", RunSettings.RunPeriod.ToString(CultureInfo.InvariantCulture)); - root.SetAttribute("HasRunWithoutCrash", HasRunWithoutCrash.ToString(CultureInfo.InvariantCulture)); - - return true; - } - + private void PulseMakerRunStarted() { var nodesToUpdate = Nodes.Where(n => n.CanUpdatePeriodically); @@ -737,7 +737,7 @@ private void OnUpdateGraphCompleted(AsyncTask task) // Runtime warnings take precedence over build warnings. foreach (var warning in updateTask.RuntimeWarnings) { - var message = string.Join(Environment.NewLine, warning.Value.Select(w => w.Message)); + var message = string.Join(Environment.NewLine + Environment.NewLine, warning.Value.Select(w => w.Message)); warnings.Add(warning.Key, message); } @@ -941,13 +941,13 @@ private void OnPreviewGraphCompleted(AsyncTask asyncTask) #endregion /// - /// Returns a list of ISerializable items which exist in the preloaded + /// Returns a list of string items which exist in the preloaded /// trace data but do not exist in the current CallSite data. /// /// - internal IList GetOrphanedSerializablesAndClearHistoricalTraceData() + internal IList GetOrphanedSerializablesAndClearHistoricalTraceData() { - var orphans = new List(); + var orphans = new List(); if (historicalTraceData == null) return orphans; diff --git a/src/DynamoCore/Graph/Workspaces/SerializationConverters.cs b/src/DynamoCore/Graph/Workspaces/SerializationConverters.cs index 4e8776cd52b..4fa4b7dda3d 100644 --- a/src/DynamoCore/Graph/Workspaces/SerializationConverters.cs +++ b/src/DynamoCore/Graph/Workspaces/SerializationConverters.cs @@ -522,8 +522,8 @@ public override object ReadJson(JsonReader reader, Type objectType, object exist var name = obj["Name"].Value(); var elementResolver = obj["ElementResolver"].ToObject(serializer); - var nmc = (NodeReadConverter)serializer.Converters.First(c => c is NodeReadConverter); - nmc.ElementResolver = elementResolver; + var nrc = (NodeReadConverter)serializer.Converters.First(c => c is NodeReadConverter); + nrc.ElementResolver = elementResolver; var nodes = obj["Nodes"].ToObject>(serializer); @@ -679,27 +679,38 @@ public override object ReadJson(JsonReader reader, Type objectType, object exist #region Restore trace data // Trace Data Dictionary> loadedTraceData = new Dictionary>(); + bool containsLegacyTraceData = false; // Restore trace data if bindings are present in json if (obj["Bindings"] != null && obj["Bindings"].Children().Count() > 0) { - JEnumerable bindings = obj["Bindings"].Children(); + var wrc = serializer.Converters.First(c => c is WorkspaceReadConverter) as WorkspaceReadConverter; - // Iterate through bindings to extract nodeID's and bindingData (callsiteId & traceData) - foreach (JToken entity in bindings) + if (wrc.engine.CurrentWorkspaceVersion < new Version(3, 0, 0)) { - Guid nodeId = Guid.Parse(entity["NodeId"].ToString()); - string bindingString = entity["Binding"].ToString(); - - // Key(callsiteId) : Value(traceData) - Dictionary bindingData = JsonConvert.DeserializeObject>(bindingString); - List callsiteTraceData = new List(); + containsLegacyTraceData = true; + } + else + { + JEnumerable bindings = obj["Bindings"].Children(); - foreach (KeyValuePair pair in bindingData) + // Iterate through bindings to extract nodeID's and bindingData (callsiteId & traceData) + foreach (JToken entity in bindings) { - callsiteTraceData.Add(new CallSite.RawTraceData(pair.Key, pair.Value)); - } + Guid nodeId = Guid.Parse(entity["NodeId"].ToString()); + string bindingString = entity["Binding"].ToString(); - loadedTraceData.Add(nodeId, callsiteTraceData); + // Key(callsiteId) : Value(traceData) + Dictionary bindingData = + JsonConvert.DeserializeObject>(bindingString); + List callsiteTraceData = new List(); + + foreach (KeyValuePair pair in bindingData) + { + callsiteTraceData.Add(new CallSite.RawTraceData(pair.Key, pair.Value)); + } + + loadedTraceData.Add(nodeId, callsiteTraceData); + } } } #endregion @@ -717,11 +728,15 @@ public override object ReadJson(JsonReader reader, Type objectType, object exist Enumerable.Empty(), elementResolver, info, verboseLogging, isTestMode, linterManager); + // EnableLegacyPolyCurveBehavior + var enable = obj[nameof(HomeWorkspaceModel.EnableLegacyPolyCurveBehavior)]; + homeWorkspace.EnableLegacyPolyCurveBehavior = enable?.Value(); + // Thumbnail if (obj.TryGetValue(nameof(HomeWorkspaceModel.Thumbnail), StringComparison.OrdinalIgnoreCase, out JToken thumbnail)) homeWorkspace.Thumbnail = thumbnail.ToString(); - // GraphDocumentaionLink + // GraphDocumentationLink if (obj.TryGetValue(nameof(HomeWorkspaceModel.GraphDocumentationURL), StringComparison.OrdinalIgnoreCase, out JToken helpLink)) { if (Uri.TryCreate(helpLink.ToString(), UriKind.Absolute, out Uri uri)) @@ -734,6 +749,7 @@ public override object ReadJson(JsonReader reader, Type objectType, object exist // If there is a active linter serialized in the graph we set it to the active linter else set the default None. SetActiveLinter(obj); + ws = homeWorkspace; } @@ -742,7 +758,9 @@ public override object ReadJson(JsonReader reader, Type objectType, object exist ws.ExternalFiles = externalFiles; if (obj.TryGetValue(nameof(WorkspaceModel.Author), StringComparison.OrdinalIgnoreCase, out JToken author)) ws.Author = author.ToString(); - + + ws.ContainsLegacyTraceData = containsLegacyTraceData; + return ws; } @@ -850,7 +868,7 @@ public override void WriteJson(JsonWriter writer, object value, JsonSerializer s // Element resolver writer.WritePropertyName("ElementResolver"); serializer.Serialize(writer, ws.ElementResolver); - + // Inputs writer.WritePropertyName("Inputs"); // Find nodes which are inputs and get their inputData if its not null. @@ -920,6 +938,10 @@ public override void WriteJson(JsonWriter writer, object value, JsonSerializer s if (!isCustomNode && ws is HomeWorkspaceModel hws) { + // EnableLegacyPolyCurveBehavior + writer.WritePropertyName(nameof(HomeWorkspaceModel.EnableLegacyPolyCurveBehavior)); + serializer.Serialize(writer, hws.EnableLegacyPolyCurveBehavior); + // Thumbnail writer.WritePropertyName(nameof(HomeWorkspaceModel.Thumbnail)); writer.WriteValue(hws.Thumbnail); diff --git a/src/DynamoCore/Graph/Workspaces/WorkspaceModel.cs b/src/DynamoCore/Graph/Workspaces/WorkspaceModel.cs index b31a1025553..f11681ff4fe 100644 --- a/src/DynamoCore/Graph/Workspaces/WorkspaceModel.cs +++ b/src/DynamoCore/Graph/Workspaces/WorkspaceModel.cs @@ -8,7 +8,6 @@ using System.Reflection; using System.Threading; using System.Xml; -using Dynamo.Configuration; using Dynamo.Core; using Dynamo.Engine; using Dynamo.Engine.CodeGeneration; @@ -233,6 +232,11 @@ internal int CurrentPasteOffset } } + /// + /// This is true only if the workspace contains legacy SOAP formatted binding data. + /// + internal bool ContainsLegacyTraceData { get; set; } + internal bool ScaleFactorChanged = false; /// @@ -1280,9 +1284,6 @@ public Rect2D Rect get { return new Rect2D(x, y, width, height); } } - //TODO(Steve): This probably isn't needed inside of WorkspaceModel -- MAGN-5714 - internal Version WorkspaceVersion { get; set; } - /// /// Implements property. /// @@ -1332,7 +1333,6 @@ internal set WorkspaceEvents.OnWorkspaceSettingsChanged(scaleFactor); } } - #endregion #region constructors @@ -1373,7 +1373,6 @@ protected WorkspaceModel( IsReadOnly = DynamoUtilities.PathHelper.IsReadOnlyPath(fileName); LastSaved = DateTime.Now; - WorkspaceVersion = AssemblyHelper.GetDynamoVersion(); undoRecorder = new UndoRedoRecorder(this); NodeFactory = factory; @@ -2013,7 +2012,7 @@ internal bool IsValidForFDX { get { - return !HasErrors && !HasNoneGeometryRelatedWarnings; + return Nodes.Count() > 1 && !HasErrors && !HasNoneGeometryRelatedWarnings; } } @@ -2063,94 +2062,6 @@ private void SerializeElementResolver(XmlDocument xmlDoc) root.AppendChild(mapElement); } - [Obsolete("Method will be deprecated in Dynamo 3.0.")] - protected virtual bool PopulateXmlDocument(XmlDocument xmlDoc) - { - try - { - var root = xmlDoc.DocumentElement; - root.SetAttribute("Version", WorkspaceVersion.ToString()); - root.SetAttribute("X", X.ToString(CultureInfo.InvariantCulture)); - root.SetAttribute("Y", Y.ToString(CultureInfo.InvariantCulture)); - root.SetAttribute("ScaleFactor", ScaleFactor.ToString(CultureInfo.InvariantCulture)); - root.SetAttribute("Name", Name); - root.SetAttribute("Description", Description); - - SerializeElementResolver(xmlDoc); - - var elementList = xmlDoc.CreateElement("Elements"); - //write the root element - root.AppendChild(elementList); - - foreach (var dynEl in Nodes.Select(el => el.Serialize(xmlDoc, SaveContext.Save))) - elementList.AppendChild(dynEl); - - //write only the output connectors - var connectorList = xmlDoc.CreateElement("Connectors"); - //write the root element - root.AppendChild(connectorList); - - foreach (var el in Nodes) - { - foreach (var port in el.OutPorts) - { - foreach ( - var c in - port.Connectors.Where(c => c.Start != null && c.End != null)) - { - var connector = xmlDoc.CreateElement(c.GetType().ToString()); - connectorList.AppendChild(connector); - connector.SetAttribute("start", c.Start.Owner.GUID.ToString()); - connector.SetAttribute("start_index", c.Start.Index.ToString()); - connector.SetAttribute("end", c.End.Owner.GUID.ToString()); - connector.SetAttribute("end_index", c.End.Index.ToString()); - connector.SetAttribute(nameof(ConnectorModel.IsHidden), c.IsHidden.ToString()); - - if (c.End.PortType == PortType.Input) - connector.SetAttribute("portType", "0"); - } - } - } - - //save the notes - var noteList = xmlDoc.CreateElement("Notes"); //write the root element - root.AppendChild(noteList); - foreach (var n in Notes) - { - var note = n.Serialize(xmlDoc, SaveContext.Save); - noteList.AppendChild(note); - } - - //save the annotation - var annotationList = xmlDoc.CreateElement("Annotations"); - root.AppendChild(annotationList); - foreach (var n in annotations) - { - var annotation = n.Serialize(xmlDoc, SaveContext.Save); - annotationList.AppendChild(annotation); - } - - //save the presets into the dyn file as a seperate element on the root - var presetsElement = xmlDoc.CreateElement("Presets"); - root.AppendChild(presetsElement); - foreach (var preset in Presets) - { - var presetState = preset.Serialize(xmlDoc, SaveContext.Save); - presetsElement.AppendChild(presetState); - } - - OnSaving(xmlDoc); - - return true; - } - catch (Exception ex) - { - Log(ex.Message); - Log(ex.StackTrace); - return false; - } - } - internal void SendModelEvent(Guid modelGuid, string eventName, int value) { var retrievedModel = GetModelInternal(modelGuid); diff --git a/src/DynamoCore/Logging/AnalyticsService.cs b/src/DynamoCore/Logging/AnalyticsService.cs index 9af4b8333c7..500796725dc 100644 --- a/src/DynamoCore/Logging/AnalyticsService.cs +++ b/src/DynamoCore/Logging/AnalyticsService.cs @@ -1,4 +1,3 @@ -using Dynamo.Graph.Workspaces; using Dynamo.Models; using Autodesk.Analytics.ADP; using Autodesk.Analytics.Core; @@ -9,49 +8,29 @@ namespace Dynamo.Logging /// /// Utility class to support analytics tracking. /// - class AnalyticsService + internal class AnalyticsService { // Use the Analytics.Core interface so that we do not have to load the ADP assembly at this time. private static IAnalyticsUI adpAnalyticsUI; /// - /// Starts the client when DynamoModel is created. This method initializes + /// Indicates that we don't want to shut down analytics when DynamoModel shuts down. + /// Sometimes we want to keep Analytics service running even when we don't have a DynamoModel started. + /// + internal static bool KeepAlive { get; set; } + + /// + /// Starts the Analytics client. This method initializes /// the Analytics service and application life cycle start is tracked. /// - /// DynamoModel - /// Analytics won't be started if IsHeadless, but ADP may be loaded to be disabled. - /// Analytics won't be started if isTestMode, ADP will not be loaded. - internal static void Start(DynamoModel model, bool isHeadless, bool isTestMode) + internal static void Start() { - if (isTestMode) - { - if (Analytics.DisableAnalytics) - { - model.Logger.Log("Incompatible configuration: [IsTestMode] and [Analytics disabled] "); - } - return; - } - - if (isHeadless) - { - return; - } - // Initialize the concrete class only when we initialize the Service. // This will also load the Analytics.Net.ADP assembly // We must initialize the ADPAnalyticsUI instance before the Analytics.Start call. adpAnalyticsUI = new ADPAnalyticsUI(); - Analytics.Start(new DynamoAnalyticsClient(model)); - model.WorkspaceAdded += OnWorkspaceAdded; - } - - static void OnWorkspaceAdded(WorkspaceModel obj) - { - if (obj is CustomNodeWorkspaceModel) - Analytics.TrackScreenView("CustomWorkspace"); - else - Analytics.TrackScreenView("Workspace"); + Analytics.Start(new DynamoAnalyticsClient(DynamoModel.HostAnalyticsInfo)); } /// @@ -99,7 +78,10 @@ internal static bool IsADPAvailable() /// internal static void ShutDown() { - Analytics.ShutDown(); + if (!KeepAlive) + { + Analytics.ShutDown(); + } } /// @@ -113,6 +95,7 @@ internal static void ShowADPConsentDialog(IntPtr? host) adpAnalyticsUI.ShowOptInDialog(System.Threading.Thread.CurrentThread.CurrentUICulture.Name, false, host); } } + internal static string GetUserIDForSession() { if (Analytics.client is DynamoAnalyticsClient dac) diff --git a/src/DynamoCore/Logging/DynamoAnalyticsClient.cs b/src/DynamoCore/Logging/DynamoAnalyticsClient.cs index 7c72eff1b74..0e8471136ce 100644 --- a/src/DynamoCore/Logging/DynamoAnalyticsClient.cs +++ b/src/DynamoCore/Logging/DynamoAnalyticsClient.cs @@ -1,9 +1,10 @@ using System; using System.Diagnostics; +using System.Threading; +using System.Threading.Tasks; using Autodesk.Analytics.ADP; using Autodesk.Analytics.Core; using Autodesk.Analytics.Events; -using Dynamo.Interfaces; using Dynamo.Models; using Microsoft.Win32; @@ -17,7 +18,7 @@ public DynamoAnalyticsSession() SessionId = Guid.NewGuid().ToString(); } - public void Start(DynamoModel model) + public void Start() { StabilityCookie.Startup(); } @@ -68,8 +69,11 @@ public static String GetUserID() /// /// Dynamo specific implementation of IAnalyticsClient /// - class DynamoAnalyticsClient : IAnalyticsClient, IDisposable + internal class DynamoAnalyticsClient : IAnalyticsClient, IDisposable { + private readonly ManualResetEventSlim serviceInitialized = new ManualResetEventSlim(false); + private readonly object trackEventLockObj = new object(); + /// /// A dummy IDisposable class /// @@ -84,8 +88,6 @@ public void Dispose() { } private const string ANALYTICS_PROPERTY = "UA-52186525-1"; #endif - private readonly IPreferences preferences = null; - public static IDisposable Disposable { get { return new Dummy(); } } private readonly ProductInfo product; @@ -107,29 +109,24 @@ public bool ReportingAnalytics } /// - /// Constructs DynamoAnalyticsClient with given DynamoModel + /// Constructs DynamoAnalyticsClient from existing HostAnalyticsInfo /// - /// DynamoModel - public DynamoAnalyticsClient(DynamoModel dynamoModel) + public DynamoAnalyticsClient(HostAnalyticsInfo hostAnalyticsInfo) { - //Set the preferences, so that we can get live value of analytics - //reporting approved status. - preferences = dynamoModel.PreferenceSettings; - if (Session == null) Session = new DynamoAnalyticsSession(); //Setup Analytics service, and StabilityCookie. - Session.Start(dynamoModel); + Session.Start(); //Dynamo app version. - var appversion = dynamoModel.AppVersion; + var appversion = DynamoModel.AppVersion; - var hostName = string.IsNullOrEmpty(dynamoModel.HostName) ? "Dynamo" : dynamoModel.HostName; + var hostName = string.IsNullOrEmpty(hostAnalyticsInfo.HostName) ? "Dynamo" : hostAnalyticsInfo.HostName; - hostInfo = new HostContextInfo() { ParentId = dynamoModel.HostAnalyticsInfo.ParentId, SessionId = dynamoModel.HostAnalyticsInfo.SessionId }; + hostInfo = new HostContextInfo() { ParentId = hostAnalyticsInfo.ParentId, SessionId = hostAnalyticsInfo.SessionId }; string buildId = String.Empty, releaseId = String.Empty; - if (Version.TryParse(dynamoModel.Version, out Version version)) + if (Version.TryParse(DynamoModel.Version, out Version version)) { buildId = $"{version.Major}.{version.Minor}.{version.Build}"; // BuildId has the following format major.minor.build, ex: 2.5.1 releaseId = $"{version.Major}.{version.Minor}.0"; // ReleaseId has the following format: major.minor.0; ex: 2.5.0 @@ -148,16 +145,9 @@ private void RegisterADPTracker(Service service) } } - /// - /// Starts the client when DynamoModel is created. This method initializes - /// the Analytics service and application life cycle start is tracked. - /// - public void Start() + private void StartInternal() { - // Start Analytics service regardless of optin status. - // Each track event will be enabled/disabled based on the corresponding optin status. - // Ex. ADP will manage optin status internally - if (preferences != null && !Analytics.DisableAnalytics) + if (!Analytics.DisableAnalytics) { //Register trackers var service = Service.Instance; @@ -167,102 +157,214 @@ public void Start() RegisterADPTracker(service); //If not ReportingAnalytics, then set the idle time as infinite so idle state is not recorded. - Service.StartUp(product, new UserInfo(Session.UserId), hostInfo, TimeSpan.FromMinutes(30)); - TrackPreferenceInternal("ReportingAnalytics", "", ReportingAnalytics ? 1 : 0); + Service.StartUp(product, new UserInfo(Session.UserId), hostInfo, TimeSpan.FromMinutes(30)); } + + serviceInitialized.Set(); + } + /// + /// Starts the client when DynamoModel is created. This method initializes + /// the Analytics service and application life cycle start is tracked. + /// + public void Start() + { + // Start Analytics service regardless of optin status. + // Each track event will be enabled/disabled based on the corresponding optin status. + // Ex. ADP will manage optin status internally + Task.Run(() => StartInternal()); + + TrackPreference("ReportingAnalytics", "", ReportingAnalytics ? 1 : 0); } public void ShutDown() { + if (!Analytics.DisableAnalytics) serviceInitialized.Wait(); Dispose(); } public void TrackEvent(Actions action, Categories category, string description, int? value) { - if (!ReportingAnalytics) return; + if (Analytics.DisableAnalytics) return; - var e = AnalyticsEvent.Create(category.ToString(), action.ToString(), description, value); - e.Track(); + Task.Run(() => + { + serviceInitialized.Wait(); + + lock(trackEventLockObj) + { + if (!ReportingAnalytics) return; + + var e = AnalyticsEvent.Create(category.ToString(), action.ToString(), description, value); + e.Track(); + } + }); } public void TrackPreference(string name, string stringValue, int? metricValue) { - if (!ReportingAnalytics) return; + if (Analytics.DisableAnalytics) return; - TrackPreferenceInternal(name, stringValue, metricValue); - } + Task.Run(() => + { + serviceInitialized.Wait(); - private void TrackPreferenceInternal(string name, string stringValue, int? metricValue) - { - var e = AnalyticsEvent.Create(Categories.Preferences.ToString(), name, stringValue, metricValue); - e.Track(); + lock (trackEventLockObj) + { + if (!ReportingAnalytics) return; + + var e = AnalyticsEvent.Create(Categories.Preferences.ToString(), name, stringValue, metricValue); + e.Track(); + } + }); } public void TrackTimedEvent(Categories category, string variable, TimeSpan time, string description = "") { - if (!ReportingAnalytics) return; + if (Analytics.DisableAnalytics) return; - var e = new TimedEvent(time) + Task.Run(() => { - Category = category.ToString(), - VariableName = variable, - Description = description - }; - e.Track(); + serviceInitialized.Wait(); + + lock (trackEventLockObj) + { + if (!ReportingAnalytics) return; + + var e = new TimedEvent(time) + { + Category = category.ToString(), + VariableName = variable, + Description = description + }; + e.Track(); + } + }); } public void TrackScreenView(string viewName) { - if (!ReportingAnalytics) return; + if (Analytics.DisableAnalytics) return; - var e = new ScreenViewEvent(viewName); - e.Track(); + Task.Run(() => + { + serviceInitialized.Wait(); + + lock (trackEventLockObj) + { + if (!ReportingAnalytics) return; + + var e = new ScreenViewEvent(viewName); + e.Track(); + } + }); } public void TrackException(Exception ex, bool isFatal) { - if (!ReportingAnalytics) return; + if (Analytics.DisableAnalytics) return; + + Task.Run(() => + { + serviceInitialized.Wait(); + + lock (trackEventLockObj) + { + if (!ReportingAnalytics) return; - Service.TrackException(ex, isFatal); + Service.TrackException(ex, isFatal); + } + }); } + [Obsolete("Method will become private in Dynamo 4.0, please use CreateTaskTimedEvent")] public IDisposable CreateTimedEvent(Categories category, string variable, string description, int? value) - { - if (!ReportingAnalytics) return Disposable; + { + serviceInitialized.Wait(); - var e = new TimedEvent() + lock (trackEventLockObj) { - Category = category.ToString(), - VariableName = variable, - Description = description, - Value = value - }; - //Timed event does not need startup tracking. - return e; + if (!ReportingAnalytics) return Disposable; + + var e = new TimedEvent() + { + Category = category.ToString(), + VariableName = variable, + Description = description, + Value = value + }; + //Timed event does not need startup tracking. + return e; + } + } + + public Task CreateTaskTimedEvent(Categories category, string variable, string description, int? value) + { + if (Analytics.DisableAnalytics) return Task.FromResult(Disposable); + + return Task.Run(() => CreateTimedEvent(category, variable, description, value)); } + [Obsolete("Property will become private in Dynamo 4.0, please use CreateTaskCommandEvent")] public IDisposable CreateCommandEvent(string name, string description, int? value) { - if (!ReportingAnalytics) return Disposable; + serviceInitialized.Wait(); + + lock (trackEventLockObj) + { + if (!ReportingAnalytics) return Disposable; - var e = new CommandEvent(name) { Description = description, Value = value }; - e.Track(); - return e; + var e = new CommandEvent(name) { Description = description, Value = value }; + e.Track(); + return e; + } + } + + public Task CreateTaskCommandEvent(string name, string description, int? value) + { + if (Analytics.DisableAnalytics) return Task.FromResult(Disposable); + + return Task.Run(() => CreateCommandEvent(name, description, value)); } + public void EndEventTask(Task taskToEnd) + { + if (Analytics.DisableAnalytics) return; + + Task.Run(() => + { + lock(trackEventLockObj) + { + taskToEnd.Wait(); + taskToEnd.Result.Dispose(); + } + }); + } + + [Obsolete("Property will become private in Dynamo 4.0, please use TrackTaskFileOperationEvent")] public IDisposable TrackFileOperationEvent(string filepath, Actions operation, int size, string description) { + serviceInitialized.Wait(); if (!ReportingAnalytics) return Disposable; - var e = new FileOperationEvent() + lock(trackEventLockObj) { - FilePath = filepath, - FileSize = size, - FileAction = FileAction(operation), - Description = description - }; - e.Track(); - return e; + var e = new FileOperationEvent() + { + FilePath = filepath, + FileSize = size, + FileAction = FileAction(operation), + Description = description + }; + e.Track(); + return e; + } + } + + public Task TrackTaskFileOperationEvent(string filepath, Actions operation, int size, string description) + { + if (Analytics.DisableAnalytics) return Task.FromResult(Disposable); + + return Task.Run(() => TrackFileOperationEvent(filepath, operation, size, description)); } private FileOperationEvent.Actions FileAction(Actions operation) diff --git a/src/DynamoCore/Logging/IAnalyticsSession.cs b/src/DynamoCore/Logging/IAnalyticsSession.cs index 6d0fe530914..da823da1ffb 100644 --- a/src/DynamoCore/Logging/IAnalyticsSession.cs +++ b/src/DynamoCore/Logging/IAnalyticsSession.cs @@ -1,5 +1,4 @@ -īģŋusing System; -using Dynamo.Models; +using System; namespace Dynamo.Logging { @@ -21,11 +20,10 @@ public interface IAnalyticsSession : IDisposable string SessionId { get; } /// - /// Starts the session for the given DynamoModel. + /// Starts the session. /// The Session is closed when Dispose() is called. /// - /// DynamoModel - void Start(DynamoModel model); + void Start(); /// /// Returns a logger to record usage. /// diff --git a/src/DynamoCore/Migration/Migration.cs b/src/DynamoCore/Migration/Migration.cs index cfea89aef8d..a3114f13274 100644 --- a/src/DynamoCore/Migration/Migration.cs +++ b/src/DynamoCore/Migration/Migration.cs @@ -517,24 +517,6 @@ internal static Version VersionFromString(string version) return new Version(ver.Major, ver.Minor, ver.Build, 0); } - /// - /// Call this method to obtain the version of current WorkspaceModel. - /// Note that the revision number is dropped as both "0.7.0.1234" - /// should be treated as the same version as "0.7.0.5678", and no file - /// migration should take place. - /// - /// The WorkspaceModel to get the Version from. - /// - /// Returns the Version object representing the workspace - /// version with the revision set to 0. - /// - internal static Version VersionFromWorkspace(WorkspaceModel workspace) - { - // Ignore revision number. - var ver = workspace.WorkspaceVersion; - return new Version(ver.Major, ver.Minor, ver.Build, 0); - } - /// /// Call this method to determine if migration should take place /// for the input DYN/DYF file based on the given version numbers. diff --git a/src/DynamoCore/Models/DynamoModel.cs b/src/DynamoCore/Models/DynamoModel.cs index 31bc7fd8ff2..996e074533b 100644 --- a/src/DynamoCore/Models/DynamoModel.cs +++ b/src/DynamoCore/Models/DynamoModel.cs @@ -8,7 +8,6 @@ using System.IO; using System.Linq; using System.Reflection; -using System.Runtime.Serialization; using System.Threading; using System.Threading.Tasks; using System.Xml; @@ -199,7 +198,7 @@ internal LuceneSearchUtility LuceneUtility /// /// This version of Dynamo. /// - public string Version + public static string Version { get { return DefaultUpdateManager.GetProductVersion().ToString(); } } @@ -218,7 +217,7 @@ public string Version /// /// Host analytics info /// - public HostAnalyticsInfo HostAnalyticsInfo { get; set; } + public static HostAnalyticsInfo HostAnalyticsInfo { get; set; } /// /// Boolean indication of launching Dynamo in service mode, this mode is optimized for minimal launch time, mostly leveraged by CLI or WPF CLI. @@ -288,7 +287,7 @@ public string Version /// /// The application version string for analytics reporting APIs /// - internal virtual string AppVersion + internal static string AppVersion { get { @@ -537,7 +536,7 @@ public interface IStartConfiguration bool NoNetworkMode => false; /// - /// Configuration object that contains host information like Host name, version and session id. + /// Configuration object that contains host information like Host name, parent id and session id. /// HostAnalyticsInfo HostAnalyticsInfo { get; set; } } @@ -695,13 +694,7 @@ protected DynamoModel(IStartConfiguration config) PreferenceSettings = (PreferenceSettings)CreateOrLoadPreferences(config.Preferences); if (PreferenceSettings != null) { - // Setting the locale for Dynamo from loaded Preferences only when - // In a non-in-process integration case (when HostAnalyticsInfo.HostName is unspecified) - // Language is specified, otherwise Default setting means following host locale - if (string.IsNullOrEmpty(HostAnalyticsInfo.HostName) || !PreferenceSettings.Locale.Equals(Configuration.Configurations.SupportedLocaleList.First())) - { - SetUICulture(PreferenceSettings.Locale); - } + SetUICulture(PreferenceSettings.Locale); PreferenceSettings.PropertyChanged += PreferenceSettings_PropertyChanged; PreferenceSettings.MessageLogged += LogMessage; } @@ -740,20 +733,7 @@ protected DynamoModel(IStartConfiguration config) // or the feature flags client for web traffic reason. if (!IsServiceMode && !areAnalyticsDisabledFromConfig && !Analytics.DisableAnalytics) { - // Start the Analytics service only when a session is not present. - // In an integrator host, as splash screen can be closed without shutting down the ViewModel, the analytics service is not stopped. - // So we don't want to start it when splash screen or dynamo window is launched again. - if (Analytics.client == null) - { - AnalyticsService.Start(this, IsHeadless, IsTestMode); - } - else if (Analytics.client is DynamoAnalyticsClient dac) - { - if (dac.Session == null) - { - AnalyticsService.Start(this, IsHeadless, IsTestMode); - } - } + HandleAnalytics(); //run process startup/reading on another thread so we don't block dynamo startup. //if we end up needing to control aspects of dynamo model or view startup that we can't make @@ -1015,6 +995,7 @@ protected DynamoModel(IStartConfiguration config) LogWarningMessageEvents.LogWarningMessage += LogWarningMessage; LogWarningMessageEvents.LogInfoMessage += LogInfoMessage; + DynamoConsoleLogger.LogMessageToDynamoConsole += LogMessageWrapper; StartBackupFilesTimer(); TraceReconciliationProcessor = this; @@ -1031,6 +1012,38 @@ protected DynamoModel(IStartConfiguration config) DynamoReady(new ReadyParams(this)); } + private void HandleAnalytics() + { + if (IsTestMode) + { + if (Analytics.DisableAnalytics) + { + Logger.Log("Incompatible configuration: [IsTestMode] and [Analytics disabled] "); + } + return; + } + + if (IsHeadless) + { + return; + } + + // Start the Analytics service only when a session is not present. + // In an integrator host, as splash screen can be closed without shutting down the ViewModel, the analytics service is not stopped. + // So we don't want to start it when splash screen or dynamo window is launched again. + if (Analytics.client == null) + { + AnalyticsService.Start(); + } + else if (Analytics.client is DynamoAnalyticsClient dac) + { + if (dac.Session == null) + { + AnalyticsService.Start(); + } + } + } + private void SearchModel_ItemProduced(NodeModel node) { ExecuteCommand(new CreateNodeCommand(node, 0, 0, true, true)); @@ -1242,10 +1255,10 @@ private void EngineController_TraceReconcliationComplete(TraceReconciliationEven { Debug.WriteLine("TRACE RECONCILIATION: {0} total serializables were orphaned.", obj.CallsiteToOrphanMap.SelectMany(kvp => kvp.Value).Count()); - // The orphans will come back here as a dictionary of lists of ISerializables jeyed by their callsite id. + // The orphans will come back here as a dictionary of lists of strings keyed by their callsite id. // This dictionary gets redistributed into a dictionary keyed by the workspace id. - var workspaceOrphanMap = new Dictionary>(); + var workspaceOrphanMap = new Dictionary>(); foreach (var ws in Workspaces.OfType()) { @@ -1300,7 +1313,7 @@ private void EngineController_TraceReconcliationComplete(TraceReconciliationEven /// Deals with orphaned serializables. /// /// Collection of orphaned serializables. - public virtual void PostTraceReconciliation(Dictionary> orphanedSerializables) + public virtual void PostTraceReconciliation(Dictionary> orphanedSerializables) { // Override in derived classes to deal with orphaned serializables. } @@ -1426,6 +1439,7 @@ public void Dispose() LogWarningMessageEvents.LogWarningMessage -= LogWarningMessage; LogWarningMessageEvents.LogInfoMessage -= LogInfoMessage; + DynamoConsoleLogger.LogMessageToDynamoConsole -= LogMessageWrapper; foreach (var ws in _workspaces) { ws.Dispose(); @@ -1442,6 +1456,11 @@ public void Dispose() { SearchModel.ItemProduced -= SearchModel_ItemProduced; } + //handle the disposal of IDSDK manager instance for sandbox + if (AuthenticationManager?.AuthProvider is IDSDKManager idsdkProvider) + { + idsdkProvider?.Dispose(); + } } private void InitializeCustomNodeManager() @@ -1615,6 +1634,7 @@ private void InitializeNodeLibrary() DumpLibrarySnapshot(functionGroups); #endif + // Load local custom nodes and locally imported libraries foreach (var path in pathManager.DefinitionDirectories) { @@ -2301,6 +2321,10 @@ private bool OpenJsonFile( var currentHomeSpace = Workspaces.OfType().FirstOrDefault(); currentHomeSpace.UndefineCBNFunctionDefinitions(); + // This is to handle the case of opening a JSON file that does not have a version string + EngineController.CurrentWorkspaceVersion = dynamoPreferences.Version == + null ? AssemblyHelper.GetDynamoVersion() : new Version(dynamoPreferences.Version); + // TODO, QNTM-1108: WorkspaceModel.FromJson does not check a schema and so will not fail as long // as the fileContents are valid JSON, regardless of if all required data is present or not workspace = WorkspaceModel.FromJson( @@ -2317,17 +2341,19 @@ private bool OpenJsonFile( workspace.FileName = string.IsNullOrEmpty(filePath) ? "" : filePath; workspace.FromJsonGraphId = string.IsNullOrEmpty(filePath) ? WorkspaceModel.ComputeGraphIdFromJson(fileContents) : ""; workspace.ScaleFactor = dynamoPreferences.ScaleFactor; + + if (!IsTestMode) + { + if (workspace.ContainsLegacyTraceData) + { + OnRequestNotification(Resources.LegacyTraceDataWarning, true); + } + } - // NOTE: This is to handle the case of opening a JSON file that does not have a version string - // This logic may not be correct, need to decide the importance of versioning early JSON files - string versionString = dynamoPreferences.Version; - if (versionString == null) - versionString = AssemblyHelper.GetDynamoVersion().ToString(); - workspace.WorkspaceVersion = new System.Version(versionString); - - HomeWorkspaceModel homeWorkspace = workspace as HomeWorkspaceModel; - if (homeWorkspace != null) + if (workspace is HomeWorkspaceModel homeWorkspace) { + homeWorkspace.EnableLegacyPolyCurveBehavior ??= PreferenceSettings.Instance.DefaultEnableLegacyPolyCurveBehavior; + homeWorkspace.HasRunWithoutCrash = dynamoPreferences.HasRunWithoutCrash; homeWorkspace.ReCompileCodeBlockNodesForFunctionDefinitions(); @@ -2447,12 +2473,19 @@ private bool OpenXmlHomeWorkspace( { var nodeGraph = NodeGraph.LoadGraphFromXml(xmlDoc, NodeFactory); Guid deterministicId = GuidUtility.Create(GuidUtility.UrlNamespace, workspaceInfo.Name); + + var loadedTraceData = Utils.LoadTraceDataFromXmlDocument(xmlDoc, out var containsLegacyTraceData); + if (!IsTestMode) + { + if (containsLegacyTraceData) OnRequestNotification(Resources.LegacyTraceDataWarning, true); + } + var newWorkspace = new HomeWorkspaceModel( deterministicId, EngineController, Scheduler, NodeFactory, - Utils.LoadTraceDataFromXmlDocument(xmlDoc), + loadedTraceData, nodeGraph.Nodes, nodeGraph.Notes, nodeGraph.Annotations, @@ -2719,8 +2752,24 @@ internal bool CanDumpLibraryToXml(object obj) /// public static void SetUICulture(string locale) { - Thread.CurrentThread.CurrentUICulture = new CultureInfo(locale == "Default" ? "en-US" : locale); - Thread.CurrentThread.CurrentCulture = new CultureInfo(locale == "Default" ? "en-US" : locale); + if (string.IsNullOrWhiteSpace(locale)) return; + + // Setting the locale for Dynamo from loaded Preferences, with Default handled differently + // between a non-in-process integration case (when HostAnalyticsInfo.HostName is unspecified) + // and in-process integration case. In later case, Default setting means following host locale. + if (string.IsNullOrEmpty(HostAnalyticsInfo.HostName)) + { + // Sandbox default to en-US + Thread.CurrentThread.CurrentUICulture = new CultureInfo(locale == "Default" ? "en-US" : locale); + Thread.CurrentThread.CurrentCulture = new CultureInfo(locale == "Default" ? "en-US" : locale); + } + else + { + var defaultCulture = CultureInfo.DefaultThreadCurrentCulture ?? new CultureInfo("en-US"); + // Integration default to DefaultThreadCurrentCulture set by integrator + Thread.CurrentThread.CurrentUICulture = locale == "Default" ? defaultCulture : new CultureInfo(locale); + Thread.CurrentThread.CurrentCulture = locale == "Default" ? defaultCulture : new CultureInfo(locale); + } } /// @@ -3179,7 +3228,7 @@ public void ClearCurrentWorkspace() //don't save the file path CurrentWorkspace.FileName = ""; CurrentWorkspace.HasUnsavedChanges = false; - CurrentWorkspace.WorkspaceVersion = AssemblyHelper.GetDynamoVersion(); + EngineController.CurrentWorkspaceVersion = AssemblyHelper.GetDynamoVersion(); this.LinterManager?.SetDefaultLinter(); diff --git a/src/DynamoCore/Models/DynamoModelEvents.cs b/src/DynamoCore/Models/DynamoModelEvents.cs index 7a76d0379c7..3d5143e9130 100644 --- a/src/DynamoCore/Models/DynamoModelEvents.cs +++ b/src/DynamoCore/Models/DynamoModelEvents.cs @@ -8,6 +8,7 @@ using System.Collections.Generic; using Dynamo.Graph; using Dynamo.Extensions; +using Dynamo.Logging; namespace Dynamo.Models { @@ -158,6 +159,11 @@ protected virtual void OnWorkspaceAdded(WorkspaceModel obj) var handler = WorkspaceAdded; if (handler != null) handler(obj); + if (obj is CustomNodeWorkspaceModel) + Analytics.TrackScreenView("CustomWorkspace"); + else + Analytics.TrackScreenView("Workspace"); + WorkspaceEvents.OnWorkspaceAdded(obj.Guid, obj.Name, obj.GetType()); } @@ -541,12 +547,12 @@ internal void OnRequestPythonReset(string pythonEngine) /// /// This event is used to raise a toast notification from the DynamoViewModel /// - internal event Action RequestNotification; - internal void OnRequestNotification(string notification) + internal event Action RequestNotification; + internal void OnRequestNotification(string notification, bool stayOpen = false) { if (RequestNotification != null) { - RequestNotification(notification); + RequestNotification(notification, stayOpen); } } diff --git a/src/DynamoCore/Models/RecordableCommands.cs b/src/DynamoCore/Models/RecordableCommands.cs index 557827372e8..44355e6cf15 100644 --- a/src/DynamoCore/Models/RecordableCommands.cs +++ b/src/DynamoCore/Models/RecordableCommands.cs @@ -528,7 +528,7 @@ protected override void SerializeCore(XmlElement element) internal override void TrackAnalytics() { // Log file open action and the number of nodes in the opened workspace - Dynamo.Logging.Analytics.TrackFileOperationEvent( + Dynamo.Logging.Analytics.TrackTaskFileOperationEvent( FilePath, Logging.Actions.Open, dynamoModel.CurrentWorkspace.Nodes.Count()); @@ -628,7 +628,7 @@ protected override void SerializeCore(XmlElement element) internal override void TrackAnalytics() { // Log file open action and the number of nodes in the opened workspace - Dynamo.Logging.Analytics.TrackFileOperationEvent( + Dynamo.Logging.Analytics.TrackTaskFileOperationEvent( FilePath, Logging.Actions.Open, dynamoModel.CurrentWorkspace.Nodes.Count()); @@ -705,7 +705,7 @@ protected override void SerializeCore(XmlElement element) internal override void TrackAnalytics() { // Log file open action and the number of nodes in the opened workspace - Dynamo.Logging.Analytics.TrackFileOperationEvent( + Dynamo.Logging.Analytics.TrackTaskFileOperationEvent( "In memory json file", Logging.Actions.Open, dynamoModel.CurrentWorkspace.Nodes.Count()); @@ -1795,7 +1795,7 @@ protected override void SerializeCore(XmlElement element) internal override void TrackAnalytics() { - Dynamo.Logging.Analytics.TrackCommandEvent( + Dynamo.Logging.Analytics.TrackTaskCommandEvent( CmdOperation.ToString()); // "Undo" or "Redo" } diff --git a/src/DynamoCore/Properties/Resources.Designer.cs b/src/DynamoCore/Properties/Resources.Designer.cs index f523c41ad4c..31864038d8b 100644 --- a/src/DynamoCore/Properties/Resources.Designer.cs +++ b/src/DynamoCore/Properties/Resources.Designer.cs @@ -1117,6 +1117,15 @@ public static string InvalidStartOrEndOfRange { } } + /// + /// Looks up a localized string similar to This workspace contains element binding data in a legacy format that is no longer supported in Dynamo 3.0 and higher versions. Element binding data will be saved in the new format the next time you run and save this workspace.. + /// + public static string LegacyTraceDataWarning { + get { + return ResourceManager.GetString("LegacyTraceDataWarning", resourceCulture); + } + } + /// /// Looks up a localized string similar to Build error for library: {0}. /// diff --git a/src/DynamoCore/Properties/Resources.en-US.resx b/src/DynamoCore/Properties/Resources.en-US.resx index b40c51c4764..ad2ca83d86c 100644 --- a/src/DynamoCore/Properties/Resources.en-US.resx +++ b/src/DynamoCore/Properties/Resources.en-US.resx @@ -908,4 +908,7 @@ This package likely contains an assembly that is blocked. You will need to load Formula node has been deprecated. It has been automatically migrated to a CodeBlock node. Note that results may vary after the migration depending on lacing options selected on the original Formula node. Appropriate replication guides might need to be applied to the CodeBlock node script. + + This workspace contains element binding data in a legacy format that is no longer supported in Dynamo 3.0 and higher versions. Element binding data will be saved in the new format the next time you run and save this workspace. + \ No newline at end of file diff --git a/src/DynamoCore/Properties/Resources.resx b/src/DynamoCore/Properties/Resources.resx index 77d3d8340dd..4306d13dc3a 100644 --- a/src/DynamoCore/Properties/Resources.resx +++ b/src/DynamoCore/Properties/Resources.resx @@ -911,4 +911,7 @@ This package likely contains an assembly that is blocked. You will need to load Formula node has been deprecated. It has been automatically migrated to a CodeBlock node. Note that results may vary after the migration depending on lacing options selected on the original Formula node. Appropriate replication guides might need to be applied to the CodeBlock node script. - \ No newline at end of file + + This workspace contains element binding data in a legacy format that is no longer supported in Dynamo 3.0 and higher versions. Element binding data will be saved in the new format the next time you run and save this workspace. + + diff --git a/src/DynamoCoreWpf/Controls/InPortContextMenu.xaml.cs b/src/DynamoCoreWpf/Controls/InPortContextMenu.xaml.cs index 81df82642b9..3693155b8e9 100644 --- a/src/DynamoCoreWpf/Controls/InPortContextMenu.xaml.cs +++ b/src/DynamoCoreWpf/Controls/InPortContextMenu.xaml.cs @@ -1,6 +1,7 @@ -īģŋusing System; +using System; using System.Windows; using System.Windows.Controls; +using Dynamo.Models; using Dynamo.ViewModels; namespace Dynamo.UI.Controls @@ -15,8 +16,10 @@ public partial class InPortContextMenu : UserControl public InPortContextMenu() { InitializeComponent(); - - if (Application.Current != null) Application.Current.Deactivated += CurrentApplicationDeactivated; + if (string.IsNullOrEmpty(DynamoModel.HostAnalyticsInfo.HostName) && Application.Current != null) + { + Application.Current.Deactivated += CurrentApplicationDeactivated; + } Unloaded += InPortContextMenuControl_Unloaded; } @@ -27,7 +30,7 @@ public InPortContextMenu() /// private void InPortContextMenuControl_Unloaded(object sender, RoutedEventArgs e) { - if (Application.Current != null) + if (string.IsNullOrEmpty(DynamoModel.HostAnalyticsInfo.HostName) && Application.Current != null) { Application.Current.Deactivated -= CurrentApplicationDeactivated; } diff --git a/src/DynamoCoreWpf/Controls/IncanvasSearchControl.xaml.cs b/src/DynamoCoreWpf/Controls/IncanvasSearchControl.xaml.cs index 069a5ee6c09..b8f40090618 100644 --- a/src/DynamoCoreWpf/Controls/IncanvasSearchControl.xaml.cs +++ b/src/DynamoCoreWpf/Controls/IncanvasSearchControl.xaml.cs @@ -8,6 +8,7 @@ using System.Windows.Input; using System.Windows.Threading; using Dynamo.Logging; +using Dynamo.Models; using Dynamo.Utilities; using Dynamo.ViewModels; using Dynamo.Wpf.ViewModels; @@ -31,7 +32,7 @@ public SearchViewModel ViewModel public InCanvasSearchControl() { InitializeComponent(); - if (Application.Current != null) + if (string.IsNullOrEmpty(DynamoModel.HostAnalyticsInfo.HostName) && Application.Current != null) { Application.Current.Deactivated += CurrentApplicationDeactivated; Application.Current.MainWindow.Closing += InCanvasSearchControl_Unloaded; @@ -40,7 +41,7 @@ public InCanvasSearchControl() private void InCanvasSearchControl_Unloaded(object sender, System.ComponentModel.CancelEventArgs e) { - if (Application.Current != null) + if (string.IsNullOrEmpty(DynamoModel.HostAnalyticsInfo.HostName) && Application.Current != null) { Application.Current.Deactivated -= CurrentApplicationDeactivated; Application.Current.MainWindow.Closing -= InCanvasSearchControl_Unloaded; diff --git a/src/DynamoCoreWpf/Controls/InstalledPackagesControl.xaml b/src/DynamoCoreWpf/Controls/InstalledPackagesControl.xaml index 10a385873eb..6bf51a5ad9e 100644 --- a/src/DynamoCoreWpf/Controls/InstalledPackagesControl.xaml +++ b/src/DynamoCoreWpf/Controls/InstalledPackagesControl.xaml @@ -17,7 +17,6 @@ - - + - - - - - - -40.0 - - - - + IsExpanded="{Binding Path=Model.TypesVisibleInManager}" + Style="{StaticResource InstalledPackagesExpanderStyle}"> - + + + + - + MaxWidth="150" + Margin="10 0"> + @@ -145,14 +142,13 @@ TextTrimming="CharacterEllipsis" FontSize="10" FontFamily="Artifakt Element" + FontWeight="Medium" TextAlignment="Left" HorizontalAlignment="Center" - Margin="0,3,0,0" - Foreground="{StaticResource PrimaryCharcoal100Brush}"/> + Margin="0,2,0,0" + Foreground="{StaticResource PackageManagerTabBackgroundColor}"/> - - public void Dispose() { NodeAutoCompleteSearchControl_Unloaded(this,null); diff --git a/src/DynamoCoreWpf/Controls/OutPortContextMenu.xaml.cs b/src/DynamoCoreWpf/Controls/OutPortContextMenu.xaml.cs index 2814b5439a8..8a32e380741 100644 --- a/src/DynamoCoreWpf/Controls/OutPortContextMenu.xaml.cs +++ b/src/DynamoCoreWpf/Controls/OutPortContextMenu.xaml.cs @@ -1,6 +1,7 @@ using System; using System.Windows; using System.Windows.Controls; +using Dynamo.Models; using Dynamo.ViewModels; namespace Dynamo.UI.Controls @@ -19,7 +20,10 @@ public OutPortContextMenu() { InitializeComponent(); - if (Application.Current != null) Application.Current.Deactivated += CurrentApplicationDeactivated; + if (string.IsNullOrEmpty(DynamoModel.HostAnalyticsInfo.HostName) && Application.Current != null) + { + Application.Current.Deactivated += CurrentApplicationDeactivated; + } Unloaded += OutPortContextMenuControl_Unloaded; } @@ -30,7 +34,7 @@ public OutPortContextMenu() /// private void OutPortContextMenuControl_Unloaded(object sender, RoutedEventArgs e) { - if (Application.Current != null) + if (string.IsNullOrEmpty(DynamoModel.HostAnalyticsInfo.HostName) && Application.Current != null) { Application.Current.Deactivated -= CurrentApplicationDeactivated; } diff --git a/src/DynamoCoreWpf/Controls/ShortcutToolbar.xaml.cs b/src/DynamoCoreWpf/Controls/ShortcutToolbar.xaml.cs index 16b971cfb12..043d9f46b03 100644 --- a/src/DynamoCoreWpf/Controls/ShortcutToolbar.xaml.cs +++ b/src/DynamoCoreWpf/Controls/ShortcutToolbar.xaml.cs @@ -11,13 +11,14 @@ using System.Linq; using System.Windows; using System.Collections.Generic; +using System; namespace Dynamo.UI.Controls { /// /// An object which provides the data for the shortcut toolbar. /// - public partial class ShortcutToolbar : UserControl + public partial class ShortcutToolbar : UserControl, IDisposable { private readonly ObservableCollection shortcutBarItems; private readonly ObservableCollection shortcutBarRightSideItems; @@ -57,7 +58,7 @@ public ShortcutToolbar(DynamoViewModel dynamoViewModel) authManager = dynamoViewModel.Model.AuthenticationManager; if (authManager.IsLoggedInInitial()) { - authManager.LoginStateChanged += SignOutHandler; + authManager.LoginStateChanged += AuthChangeHandler; } else { logoutOption.Visibility = Visibility.Collapsed; @@ -73,14 +74,28 @@ private void ShortcutToolbar_Loaded(object sender, RoutedEventArgs e) DynamoViewModel.OnRequestShorcutToolbarLoaded(RightMenu.ActualWidth); } - private void SignOutHandler(LoginState status) + public void Dispose() + { + if(authManager != null) + { + authManager.LoginStateChanged -= AuthChangeHandler; + } + this.Loaded -= ShortcutToolbar_Loaded; + } + + private void AuthChangeHandler(LoginState status) { if (status == LoginState.LoggedOut) { LoginButton.ToolTip = Wpf.Properties.Resources.SignInButtonContentToolTip; txtSignIn.Text = Wpf.Properties.Resources.SignInButtonText; logoutOption.Visibility = Visibility.Collapsed; - authManager.LoginStateChanged -= SignOutHandler; + } + else if (status == LoginState.LoggedIn) + { + txtSignIn.Text = authManager.Username; + logoutOption.Visibility = Visibility.Visible; + LoginButton.ToolTip = null; } } @@ -115,7 +130,6 @@ private void LoginButton_OnClick(object sender, RoutedEventArgs e) tb.Text = authManager.Username; logoutOption.Visibility = Visibility.Visible; LoginButton.ToolTip = null; - authManager.LoginStateChanged += SignOutHandler; } } } diff --git a/src/DynamoCoreWpf/DynamoCoreWpf.csproj b/src/DynamoCoreWpf/DynamoCoreWpf.csproj index 58b9ea68aaa..a75c9236d12 100644 --- a/src/DynamoCoreWpf/DynamoCoreWpf.csproj +++ b/src/DynamoCoreWpf/DynamoCoreWpf.csproj @@ -56,8 +56,13 @@ + + + + + @@ -74,6 +79,10 @@ + + + + @@ -129,13 +138,13 @@ - + - + - + @@ -148,8 +157,9 @@ + - ..\..\extern\Microsoft.Xaml.Behaviors\$(TargetFramework)\Dynamo.Microsoft.Xaml.Behaviors.dll + ..\..\extern\Microsoft.Xaml.Behaviors\net6.0-windows\Dynamo.Microsoft.Xaml.Behaviors.dll @@ -434,6 +444,7 @@ SurveyPopupWindow.xaml + @@ -448,6 +459,10 @@ PackagePathView.xaml + + + + TermsOfUseView.xaml @@ -646,6 +661,10 @@ Designer MSBuild:Compile + + Designer + MSBuild:Compile + Designer MSBuild:Compile @@ -677,6 +696,22 @@ Designer MSBuild:Compile + + + Designer + MSBuild:Compile + + + Designer + MSBuild:Compile + + + Designer + MSBuild:Compile + + + Designer + MSBuild:Compile @@ -795,6 +830,7 @@ + @@ -928,6 +964,10 @@ + + + + @@ -1721,12 +1761,27 @@ + + MSBuild:Compile + MSBuild:Compile MSBuild:Compile + + MSBuild:Compile + + + MSBuild:Compile + + + MSBuild:Compile + + + MSBuild:Compile + diff --git a/src/DynamoCoreWpf/Properties/Resources.Designer.cs b/src/DynamoCoreWpf/Properties/Resources.Designer.cs index 21a0b8d8de1..45c208b3da5 100644 --- a/src/DynamoCoreWpf/Properties/Resources.Designer.cs +++ b/src/DynamoCoreWpf/Properties/Resources.Designer.cs @@ -159,6 +159,15 @@ public static string AddToLibraryButton { } } + /// + /// Looks up a localized string similar to I agree to ML Node Autocomplete Terms of Use. + /// + public static string AgreeToMLAutocompleteTOUText { + get { + return ResourceManager.GetString("AgreeToMLAutocompleteTOUText", resourceCulture); + } + } + /// /// Looks up a localized string similar to Autodesk A360. /// @@ -1025,15 +1034,6 @@ public static string CrashPromptDialogTitle { } } - /// - /// Looks up a localized string similar to Crash report from Dynamo {0}. - /// - public static string CrashPromptGithubNewIssueTitle { - get { - return ResourceManager.GetString("CrashPromptGithubNewIssueTitle", resourceCulture); - } - } - /// /// Looks up a localized string similar to Create. /// @@ -1288,6 +1288,24 @@ public static string DisablePackageInstallIconTooltip { } } + /// + /// Looks up a localized string similar to Discard changes?. + /// + public static string DiscardChangesWarningPopupCaption { + get { + return ResourceManager.GetString("DiscardChangesWarningPopupCaption", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Your changes will be lost if you navigate away from the package upload screen.. + /// + public static string DiscardChangesWarningPopupMessage { + get { + return ResourceManager.GetString("DiscardChangesWarningPopupMessage", resourceCulture); + } + } + /// /// Looks up a localized string similar to Download Warning. /// @@ -2261,7 +2279,7 @@ public static string DynamoViewSettingMenuNumberFormat { } /// - /// Looks up a localized string similar to Agreement to _Collect Usability Data. + /// Looks up a localized string similar to Agreement and _Terms of Use. /// public static string DynamoViewSettingMenuShowDataReportingDialog { get { @@ -2270,7 +2288,7 @@ public static string DynamoViewSettingMenuShowDataReportingDialog { } /// - /// Looks up a localized string similar to Display the dialog for user to pick agreement on data collecting.. + /// Looks up a localized string similar to Display the dialog of agreement on data collecting and Machine Learning Node Autocomplete terms of use. /// public static string DynamoViewSettingMenuShowDataReportingDialogTooltip { get { @@ -4721,7 +4739,7 @@ public static string MoreButton { } /// - /// Looks up a localized string similar to Name must be at least 3 characters.. + /// Looks up a localized string similar to Must be at least 3 characters. /// public static string NameNeedMoreCharacters { get { @@ -5053,6 +5071,15 @@ public static string NotificationCenterButtonTooltip { } } + /// + /// Looks up a localized string similar to To access the Recommended Nodes feature, please read and accept Dynamo > Agreement and Terms of Use.. + /// + public static string NotificationToAgreeMLNodeautocompleteTOU { + get { + return ResourceManager.GetString("NotificationToAgreeMLNodeautocompleteTOU", resourceCulture); + } + } + /// /// Looks up a localized string similar to null. /// @@ -5654,6 +5681,33 @@ public static string PackageManagerClearAllButtonText { } } + /// + /// Looks up a localized string similar to files published. + /// + public static string PackageManagerFinishedPackageFilesPublishedMessage { + get { + return ResourceManager.GetString("PackageManagerFinishedPackageFilesPublishedMessage", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to files uploaded. + /// + public static string PackageManagerFinishedPackageFilesUploadedMessage { + get { + return ResourceManager.GetString("PackageManagerFinishedPackageFilesUploadedMessage", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Package Path. + /// + public static string PackageManagerFinishedPackagePackagePath { + get { + return ResourceManager.GetString("PackageManagerFinishedPackagePackagePath", resourceCulture); + } + } + /// /// Looks up a localized string similar to Install. /// @@ -5744,6 +5798,69 @@ public static string PackageManagerPackageUpdated { } } + /// + /// Looks up a localized string similar to Provide file(s). + /// + public static string PackageManagerProvideFiles { + get { + return ResourceManager.GetString("PackageManagerProvideFiles", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Provide package name. + /// + public static string PackageManagerProvidePackageName { + get { + return ResourceManager.GetString("PackageManagerProvidePackageName", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Provide package name and file(s). + /// + public static string PackageManagerProvidePackageNameAndFiles { + get { + return ResourceManager.GetString("PackageManagerProvidePackageNameAndFiles", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Provide package name and version number. + /// + public static string PackageManagerProvidePackageNameAndVersion { + get { + return ResourceManager.GetString("PackageManagerProvidePackageNameAndVersion", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Provide version number. + /// + public static string PackageManagerProvideVersion { + get { + return ResourceManager.GetString("PackageManagerProvideVersion", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Provide version number and file(s). + /// + public static string PackageManagerProvideVersionAndFiles { + get { + return ResourceManager.GetString("PackageManagerProvideVersionAndFiles", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Virus scan in progress. Your package will be searchable in approximately 15 minutes.. + /// + public static string PackageManagerPublishOnlineFinishedMessage { + get { + return ResourceManager.GetString("PackageManagerPublishOnlineFinishedMessage", resourceCulture); + } + } + /// /// Looks up a localized string similar to Publish a Package. /// @@ -5762,6 +5879,15 @@ public static string PackageManagerPublishTab { } } + /// + /// Looks up a localized string similar to Ready to publish. + /// + public static string PackageManagerReadyToPublish { + get { + return ResourceManager.GetString("PackageManagerReadyToPublish", resourceCulture); + } + } + /// /// Looks up a localized string similar to Search for Packages. /// @@ -5807,6 +5933,15 @@ public static string PackageManagerTitle { } } + /// + /// Looks up a localized string similar to Once signed in, you can find your published packages here.. + /// + public static string PackageManagerUserNotSignedPackagesSubMessage { + get { + return ResourceManager.GetString("PackageManagerUserNotSignedPackagesSubMessage", resourceCulture); + } + } + /// /// Looks up a localized string similar to The name of the package cannot contain. /// @@ -6023,6 +6158,15 @@ public static string PackagerManageNoPublishedPackagesSubMessage { } } + /// + /// Looks up a localized string similar to Sign in to your Dynamo account to view your published packages.. + /// + public static string PackagerManageUserNotSignedPackagesMessage { + get { + return ResourceManager.GetString("PackagerManageUserNotSignedPackagesMessage", resourceCulture); + } + } + /// /// Looks up a localized string similar to Search for packages. /// @@ -6258,7 +6402,7 @@ public static string PackageSearchViewInstallLatestVersion { } /// - /// Looks up a localized string similar to Install latest version to folder.... + /// Looks up a localized string similar to Install to folder.... /// public static string PackageSearchViewInstallLatestVersionTo { get { @@ -6429,7 +6573,7 @@ public static string PackagesGuideExitTitle { } /// - /// Looks up a localized string similar to Packages provide additional functions that you can use in Dynamo. \n\nTo find a package or see what’s available, \n**Click Packages > Search for Packages**.. + /// Looks up a localized string similar to Packages provide additional functions that you can use in Dynamo. \n\nTo find a package or see what’s available, \n**Click Packages > Package Manager...**.. /// public static string PackagesGuideFindPackageText { get { @@ -7947,6 +8091,15 @@ public static string PublishPackageMoreInfoFile { } } + /// + /// Looks up a localized string similar to DLL file containing types and methods that Dynamo imports as nodes. Mark ZeroTouch, NodeModel, or NodeViewCustomization DLLs and types you want to import into Dynamo as node libraries.. + /// + public static string PublishPackageNodeLibraryTooltip { + get { + return ResourceManager.GetString("PublishPackageNodeLibraryTooltip", resourceCulture); + } + } + /// /// Looks up a localized string similar to Package Contents. /// @@ -7956,6 +8109,36 @@ public static string PublishPackagePackageContent { } } + /// + /// Looks up a localized string similar to Preview package contents (read only). + /// + public static string PublishPackagePreviewPackageContentsMessage { + get { + return ResourceManager.GetString("PublishPackagePreviewPackageContentsMessage", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Remove from package. + /// + public static string PublishPackageRemoveFromPacakgeTooltip { + get { + return ResourceManager.GetString("PublishPackageRemoveFromPacakgeTooltip", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to When this setting is enabled, the folder structure of uploaded files will be retained. Otherwise, files will be placed into predefined folders. + /// + ///Note: Incorrect folder structure may affect the functionality of packages that rely on the correct file organization. When in doubt, leave this setting off. + /// . + /// + public static string PublishPackageRetainFolderStructureTooltip { + get { + return ResourceManager.GetString("PublishPackageRetainFolderStructureTooltip", resourceCulture); + } + } + /// /// Looks up a localized string similar to Select Node Libraries. /// @@ -7966,7 +8149,16 @@ public static string PublishPackageSelectNodeLibraries { } /// - /// Looks up a localized string similar to 1. + /// Looks up a localized string similar to Select package contents. + /// + public static string PublishPackageSelectPackageContentsMessage { + get { + return ResourceManager.GetString("PublishPackageSelectPackageContentsMessage", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to 0. /// public static string PublishPackageVersionBuildWatermark { get { @@ -8064,6 +8256,15 @@ public static string PublishPackageViewCopyrightHolderSubLabel { } } + /// + /// Looks up a localized string similar to The package's copyright holder.. + /// + public static string PublishPackageViewCopyrightHolderTooltip { + get { + return ResourceManager.GetString("PublishPackageViewCopyrightHolderTooltip", resourceCulture); + } + } + /// /// Looks up a localized string similar to Author name. /// @@ -8091,6 +8292,15 @@ public static string PublishPackageViewCopyrightYearSubLabel { } } + /// + /// Looks up a localized string similar to The copyright year for the package.. + /// + public static string PublishPackageViewCopyrightYearTooltip { + get { + return ResourceManager.GetString("PublishPackageViewCopyrightYearTooltip", resourceCulture); + } + } + /// /// Looks up a localized string similar to Publishing year. /// @@ -8109,6 +8319,24 @@ public static string PublishPackageViewFilePath { } } + /// + /// Looks up a localized string similar to GitHub repository link for the package.. + /// + public static string PublishPackageViewGithubLinkTooltip { + get { + return ResourceManager.GetString("PublishPackageViewGithubLinkTooltip", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to The package's licence.. + /// + public static string PublishPackageViewLicenceTooltip { + get { + return ResourceManager.GetString("PublishPackageViewLicenceTooltip", resourceCulture); + } + } + /// /// Looks up a localized string similar to License (optional). /// @@ -8299,7 +8527,7 @@ public static string PublishPackageViewPackageVersion { } /// - /// Looks up a localized string similar to A version name helps a submitter keep track of updates to the package. A new version of a package will be REJECTED if this is not incremeneted.. + /// Looks up a localized string similar to A version name helps a submitter keep track of updates to the package. When a new version of a package is added, version number must be increased.. /// public static string PublishPackageViewPackageVersionTooltip { get { @@ -8334,6 +8562,15 @@ public static string PublishPackageViewPublisherWebSite { } } + /// + /// Looks up a localized string similar to Website link for the package.. + /// + public static string PublishPackageViewPublisherWebsiteTooltip { + get { + return ResourceManager.GetString("PublishPackageViewPublisherWebsiteTooltip", resourceCulture); + } + } + /// /// Looks up a localized string similar to Removes this item from the package contents list.. /// @@ -9662,7 +9899,7 @@ public static string UpdateMessage { } /// - /// Looks up a localized string similar to Agreement to Collect Usability Data. + /// Looks up a localized string similar to Agreement and Terms of Use. /// public static string UsageReportPromptDialogTitle { get { diff --git a/src/DynamoCoreWpf/Properties/Resources.en-US.resx b/src/DynamoCoreWpf/Properties/Resources.en-US.resx index 1cc4c2ff2f9..bcae7625ea4 100644 --- a/src/DynamoCoreWpf/Properties/Resources.en-US.resx +++ b/src/DynamoCoreWpf/Properties/Resources.en-US.resx @@ -764,7 +764,7 @@ Don't worry, you'll have the option to save your work. Setting menu | Decimal inch - Agreement to _Collect Usability Data + Agreement and _Terms of Use Dynamo menu | Show user agreement dialog about data collecting @@ -1411,7 +1411,31 @@ To avoid unintended behavior, uninstall the conflicting loaded package(s), resta The "More" button on "Publish a Dynamo Package" dialog - Name must be at least 3 characters. + Must be at least 3 characters + ErrorString + + + Provide package name + ErrorString + + + Provide package name and file(s) + ErrorString + + + Provide package name and version number + ErrorString + + + Provide version number + ErrorString + + + Provide version number and file(s) + ErrorString + + + Provide file(s) ErrorString @@ -1488,6 +1512,9 @@ To avoid unintended behavior, uninstall the conflicting loaded package(s), resta Next assemblies were loaded several times: + + Ready to publish + only @@ -1576,6 +1603,15 @@ Next assemblies were loaded several times: Move the selected path upward Tool-tip for up arrow + + Package Path + + + files uploaded + + + files published + Package Path Added @@ -1648,7 +1684,7 @@ Next assemblies were loaded several times: Install latest version - Install latest version to folder... + Install to folder... Install this version @@ -1798,6 +1834,12 @@ Next assemblies were loaded several times: Published Successfully + + Select package contents + + + Preview package contents (read only) + Publish Locally @@ -1812,7 +1854,10 @@ Want to publish a different package? Add Files - Add File To Package + Add file + + + Remove from package Is Node Library @@ -1859,7 +1904,22 @@ Want to publish a different package? Build - A version name helps a submitter keep track of updates to the package. A new version of a package will be REJECTED if this is not incremeneted. + A version name helps a submitter keep track of updates to the package. When a new version of a package is added, version number must be increased. + + + Website link for the package. + + + GitHub repository link for the package. + + + The package's licence. + + + The package's copyright holder. + + + The copyright year for the package. Publish a Package @@ -2157,7 +2217,10 @@ Installing the latest update requires Dynamo and any host applications to close. Do you want to install the latest Dynamo update? - Agreement to Collect Usability Data + Agreement and Terms of Use + + + I agree to ML Node Autocomplete Terms of Use Keep 1 input list's nesting @@ -2250,10 +2313,7 @@ Uninstall the following packages: {0}? Filter by - Display the dialog for user to pick agreement on data collecting. - - - Crash report from Dynamo {0} + Display the dialog of agreement on data collecting and Machine Learning Node Autocomplete terms of use @@ -2832,7 +2892,7 @@ If the toggle is off custom packages that are not already loaded will load once 0 - 1 + 0 Description @@ -2887,7 +2947,7 @@ This package will be unloaded after the next Dynamo restart. Add Directory - Add Directory And Its Files To Package + Add folder Markdown Files Path (optional) @@ -2943,6 +3003,9 @@ This package will be unloaded after the next Dynamo restart. Publish a Package + + Virus scan in progress. Your package will be searchable in approximately 15 minutes. + Installed Packages @@ -2964,6 +3027,12 @@ This package will be unloaded after the next Dynamo restart. Once you install a package, you can find it here. + + Sign in to your Dynamo account to view your published packages. + + + Once signed in, you can find your published packages here. + Search for Packages @@ -3025,7 +3094,7 @@ This package will be unloaded after the next Dynamo restart. Hide Wire - Packages provide additional functions that you can use in Dynamo. \n\nTo find a package or see what’s available, \n**Click Packages > Search for Packages**. + Packages provide additional functions that you can use in Dynamo. \n\nTo find a package or see what’s available, \n**Click Packages > Package Manager...**. Find a package @@ -3167,6 +3236,15 @@ To install the latest version of a package, click Install. \n Node Library + + When this setting is enabled, the folder structure of uploaded files will be retained. Otherwise, files will be placed into predefined folders. + +Note: Incorrect folder structure may affect the functionality of packages that rely on the correct file organization. When in doubt, leave this setting off. + + + + DLL file containing types and methods that Dynamo imports as nodes. Mark ZeroTouch, NodeModel, or NodeViewCustomization DLLs and types you want to import into Dynamo as node libraries. + Renamed from {0} @@ -3297,6 +3375,12 @@ Try placing the highlighted **ByOrigin** node. No, close file + + Discard changes? + + + Your changes will be lost if you navigate away from the package upload screen. + Settings @@ -3774,4 +3858,7 @@ In certain complex graphs or host program scenarios, Automatic mode may cause in When toggled on, some graphics will render faster + + To access the Recommended Nodes feature, please read and accept Dynamo > Agreement and Terms of Use. + diff --git a/src/DynamoCoreWpf/Properties/Resources.resx b/src/DynamoCoreWpf/Properties/Resources.resx index b169df206b4..49d0e243744 100644 --- a/src/DynamoCoreWpf/Properties/Resources.resx +++ b/src/DynamoCoreWpf/Properties/Resources.resx @@ -487,7 +487,7 @@ Setting menu | Decimal inch - Agreement to _Collect Usability Data + Agreement and _Terms of Use Dynamo menu | Show user agreement dialog about data collecting @@ -1151,7 +1151,10 @@ Don't worry, you'll have the option to save your work. Cancel - Agreement to Collect Usability Data + Agreement and Terms of Use + + + I agree to ML Node Autocomplete Terms of Use Clear @@ -1283,6 +1286,9 @@ Don't worry, you'll have the option to save your work. Publish a Package + + Virus scan in progress. Your package will be searchable in approximately 15 minutes. + Installed Packages @@ -1304,6 +1310,12 @@ Don't worry, you'll have the option to save your work. Once you install a package, you can find it here. + + Sign in to your Dynamo account to view your published packages. + + + Once signed in, you can find your published packages here. + Search for Packages @@ -1465,7 +1477,7 @@ If the toggle is off custom packages that are not already loaded will load once Install latest version - Install latest version to folder... + Install to folder... Install this version @@ -1589,6 +1601,9 @@ If the toggle is off custom packages that are not already loaded will load once Add File To Package + + Remove from package + Add Directory And Its Files To Package @@ -1661,7 +1676,22 @@ If the toggle is off custom packages that are not already loaded will load once Build - A version name helps a submitter keep track of updates to the package. A new version of a package will be REJECTED if this is not incremeneted. + A version name helps a submitter keep track of updates to the package. When a new version of a package is added, version number must be increased. + + + Website link for the package. + + + GitHub repository link for the package. + + + The package's copyright holder. + + + The package's licence. + + + The copyright year for the package. 0 @@ -1670,7 +1700,7 @@ If the toggle is off custom packages that are not already loaded will load once 0 - 1 + 0 Group @@ -1706,6 +1736,15 @@ If the toggle is off custom packages that are not already loaded will load once Node Library + + When this setting is enabled, the folder structure of uploaded files will be retained. Otherwise, files will be placed into predefined folders. + +Note: Incorrect folder structure may affect the functionality of packages that rely on the correct file organization. When in doubt, leave this setting off. + + + + DLL file containing types and methods that Dynamo imports as nodes. Mark ZeroTouch, NodeModel, or NodeViewCustomization DLLs and types you want to import into Dynamo as node libraries. + Show Classic Node Library @@ -1745,7 +1784,31 @@ If the toggle is off custom packages that are not already loaded will load once ErrorString - Name must be at least 3 characters. + Must be at least 3 characters + ErrorString + + + Provide package name + ErrorString + + + Provide package name and file(s) + ErrorString + + + Provide package name and version number + ErrorString + + + Provide version number + ErrorString + + + Provide version number and file(s) + ErrorString + + + Provide file(s) ErrorString @@ -2211,6 +2274,15 @@ Do you want to install the latest Dynamo update? Move the selected path upward Tool-tip for up arrow + + Package Path + + + files uploaded + + + files published + Package Path Added @@ -2250,6 +2322,12 @@ Do you want to install the latest Dynamo update? Publish Locally + + Select package contents + + + Preview package contents (read only) + _Background Preview The name of the 3D background preview. @@ -2323,6 +2401,9 @@ Do you want to install the latest Dynamo update? Next assemblies were loaded several times: + + Ready to publish + Failed to add file: {0} Message box content @@ -2462,9 +2543,6 @@ Want to publish a different package? Custom Nodes will be placed in the Add-Ons section of the library. Note regarding Custom Node library location - - Crash report from Dynamo {0} - Please wait... @@ -2525,7 +2603,7 @@ Uninstall the following packages: {0}? Filter by - Display the dialog for user to pick agreement on data collecting. + Display the dialog of agreement on data collecting and Machine Learning Node Autocomplete terms of use @@ -3048,7 +3126,7 @@ Delete the following packages: {2}? Hide Wire - Packages provide additional functions that you can use in Dynamo. \n\nTo find a package or see what’s available, \n**Click Packages > Search for Packages**. + Packages provide additional functions that you can use in Dynamo. \n\nTo find a package or see what’s available, \n**Click Packages > Package Manager...**. Find a package @@ -3284,6 +3362,12 @@ Try placing the highlighted **ByOrigin** node. No, close file + + Discard changes? + + + Your changes will be lost if you navigate away from the package upload screen. + Settings @@ -3761,4 +3845,7 @@ In certain complex graphs or host program scenarios, Automatic mode may cause in When toggled on, some graphics will render faster + + To access the Recommended Nodes feature, please read and accept Dynamo > Agreement and Terms of Use. + diff --git a/src/DynamoCoreWpf/Services/UsageReportingManager.cs b/src/DynamoCoreWpf/Services/UsageReportingManager.cs index 4a78202266f..4c09d4aae9e 100644 --- a/src/DynamoCoreWpf/Services/UsageReportingManager.cs +++ b/src/DynamoCoreWpf/Services/UsageReportingManager.cs @@ -105,15 +105,14 @@ public void ToggleIsAnalyticsReportingApproved(object parameter) private void ShowUsageReportingPrompt(Window ownerWindow) { // If an owner window is not supplied, then we will fallback onto - // using the application's main window. In native host application - // scenario (e.g. Revit), the "Application.Current" will be "null". + // using the application's main window. // The owner window is important so that usage report window always // get shown on top of the owner window, otherwise it is possible // for usage report window to show up in the background (behind all // other full screen windows), and Dynamo main window will appear // to be frozen because control cannot return to it. // - if (ownerWindow == null && (null != Application.Current)) + if (ownerWindow == null && string.IsNullOrEmpty(DynamoModel.HostAnalyticsInfo.HostName) && Application.Current != null) ownerWindow = Application.Current.MainWindow; var usageReportingPrompt = new UsageReportingAgreementPrompt(resourceProvider, dynamoViewModel) diff --git a/src/DynamoCoreWpf/UI/Converters.cs b/src/DynamoCoreWpf/UI/Converters.cs index e6c36a9525e..56df2b6627b 100644 --- a/src/DynamoCoreWpf/UI/Converters.cs +++ b/src/DynamoCoreWpf/UI/Converters.cs @@ -377,6 +377,30 @@ public object ConvertBack(object value, Type targetType, object parameter, } } + + /// + /// Given a string, returns to upper case + /// + public class ToTitleCaseStringConverter : IValueConverter + { + public object Convert(object value, Type targetType, object parameter, + CultureInfo culture) + { + if (value is string text) + { + var textInfo = culture.TextInfo; + return textInfo.ToTitleCase(text); + } + return value; + } + + public object ConvertBack(object value, Type targetType, object parameter, + CultureInfo culture) + { + return null; + } + } + /// /// If the given string is empty, collapsed visibility enum is returned, otherwise visible enum is returned. /// @@ -1415,6 +1439,27 @@ public object ConvertBack(object value, Type targetType, object parameter, Syste } } + /// + /// Converts 0 Collapsed state, otherwise returns Visible + /// + public class ZeroToVisibilityCollapsedConverter : IValueConverter + { + public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) + { + if (value is int zero) + { + return zero == 0 ? Visibility.Collapsed : Visibility.Visible; + } + + return Visibility.Collapsed; // If not int or int not zero, return collapsed. + } + + public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) + { + throw new NotSupportedException(); + } + } + /// /// Takes a value and if the value is not null returns Unity Type Auto (*) as a length value /// Returns 0 length if the value is null @@ -2048,6 +2093,28 @@ public object ConvertBack(object value, Type targetType, object parameter, Cultu } } + public sealed class NullOrEmptyStringToVisibiltyCollapsedConverter : IValueConverter + { + public object Convert(object value, Type targetType, object parameter, CultureInfo culture) + { + bool invert = parameter as string == "invert"; + + if (String.IsNullOrEmpty((string)value)) + { + return invert ? Visibility.Visible : Visibility.Collapsed; + } + else + { + return invert ? Visibility.Collapsed : Visibility.Visible; + } + } + + public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) + { + throw new NotImplementedException(); + } + } + public sealed class NullToPinWidthConverter : IValueConverter { public const double PIN_WIDTH = 4; @@ -3811,4 +3878,80 @@ public object[] ConvertBack(object value, Type[] targetTypes, object parameter, return null; } } + + + /// + /// Convers PackageUploadHandle UploadType enum value to visibility + /// + public class PackageUploadHandleUploadTypeToVisibilityConverter : IValueConverter + { + public object Convert(object value, Type targetType, object parameter, CultureInfo culture) + { + if (value is PackageUploadHandle.UploadType uploadType) + { + if (parameter != null && parameter.ToString().ToLower() == "invert") + { + return uploadType != PackageUploadHandle.UploadType.Submit ? Visibility.Visible : Visibility.Hidden; + } + else + { + return uploadType == PackageUploadHandle.UploadType.Submit ? Visibility.Visible : Visibility.Hidden; + } + } + + return Visibility.Hidden; + } + + public object ConvertBack(object value, Type targetType, object parameter, + CultureInfo culture) + { + return null; + } + } + + /// + /// ReadyToPublish message to visibility converter + /// + public class ReadyToPublishToVisibilityCollapsedConverter : IValueConverter + { + public object Convert(object value, Type targetType, object parameter, CultureInfo culture) + { + if (value is string errorMessage && errorMessage.Equals(Resources.PackageManagerReadyToPublish)) + { + return Visibility.Visible; + } + + return Visibility.Collapsed; + } + + public object ConvertBack(object value, Type targetType, object parameter, + CultureInfo culture) + { + return null; + } + } + + /// + /// Given a string, returns to upper case + /// + public class StringEqualsZeroToVisibilityCollapsedConverter : IValueConverter + { + public object Convert(object value, Type targetType, object parameter, + CultureInfo culture) + { + if (value is string nullOrEmptyString && String.IsNullOrEmpty(nullOrEmptyString)) return Visibility.Visible; + if (value is string zeroString && zeroString.Equals("0")) + { + return Visibility.Visible; + } + return Visibility.Collapsed; + } + + public object ConvertBack(object value, Type targetType, object parameter, + CultureInfo culture) + { + return null; + } + } + } diff --git a/src/DynamoCoreWpf/UI/GuidedTour/GuidesValidationMethods.cs b/src/DynamoCoreWpf/UI/GuidedTour/GuidesValidationMethods.cs index faf67c82ec9..6b9c6275bad 100644 --- a/src/DynamoCoreWpf/UI/GuidedTour/GuidesValidationMethods.cs +++ b/src/DynamoCoreWpf/UI/GuidedTour/GuidesValidationMethods.cs @@ -3,6 +3,8 @@ using System.Reflection; using System.Windows; using System.Windows.Controls; +using System.Windows.Controls.Primitives; +using System.Windows.Input; using System.Windows.Shapes; using System.Windows.Threading; using Dynamo.Controls; @@ -29,6 +31,11 @@ internal class GuidesValidationMethods internal static Guide CurrentExecutingGuide; internal static GuidesManager CurrentExecutingGuidesManager; + private const double PMCustomWidth = 600; + private const double PMCustomHeight = 200; + private const double PMDefaultWidth = 1076; + private const double PMDefaultHeight = 718; + private static ExitGuide exitGuide; private const string AutodeskSamplePackage = "Dynamo Samples"; private static PackageManagerSearchViewModel viewModel; @@ -78,7 +85,7 @@ internal static void ExecuteTermsOfServiceFlow(Step stepInfo, StepUIAutomation u if (enableFunction) { //If the TermsOfService is not accepted yet it will show the TermsOfUseView otherwise it will show the PackageManagerSearchView - stepInfo.DynamoViewModelStep.ShowPackageManagerSearch(null); + stepInfo.DynamoViewModelStep.ShowPackageManager(null); CurrentGuideWindow = GuideUtilities.FindWindowOwned(stepInfo.HostPopupInfo.WindowName, stepInfo.MainWindow as Window); foreach (var handler in uiAutomationData.AutomaticHandlers) { @@ -184,7 +191,12 @@ internal static void ExecuteInstallPackagesFlow(Step stepInfo, StepUIAutomation if (enableFunction) { if (ownedWindow != null) - viewModel = ownedWindow.DataContext as PackageManagerSearchViewModel; + { + var packageManager = ownedWindow as PackageManagerView; + if (packageManager == null) return; + viewModel = packageManager.PackageManagerViewModel.PackageSearchViewModel; + } + Button buttonElement = GuideUtilities.FindChild(ownedWindow, stepInfo.HostPopupInfo.HostUIElementString) as Button; viewModel.PackageManagerClientViewModel.Downloads.CollectionChanged += Downloads_CollectionChanged; @@ -320,12 +332,12 @@ internal static void ExecutePackageSearch(Step stepInfo, StepUIAutomation uiAuto { //We need to check if the PackageManager search is already open if that is the case we don't need to open it again if (ownedWindow != null) return; - stepInfo.DynamoViewModelStep.ShowPackageManagerSearch(null); + stepInfo.DynamoViewModelStep.ShowPackageManager(new PackageManagerSizeEventArgs(PMCustomWidth, PMCustomHeight)); - PackageManagerSearchView packageManager = GuideUtilities.FindWindowOwned(stepInfo.HostPopupInfo.WindowName, stepInfo.MainWindow as Window) as PackageManagerSearchView; + PackageManagerView packageManager = GuideUtilities.FindWindowOwned(stepInfo.HostPopupInfo.WindowName, stepInfo.MainWindow as Window) as PackageManagerView; if (packageManager == null) return; - PackageManagerSearchViewModel packageManagerViewModel = packageManager.DataContext as PackageManagerSearchViewModel; + PackageManagerSearchViewModel packageManagerViewModel = packageManager.PackageManagerViewModel.PackageSearchViewModel; if (packageManagerViewModel == null) return; @@ -338,10 +350,10 @@ internal static void ExecutePackageSearch(Step stepInfo, StepUIAutomation uiAuto else { - PackageManagerSearchView packageManager = GuideUtilities.FindWindowOwned(stepInfo.HostPopupInfo.WindowName, stepInfo.MainWindow as Window) as PackageManagerSearchView; + PackageManagerView packageManager = GuideUtilities.FindWindowOwned(stepInfo.HostPopupInfo.WindowName, stepInfo.MainWindow as Window) as PackageManagerView; if (packageManager == null) return; - PackageManagerSearchViewModel packageManagerViewModel = packageManager.DataContext as PackageManagerSearchViewModel; + PackageManagerSearchViewModel packageManagerViewModel = packageManager.PackageManagerViewModel.PackageSearchViewModel; if (packageManagerViewModel == null) return; @@ -371,13 +383,19 @@ internal static void ExecutePackageSearch(Step stepInfo, StepUIAutomation uiAuto /// This method will find the PackageManagerSearch window and then close it /// /// - private static void ClosePackageManager(PackageManagerSearchView packageManager) + private static void ClosePackageManager(PackageManagerView packageManager) { - PackageManagerSearchViewModel packageManagerViewModel = packageManager.DataContext as PackageManagerSearchViewModel; + PackageManagerSearchViewModel packageManagerViewModel = packageManager.PackageManagerViewModel.PackageSearchViewModel; if (packageManagerViewModel == null) return; + packageManager.PackageManagerViewModel.Width = PMDefaultWidth; + packageManager.PackageManagerViewModel.Height = PMDefaultHeight; packageManagerViewModel.PropertyChanged -= searchPackagesPropertyChanged.Invoke; + + //Enable the DynamoView.mainGrid so the user will be able to interact with Dynamo + (packageManager.Owner as DynamoView).EnableEnvironment(true); packageManager.Close(); + } /// @@ -508,7 +526,7 @@ internal static void SearchForPackage_Click(object sender, RoutedEventArgs e) internal static void SubscribeViewDetailsEvent(Step stepInfo, StepUIAutomation uiAutomationData, bool enableFunction, GuideFlow currentFlow) { CurrentExecutingStep = stepInfo; - PackageManagerSearchView packageManager = GuideUtilities.FindWindowOwned(stepInfo.HostPopupInfo.WindowName, stepInfo.MainWindow as Window) as PackageManagerSearchView; + PackageManagerView packageManager = GuideUtilities.FindWindowOwned(stepInfo.HostPopupInfo.WindowName, stepInfo.MainWindow as Window) as PackageManagerView; if (packageManager == null) return; Button foundElement = GuideUtilities.FindChild(packageManager, stepInfo.HostPopupInfo.HighlightRectArea.WindowElementNameString) as Button; if (foundElement == null) @@ -546,7 +564,7 @@ internal static void ExecuteViewDetailsSideBar(Step stepInfo, StepUIAutomation u { const string packageDetailsName = "Package Details"; const string closeButtonName = "CloseButton"; - const string packageSearchWindowName = "PackageSearch"; + const string packageManagerWindowName = "PackageManagerWindow"; CurrentExecutingStep = stepInfo; var stepMainWindow = stepInfo.MainWindow as Window; @@ -555,42 +573,32 @@ internal static void ExecuteViewDetailsSideBar(Step stepInfo, StepUIAutomation u if (enableFunction) { //This section will open the Package Details Sidebar - PackageManagerSearchView packageManager = GuideUtilities.FindWindowOwned(packageSearchWindowName, stepMainWindow) as PackageManagerSearchView; + PackageManagerView packageManager = GuideUtilities.FindWindowOwned(packageManagerWindowName, stepMainWindow) as PackageManagerView; if (packageManager == null) return; - PackageManagerSearchViewModel packageManagerViewModel = packageManager.DataContext as PackageManagerSearchViewModel; + PackageManagerSearchViewModel packageManagerViewModel = packageManager.PackageManagerViewModel.PackageSearchViewModel; //If the results in the PackageManagerSearch are null then we cannot open the Package Detail tab if (packageManagerViewModel == null || packageManagerViewModel.SearchResults.Count == 0) return; - //We take the first result from the PackageManagerSearch - PackageManagerSearchElementViewModel packageManagerSearchElementViewModel = packageManagerViewModel.SearchResults[0]; - if (packageManagerSearchElementViewModel == null) return; - - if (packageDetailsWindow == null) - packageManagerViewModel.ViewPackageDetailsCommand.Execute(packageManagerSearchElementViewModel.Model); + var viewDetailsButton = WpfUtilities.ChildOfType /// - private void model_RequestNotification(string notification) + private void model_RequestNotification(string notification, bool stayOpen = false) { - this.MainGuideManager.CreateRealTimeInfoWindow(notification); + this.MainGuideManager.CreateRealTimeInfoWindow(notification, stayOpen); } /// @@ -2101,15 +2101,52 @@ internal bool CanSaveAs(object parameters) return (parameters != null); } + /// + /// Indicates if the graph has been changed substantially bearing in mind the connections of its nodes and store the checksum value of the graph in the preferences to later comparison + /// + /// + private bool HasSubstantialCheckSum() + { + bool substantialChecksum = false; + string graphId = Model.CurrentWorkspace.Guid.ToString(); + + GraphChecksumItem checksumItem = PreferenceSettings.GraphChecksumItemsList.Where(i => i.GraphId == graphId).FirstOrDefault(); + if (checksumItem != null) + { + if (checksumItem.Checksum != currentWorkspaceViewModel.Checksum) + { + PreferenceSettings.GraphChecksumItemsList.Remove(checksumItem); + PreferenceSettings.GraphChecksumItemsList.Add(new GraphChecksumItem() { GraphId = graphId, Checksum = currentWorkspaceViewModel.Checksum }); + substantialChecksum = true; + } + } + else + { + PreferenceSettings.GraphChecksumItemsList.Add(new GraphChecksumItem() { GraphId = graphId, Checksum = currentWorkspaceViewModel.Checksum }); + substantialChecksum = true; + } + return substantialChecksum; + } + private void InternalSaveAs(string path, SaveContext saveContext, bool isBackup = false) { try { Model.Logger.Log(String.Format(Properties.Resources.SavingInProgress, path)); CurrentSpaceViewModel.Save(path, isBackup, Model.EngineController, saveContext); - if (!isBackup) AddToRecentFiles(path); - if (currentWorkspaceViewModel?.IsHomeSpace ?? true) - Model.Logger.Log("The Workspace is valid for FDX : " + (HomeSpace.HasRunWithoutCrash && Model.CurrentWorkspace.IsValidForFDX).ToString()); + + if (!isBackup) + { + AddToRecentFiles(path); + + if ((currentWorkspaceViewModel?.IsHomeSpace ?? true) && HomeSpace.HasRunWithoutCrash && Model.CurrentWorkspace.IsValidForFDX && currentWorkspaceViewModel.Checksum != string.Empty) + { + Model.Logger.Log("The Workspace is valid for FDX"); + Model.Logger.Log("The Workspace id is : " + currentWorkspaceViewModel.Model.Guid.ToString()); + Model.Logger.Log("The Workspace checksum is : " + currentWorkspaceViewModel.Checksum); + Model.Logger.Log("The Workspace has Substantial checksum, so is ready to send to FDX : " + HasSubstantialCheckSum().ToString()); + } + } } catch (Exception ex) { @@ -2241,8 +2278,16 @@ internal void ShowPackageManager(object parameters) } else { - var param = (string)parameters; - OnRequestPackageManagerDialog(this, new OpenPackageManagerEventArgs(param)); + //When we pass the PackageManagerSizeEventArgs means that we want to start the PackageManagerView with a specific Width and Height + if (parameters is PackageManagerSizeEventArgs) + { + OnRequestPackageManagerDialog(this, parameters as PackageManagerSizeEventArgs); + } + else + { + var param = (string)parameters; + OnRequestPackageManagerDialog(this, new OpenPackageManagerEventArgs(param)); + } } } @@ -2791,7 +2836,7 @@ public void SaveImage(object parameters) { OnRequestSaveImage(this, new ImageSaveEventArgs(parameters.ToString())); - Dynamo.Logging.Analytics.TrackCommandEvent("ImageCapture", + Dynamo.Logging.Analytics.TrackTaskCommandEvent("ImageCapture", "NodeCount", CurrentSpace.Nodes.Count()); } @@ -3266,7 +3311,7 @@ private void ExportToSTL(object parameter) { BackgroundPreviewViewModel.ExportToSTL(_fileDialog.FileName, HomeSpace.Name); - Dynamo.Logging.Analytics.TrackCommandEvent("ExportToSTL"); + Dynamo.Logging.Analytics.TrackTaskCommandEvent("ExportToSTL"); } } diff --git a/src/DynamoCoreWpf/ViewModels/Core/WorkspaceViewModel.cs b/src/DynamoCoreWpf/ViewModels/Core/WorkspaceViewModel.cs index 25d88a86de4..38e8fb18017 100644 --- a/src/DynamoCoreWpf/ViewModels/Core/WorkspaceViewModel.cs +++ b/src/DynamoCoreWpf/ViewModels/Core/WorkspaceViewModel.cs @@ -357,6 +357,106 @@ public bool IsHomeSpace get { return Model == DynamoViewModel.HomeSpace; } } + /// + /// Returns the Json representation of the current graph + /// + [JsonIgnore] + internal JObject JsonRepresentation { get; set; } + + /// + /// Returns the stringified representation of the connected nodes + /// + [JsonIgnore] + public string Checksum + { + get + { + List nodeInfoConnections = new List(); + JObject jsonWorkspace = JsonRepresentation; + var nodes = jsonWorkspace["Nodes"]; + + List nodeIds = new List(); + foreach (JObject node in nodes) + { + var nodeProperties = node.Children(); + JProperty id = nodeProperties.FirstOrDefault(x => x.Name == "Id"); + nodeIds.Add(id.Value.ToString()); + } + + nodeIds.Sort(); + + foreach (string nodeId in nodeIds) + { + List outputIds = new List(); + var node = jsonWorkspace["Nodes"].Where(t => t.Value("Id") == nodeId).Select(t => t).FirstOrDefault(); + var outputsProperty = node.Children().FirstOrDefault(x => x.Name == "Outputs"); + var outputs = (JArray)outputsProperty.Value; + int outputIndex = 1; + + foreach (JObject output in outputs) + { + var outputProperties = output.Children(); + JProperty outputId = outputProperties.FirstOrDefault(x => x.Name == "Id"); + outputIds.Add(outputId.Value.ToString()); + + var connectorsProperty = jsonWorkspace["Connectors"].Where(t => t.Value("Start") == outputId.Value.ToString()); + + foreach (var connector in connectorsProperty) + { + var connectorProperties = connector.Children(); + JProperty endProperty = connectorProperties.FirstOrDefault(x => x.Name == "End"); + string inputId = (String)endProperty.Value; + + var outputConnectedNode = GetNodeByInputId(inputId, jsonWorkspace); + nodeInfoConnections.Add(nodeId + "|[" + outputIndex.ToString() + "|" + outputConnectedNode.Item1 + "|" + outputConnectedNode.Item2.ToString() + "]"); + } + outputIndex++; + } + } + return nodeInfoConnections.Count > 0 ? string.Join(",", nodeInfoConnections) : string.Empty; + } + } + + Tuple GetNodeByInputId(string inputId, JObject jsonWorkspace) + { + var nodes = jsonWorkspace["Nodes"]; + + string nodeId = string.Empty; + int connectedInputIndex = 1; + bool foundNode = false; + + foreach (var node in nodes) + { + if (!foundNode) + { + nodeId = string.Empty; + connectedInputIndex = 1; + + var nodeProperties = node.Children(); + JProperty nodeProperty = nodeProperties.FirstOrDefault(x => x.Name == "Id"); + nodeId = (String)nodeProperty.Value; + + JProperty nodeInputs = nodeProperties.FirstOrDefault(x => x.Name == "Inputs"); + var inputs = (JArray)nodeInputs.Value; + + foreach (JObject input in inputs) + { + var inputProperties = input.Children(); + JProperty connectedNodeInputId = inputProperties.FirstOrDefault(x => x.Name == "Id"); + + if ((String)connectedNodeInputId.Value == inputId) + { + foundNode = true; + break; + } + connectedInputIndex++; + } + } + } + + return new Tuple(nodeId, connectedInputIndex); + } + [JsonIgnore] public bool HasUnsavedChanges { @@ -591,6 +691,16 @@ internal void ZoomOutInternal() ResetFitViewToggle(null); } + internal JObject GetJsonRepresentation(EngineController engine = null) + { + // Step 1: Serialize the workspace. + var json = Model.ToJson(engine); + var json_parsed = JObject.Parse(json); + + // Step 2: Add the View. + return AddViewBlockToJSON(json_parsed); + } + /// /// WorkspaceViewModel's Save method does a two-part serialization. First, it serializes the Workspace, /// then adds a View property to serialized Workspace, and sets its value to the serialized ViewModel. @@ -616,14 +726,11 @@ internal void Save(string filePath, bool isBackup = false, EngineController engi //set the name before serializing model. this.Model.setNameBasedOnFileName(filePath, isBackup); - // Stage 1: Serialize the workspace. - var json = Model.ToJson(engine); - var json_parsed = JObject.Parse(json); - // Stage 2: Add the View. - var jo = AddViewBlockToJSON(json_parsed); + // Stage 1: Serialize the workspace and the View + var jo = GetJsonRepresentation(engine); - // Stage 3: Save + // Stage 2: Save string saveContent; if(saveContext == SaveContext.SaveAs && !isBackup) { @@ -645,19 +752,26 @@ internal void Save(string filePath, bool isBackup = false, EngineController engi } } } - - saveContent = GuidUtility.UpdateWorkspaceGUIDs(jo.ToString()); + saveContent = GuidUtility.UpdateWorkspaceGUIDs(jo.ToString()); } else { saveContent = jo.ToString(); - } - File.WriteAllText(filePath, saveContent); + } + File.WriteAllText(filePath, saveContent); + // Handle Workspace or CustomNodeWorkspace related non-serialization internal logic // Only for actual save, update file path and recent file list + // The assignation of the JsonRepresentation and Guid is only for the checksum flow, it will grab info only from .dyn files if (!isBackup) { + if (Path.GetExtension(filePath).Equals(".dyn")) + { + JsonRepresentation = JObject.Parse(saveContent); + DynamoViewModel.Workspaces[0].Model.Guid = new Guid(JsonRepresentation.Properties().First(p => p.Name == "Uuid").Value.ToString()); + } + Model.FileName = filePath; Model.OnSaved(); } @@ -1567,7 +1681,7 @@ private void DoGraphAutoLayout(object o) Model.DoGraphAutoLayout(); DynamoViewModel.RaiseCanExecuteUndoRedo(); - Dynamo.Logging.Analytics.TrackCommandEvent("GraphLayout"); + Dynamo.Logging.Analytics.TrackTaskCommandEvent("GraphLayout"); } private static bool CanDoGraphAutoLayout(object o) @@ -1639,7 +1753,7 @@ internal void CollapseSelectedNodes() DynamoViewModel.Model.CustomNodeManager.Collapse(selectedNodes, selectedNotes, Model, DynamoModel.IsTestMode, args)); - Dynamo.Logging.Analytics.TrackCommandEvent("NewCustomNode", + Dynamo.Logging.Analytics.TrackTaskCommandEvent("NewCustomNode", "NodeCount", selectedNodes.Count()); } diff --git a/src/DynamoCoreWpf/ViewModels/Menu/PreferencesViewModel.cs b/src/DynamoCoreWpf/ViewModels/Menu/PreferencesViewModel.cs index a48e9d6fb5b..6ea260d6e66 100644 --- a/src/DynamoCoreWpf/ViewModels/Menu/PreferencesViewModel.cs +++ b/src/DynamoCoreWpf/ViewModels/Menu/PreferencesViewModel.cs @@ -1066,7 +1066,7 @@ public bool IsDynamoRevit { // HostAnalyticsInfo is not set when this is invoked?? //return this.dynamoViewModel.Model.HostAnalyticsInfo.HostName.Equals("Dynamo Revit"); - var host = this.dynamoViewModel.Model.HostAnalyticsInfo.HostName; + var host = DynamoModel.HostAnalyticsInfo.HostName; if (host != null) { @@ -1101,6 +1101,17 @@ public bool NodeAutocompleteIsChecked } } + /// + /// If MLAutocompleteTOU is approved + /// + internal bool IsMLAutocompleteTOUApproved + { + get + { + return preferenceSettings.IsMLAutocompleteTOUApproved; + } + } + /// /// Controls if the the Node autocomplete Machine Learning option is checked for the radio buttons /// diff --git a/src/DynamoCoreWpf/ViewModels/PackageManager/PackageItemRootViewModel.cs b/src/DynamoCoreWpf/ViewModels/PackageManager/PackageItemRootViewModel.cs index c119e8991c6..f14f7df8a19 100644 --- a/src/DynamoCoreWpf/ViewModels/PackageManager/PackageItemRootViewModel.cs +++ b/src/DynamoCoreWpf/ViewModels/PackageManager/PackageItemRootViewModel.cs @@ -1,12 +1,15 @@ -īģŋusing System; +using System; using System.Collections.Generic; using System.Collections.ObjectModel; +using System.IO; +using System.Linq; +using Dynamo.Utilities; namespace Dynamo.PackageManager.UI { public enum DependencyType { - CustomNode, Assembly, File + CustomNode, Assembly, File, Folder, CustomNodePreview } public class PackageItemRootViewModel : PackageItemViewModel @@ -15,18 +18,38 @@ public class PackageItemRootViewModel : PackageItemViewModel /// The items inside of the browser item /// private ObservableCollection _items = new ObservableCollection(); + private ObservableCollection _childitems = new ObservableCollection(); public override ObservableCollection Items { get { return _items; } set { _items = value; } } + /// + /// This collection contains all nested items, if any + /// Will only contain items if a Folder. Nested items can be Files (custon nodes, assemblies, files) or other Folders + /// + public ObservableCollection ChildItems { get { return _childitems; } set { _childitems = value; } } /// /// The name of this item, regardless of which constructor was used. /// public string DisplayName { get; } - + /// /// The file path of this item (if any), regardless of which constructor was used. /// public string FilePath { get; } - + + /// + /// The folder where this item is located. For CustomNode this is empty + /// + public string DirectoryName { get; private set; } + + /// + /// Shows if this item is a nested item to another, i.e. belongs to its 'ChildItems' collection + /// + internal bool isChild; + + /// + /// Custom Node + /// + /// custom node definition public PackageItemRootViewModel(CustomNodeDefinition def) { this.Height = 32; @@ -34,19 +57,30 @@ public PackageItemRootViewModel(CustomNodeDefinition def) this.Definition = def; this.DisplayName = def.DisplayName; this.FilePath = String.Empty; + this.DirectoryName = String.Empty; this.BuildDependencies(new HashSet()); } + /// + /// Assembly + /// + /// package assembly public PackageItemRootViewModel(PackageAssembly assembly) { this.Height = 32; this.DependencyType = DependencyType.Assembly; this.Assembly = assembly; this.DisplayName = assembly.Name; - this.FilePath = assembly.Assembly.Location; + this.FilePath = assembly.LocalFilePath; + this.DirectoryName = Path.GetDirectoryName(this.FilePath); this.BuildDependencies(new HashSet()); + this.isChild = true; } + /// + /// File + /// + /// file info public PackageItemRootViewModel(System.IO.FileInfo fileInfo) { this.Height = 32; @@ -54,7 +88,135 @@ public PackageItemRootViewModel(System.IO.FileInfo fileInfo) this.FileInfo = fileInfo; this.DisplayName = fileInfo.Name; this.FilePath = fileInfo.FullName; + this.DirectoryName = Path.GetDirectoryName(fileInfo.FullName); this.BuildDependencies(new HashSet()); + this.isChild = true; + } + + /// + /// Folder + /// + /// + public PackageItemRootViewModel(string folderName) + { + this.DependencyType = DependencyType.Folder; + this.DisplayName = Path.GetFileName(folderName); + this.DirectoryName = folderName; + } + + /// + /// Custom Node Preview + /// + /// + /// + public PackageItemRootViewModel(string fileName, string filePath) + { + this.DependencyType = DependencyType.CustomNodePreview; + this.DisplayName = fileName; + this.FilePath = filePath; + this.DirectoryName = Path.GetDirectoryName(filePath); + this.isChild = true; + } + + internal void AddChildren(List items) + { + foreach(var item in items) + { + AddChildren(item); + } + } + + internal void AddChildren(PackageItemRootViewModel item) + { + if (this.ChildItems.Contains(item)) return; + this.ChildItems.Add(item); + } + + internal void AddChild(PackageItemRootViewModel elem) + { + if (elem.DependencyType.Equals(DependencyType.CustomNode)) return; + + var di = new DirectoryInfo(elem.DirectoryName); + PackageItemRootViewModel subFolder; + + Dictionary existingSubFolders = GetAllSubfolderItems(this); + + if (di.FullName == this.DirectoryName) + { + this.ChildItems.Add(elem); + return; + } + + while (di.Parent != null) + { + // if we already have a subfodler item with that name, + // add this element's children to its children instead of creating a new subfolder branch + if(existingSubFolders.Keys.Contains(elem.DirectoryName)) + { + existingSubFolders[elem.DirectoryName].ChildItems.AddRange(elem.ChildItems); + return; + } + if (di.Parent.FullName == this.DirectoryName) + { + this.ChildItems.Add(elem); + return; + } + subFolder = new PackageItemRootViewModel(di.Parent.FullName); + subFolder.isChild = true; + subFolder.ChildItems.Add(elem); + elem = subFolder; + di = di.Parent; + } + } + + private Dictionary GetAllSubfolderItems(PackageItemRootViewModel elem) + { + if(elem.ChildItems.Count == 0) return new Dictionary(); + + var existingSubFolders = new Dictionary(); + foreach (var child in elem.ChildItems) + { + if (child.DependencyType != DependencyType.Folder) continue; + existingSubFolders[child.DirectoryName] = child; + existingSubFolders = existingSubFolders.Concat(GetAllSubfolderItems(child)) + .ToDictionary(x => x.Key, x => x.Value); + } + return existingSubFolders; + } + + /// + /// Recursivelly search and return all children files and folders under a PackageItemRootViewModel root item + /// + /// The root item to search + internal static List GetFiles(PackageItemRootViewModel packageItemRootViewModel) + { + if(packageItemRootViewModel.ChildItems.Count == 0) return new List { packageItemRootViewModel }; + + var allFilesAndFolders = new List { packageItemRootViewModel }; + + foreach (var child in packageItemRootViewModel.ChildItems) + { + allFilesAndFolders.AddRange(GetFiles(child)); + } + + return allFilesAndFolders; + } + + /// + /// Performs the recursive GetFiles search and return on a list of PackageItemRootViewModel items + /// + /// + /// + internal static List GetFiles(List packageItemRootViewModels) + { + var allFilesAndFolders = new List (); + + foreach(var item in packageItemRootViewModels) + { + allFilesAndFolders.AddRange(GetFiles(item)); + } + + return allFilesAndFolders; } } } diff --git a/src/DynamoCoreWpf/ViewModels/PackageManager/PackageItemViewModel.cs b/src/DynamoCoreWpf/ViewModels/PackageManager/PackageItemViewModel.cs index 776d64ecfd2..dbf7adf2e4b 100644 --- a/src/DynamoCoreWpf/ViewModels/PackageManager/PackageItemViewModel.cs +++ b/src/DynamoCoreWpf/ViewModels/PackageManager/PackageItemViewModel.cs @@ -40,6 +40,7 @@ public void AddChild(PackageItemInternalViewModel elem) this.Items.Add(elem); } + /// /// Whether the item is visible or not /// diff --git a/src/DynamoCoreWpf/ViewModels/PackageManager/PackageManagerClientViewModel.cs b/src/DynamoCoreWpf/ViewModels/PackageManager/PackageManagerClientViewModel.cs index dea21f98741..7ac62388b67 100644 --- a/src/DynamoCoreWpf/ViewModels/PackageManager/PackageManagerClientViewModel.cs +++ b/src/DynamoCoreWpf/ViewModels/PackageManager/PackageManagerClientViewModel.cs @@ -894,7 +894,7 @@ internal async void ExecutePackageDownload(string name, PackageVersion package, // Determine if there are any dependencies that are made with a newer version // of Dynamo (this includes the root package) - var dynamoVersion = VersionUtilities.PartialParse(DynamoViewModel.Model.Version); + var dynamoVersion = VersionUtilities.PartialParse(DynamoModel.Version); var futureDeps = newPackageHeaders.Where(dep => VersionUtilities.PartialParse(dep.engine_version) > dynamoVersion); // If any of the required packages use a newer version of Dynamo, show a dialog to the user diff --git a/src/DynamoCoreWpf/ViewModels/PackageManager/PackageManagerSearchElementViewModel.cs b/src/DynamoCoreWpf/ViewModels/PackageManager/PackageManagerSearchElementViewModel.cs index 382b03e27cc..783035dfe4b 100644 --- a/src/DynamoCoreWpf/ViewModels/PackageManager/PackageManagerSearchElementViewModel.cs +++ b/src/DynamoCoreWpf/ViewModels/PackageManager/PackageManagerSearchElementViewModel.cs @@ -21,7 +21,48 @@ public class PackageManagerSearchElementViewModel : BrowserItemViewModel, IEquat public ICommand VisitRepositoryCommand { get; set; } public ICommand DownloadLatestToCustomPathCommand { get; set; } - public new PackageManagerSearchElement Model { get; internal set; } + /// + /// VM IsDeprecated property + /// + public bool IsDeprecated { get { return this.SearchElementModel.IsDeprecated; } } + /// + /// VM Hosts property + /// + public List Hosts { get { return this.SearchElementModel.Hosts; } } + /// + /// VM LatestVersionCreated property + /// + public string LatestVersionCreated { get { return this.SearchElementModel.LatestVersionCreated; } } + /// + /// VM Downloads property + /// + public int Downloads { get { return this.SearchElementModel.Downloads; } } + /// + /// VM Votes property + /// + public int Votes { get { return this.SearchElementModel.Votes; } } + /// + /// If the element has an upvote from the current user + /// + public bool HasUpvote { get { return this.SearchElementModel.HasUpvote; } } + /// + /// VM Package Version property + /// + public IEnumerable PkgVersion { get { return this.SearchElementModel.PackageVersions; } } + /// + /// VM Maintainers property + /// + public string Maintainers { get { return this.SearchElementModel.Maintainers; } } + /// + /// VM LatestVersion property + /// + public string LatestVersion { get { return this.SearchElementModel.LatestVersion; } } + /// + /// VM Name Property + /// + public string Name { get { return this.SearchElementModel.Name; } } + + public PackageManagerSearchElement SearchElementModel { get; internal set; } /// @@ -40,28 +81,28 @@ public class PackageManagerSearchElementViewModel : BrowserItemViewModel, IEquat public PackageManagerSearchElementViewModel(PackageManagerSearchElement element, bool canLogin, bool install, bool isEnabledForInstall = true) : base(element) { - this.Model = element; + this.SearchElementModel = element; CanInstall = install; IsEnabledForInstall = isEnabledForInstall; - this.SelectedVersion = this.Model.LatestVersion; + this.SelectedVersion = this.SearchElementModel.LatestVersion; - this.ToggleIsExpandedCommand = new DelegateCommand(() => this.Model.IsExpanded = !this.Model.IsExpanded); + this.ToggleIsExpandedCommand = new DelegateCommand(() => this.SearchElementModel.IsExpanded = !this.SearchElementModel.IsExpanded); this.DownloadLatestCommand = new DelegateCommand( - () => OnRequestDownload(Model.Header.versions.First(x => x.version.Equals(SelectedVersion)), false), - () => !Model.IsDeprecated && CanInstall); - this.DownloadLatestToCustomPathCommand = new DelegateCommand(() => OnRequestDownload(Model.Header.versions.First(x => x.version.Equals(SelectedVersion)), true)); + () => OnRequestDownload(SearchElementModel.Header.versions.First(x => x.version.Equals(SelectedVersion)), false), + () => !SearchElementModel.IsDeprecated && CanInstall); + this.DownloadLatestToCustomPathCommand = new DelegateCommand(() => OnRequestDownload(SearchElementModel.Header.versions.First(x => x.version.Equals(SelectedVersion)), true)); - this.UpvoteCommand = new DelegateCommand(Model.Upvote, () => canLogin); + this.UpvoteCommand = new DelegateCommand(SearchElementModel.Upvote, () => canLogin); // TODO: Remove the initialization of the UI command in Dynamo 3.0 - this.DownvoteCommand = new DelegateCommand(Model.Downvote, () => canLogin); + this.DownvoteCommand = new DelegateCommand(SearchElementModel.Downvote, () => canLogin); this.VisitSiteCommand = - new DelegateCommand(() => GoToUrl(FormatUrl(Model.SiteUrl)), () => !String.IsNullOrEmpty(Model.SiteUrl)); + new DelegateCommand(() => GoToUrl(FormatUrl(SearchElementModel.SiteUrl)), () => !String.IsNullOrEmpty(SearchElementModel.SiteUrl)); this.VisitRepositoryCommand = - new DelegateCommand(() => GoToUrl(FormatUrl(Model.RepositoryUrl)), () => !String.IsNullOrEmpty(Model.RepositoryUrl)); + new DelegateCommand(() => GoToUrl(FormatUrl(SearchElementModel.RepositoryUrl)), () => !String.IsNullOrEmpty(SearchElementModel.RepositoryUrl)); } /// @@ -132,7 +173,7 @@ public List>> Versions get { return - Model.Header.versions.Select( + SearchElementModel.Header.versions.Select( x => new Tuple>( x, new DelegateCommand((p) => OnRequestDownload(x, p.Equals("true"))) )).Reverse().ToList(); @@ -158,7 +199,7 @@ public void OnRequestDownload(PackageVersion version, bool downloadToCustomPath) } if (RequestDownload != null) - RequestDownload(this.Model, version, downloadPath); + RequestDownload(this.SearchElementModel, version, downloadPath); } /// @@ -170,7 +211,7 @@ public void OnRequestDownload(PackageVersion version, bool downloadToCustomPath) public bool Equals(PackageManagerSearchElementViewModel other) { if (other == null) return false; - return this.Model.Id == other.Model.Id; + return this.SearchElementModel.Id == other.SearchElementModel.Id; } /// @@ -179,7 +220,7 @@ public bool Equals(PackageManagerSearchElementViewModel other) /// HashCode of package public override int GetHashCode() { - return Model.Id.GetHashCode(); + return SearchElementModel.Id.GetHashCode(); } private string GetDownloadPath() diff --git a/src/DynamoCoreWpf/ViewModels/PackageManager/PackageManagerSearchViewModel.cs b/src/DynamoCoreWpf/ViewModels/PackageManager/PackageManagerSearchViewModel.cs index 73939d10f02..36cb8d1bd11 100644 --- a/src/DynamoCoreWpf/ViewModels/PackageManager/PackageManagerSearchViewModel.cs +++ b/src/DynamoCoreWpf/ViewModels/PackageManager/PackageManagerSearchViewModel.cs @@ -304,8 +304,12 @@ public string SearchText get { return _SearchText; } set { - _SearchText = value; - RaisePropertyChanged("SearchText"); + if(_SearchText != value) + { + _SearchText = value; + SearchAndUpdateResults(); + RaisePropertyChanged("SearchText"); + } } } @@ -471,13 +475,16 @@ public bool InitialResultsLoaded /// public PackageManagerClientViewModel PackageManagerClientViewModel { get; private set; } + /// + /// A getter boolean identifying if the user is currently logged in + /// + public bool IsLoggedIn { get { return PackageManagerClientViewModel.AuthenticationManager.IsLoggedIn(); } } + /// /// Current selected filter hosts /// public List SelectedHosts { get; set; } - private EntryDictionary EntryDictionary; - /// /// Command to clear the completed package downloads /// @@ -558,7 +565,6 @@ internal PackageManagerSearchViewModel() SearchResults = new ObservableCollection(); InfectedPackages = new ObservableCollection(); MaxNumSearchResults = 35; - EntryDictionary = new EntryDictionary(); ClearCompletedCommand = new DelegateCommand(ClearCompleted, CanClearCompleted); SortCommand = new DelegateCommand(Sort, CanSort); SearchSortCommand = new DelegateCommand(Sort, CanSort); @@ -630,8 +636,6 @@ private void PopulateMyPackages() // We should have already populated the CachedPackageList by this step if (PackageManagerClientViewModel.CachedPackageList == null || !PackageManagerClientViewModel.CachedPackageList.Any()) return; - // We need the user to be logged in, otherwise there is no point in runnig this routine - if (PackageManagerClientViewModel.LoginState != Greg.AuthProviders.LoginState.LoggedIn) return; List myPackages = new List(); @@ -647,12 +651,26 @@ private void PopulateMyPackages() var pkgs = PackageManagerClientViewModel.CachedPackageList.Where(x => x.Maintainers != null && x.Maintainers.Contains(name)).ToList(); foreach(var pkg in pkgs) { - myPackages.Add(new PackageManagerSearchElementViewModel(pkg, false)); + var p = new PackageManagerSearchElementViewModel(pkg, false); + p.RequestDownload += this.PackageOnExecuted; + + myPackages.Add(p); } SearchMyResults = new ObservableCollection(myPackages); } + private void ClearMySearchResults() + { + if (this.SearchMyResults == null) return; + foreach (var ele in this.SearchMyResults) + { + ele.RequestDownload -= PackageOnExecuted; + } + + this.SearchMyResults = null; + } + /// /// Sort the default package results in the view based on the sorting key and sorting direction. /// @@ -977,16 +995,6 @@ public void Refresh() pkgs.Sort((e1, e2) => e1.Name.ToLower().CompareTo(e2.Name.ToLower())); LastSync = pkgs; - EntryDictionary = new EntryDictionary(); - - foreach (var pkg in pkgs) - { - EntryDictionary.Add(pkg, pkg.Name); - EntryDictionary.Add(pkg, pkg.Description); - EntryDictionary.Add(pkg, pkg.Maintainers); - EntryDictionary.Add(pkg, pkg.Keywords); - } - PopulateMyPackages(); // adding } @@ -1017,9 +1025,9 @@ public void RefreshAndSearchAsync() ClearSearchResults(); foreach (var result in t.Result) { - if (result.Model != null) + if (result.SearchElementModel != null) { - AddPackageToSearchIndex(result.Model, iDoc); + AddPackageToSearchIndex(result.SearchElementModel, iDoc); } this.AddToSearchResults(result); } @@ -1059,19 +1067,24 @@ public bool TimedOut } } + private System.Timers.Timer aTimer; + private void StartTimer() { - var aTimer = new System.Timers.Timer(); - aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent); + if(aTimer == null) + aTimer = new System.Timers.Timer(); + + aTimer.Elapsed += OnTimedEvent; aTimer.Interval = MAX_LOAD_TIME; aTimer.AutoReset = false; aTimer.Enabled = true; + aTimer.Start(); } private void OnTimedEvent(object sender, ElapsedEventArgs e) { var aTimer = (System.Timers.Timer)sender; - aTimer.Dispose(); + aTimer.Stop(); // If we have managed to get all the results // Simply dispose of the timer @@ -1112,11 +1125,13 @@ internal void AddToSearchResults(PackageManagerSearchElementViewModel element) internal void ClearSearchResults() { + if (this.SearchResults == null) return; foreach (var ele in this.SearchResults) { ele.RequestDownload -= PackageOnExecuted; + ele.RequestShowFileDialog -= OnRequestShowFileDialog; + ele?.Dispose(); } - this.SearchResults.Clear(); } @@ -1162,7 +1177,7 @@ void canInstallHandler(object o, PropertyChangedEventArgs eArgs) // the Downloads collection before Download/Install begins. if (eArgs.PropertyName == nameof(PackageDownloadHandle.DownloadState)) { - PackageManagerSearchElementViewModel sr = SearchResults.FirstOrDefault(x => x.Model.Name == handle.Name); + PackageManagerSearchElementViewModel sr = SearchResults.FirstOrDefault(x => x.SearchElementModel.Name == handle.Name); if (sr == null) return; sr.CanInstall = CanInstallPackage(o as PackageDownloadHandle); @@ -1237,6 +1252,8 @@ internal void SearchAndUpdateResults(string query) else { results = Search(query, true); + results = ApplyNonHostFilters(results); + results = ApplyHostFilters(results); } this.ClearSearchResults(); @@ -1304,14 +1321,14 @@ internal void SearchAndUpdateResults() /// /// /// - internal IEnumerable Filter(IEnumerable list) + internal IEnumerable ApplyHostFilters(IEnumerable list) { // No need to filter by host if nothing selected if (SelectedHosts.Count == 0) return list; IEnumerable filteredList = null; filteredList = filteredList ?? - list.Where(x => x.Model.Hosts != null && SelectedHosts.Intersect(x.Model.Hosts).Count() == SelectedHosts.Count()) ?? Enumerable.Empty(); + list.Where(x => x.SearchElementModel.Hosts != null && SelectedHosts.Intersect(x.SearchElementModel.Hosts).Count() == SelectedHosts.Count()) ?? Enumerable.Empty(); return filteredList; } @@ -1330,15 +1347,11 @@ internal IEnumerable GetAllPackages() // Filter based on user preference // A package has depndencies if the number of direct_dependency_ids is more than 1 - list = Filter(LastSync.Where(x => NonHostFilter.First(f => f.FilterName.Equals(Resources.PackageSearchViewContextMenuFilterDeprecated)).OnChecked ? x.IsDeprecated : !x.IsDeprecated) - .Where(x => NonHostFilter.First(f => f.FilterName.Equals(Resources.PackageManagerPackageNew)).OnChecked ? IsNewPackage(x) : true) - .Where(x => NonHostFilter.First(f => f.FilterName.Equals(Resources.PackageManagerPackageUpdated)).OnChecked ? IsUpdatedPackage(x) : true) - .Where(x => !NonHostFilter.First(f => f.FilterName.Equals(Resources.PackageSearchViewContextMenuFilterDependencies)).OnChecked ? true : PackageHasDependencies(x)) - .Where(x => !NonHostFilter.First(f => f.FilterName.Equals(Resources.PackageSearchViewContextMenuFilterNoDependencies)).OnChecked ? true : !PackageHasDependencies(x)) - ?.Select(x => new PackageManagerSearchElementViewModel(x, + var initialResults = LastSync?.Select(x => new PackageManagerSearchElementViewModel(x, PackageManagerClientViewModel.AuthenticationManager.HasAuthProvider, - CanInstallPackage(x.Name), isEnabledForInstall))) - .ToList(); + CanInstallPackage(x.Name), isEnabledForInstall)); + list = ApplyNonHostFilters(initialResults); + list = ApplyHostFilters(list).ToList(); Sort(list, this.SortingKey); @@ -1353,6 +1366,21 @@ internal IEnumerable GetAllPackages() return list; } + /// + /// Applies non-host filters to a list of PackageManagerSearchElementViewModel + /// + /// The list to filter + /// + private List ApplyNonHostFilters(IEnumerable list) + { + return list.Where(x => NonHostFilter.First(f => f.FilterName.Equals(Resources.PackageSearchViewContextMenuFilterDeprecated)).OnChecked ? x.SearchElementModel.IsDeprecated : !x.SearchElementModel.IsDeprecated) + .Where(x => NonHostFilter.First(f => f.FilterName.Equals(Resources.PackageManagerPackageNew)).OnChecked ? IsNewPackage(x.SearchElementModel) : true) + .Where(x => NonHostFilter.First(f => f.FilterName.Equals(Resources.PackageManagerPackageUpdated)).OnChecked ? IsUpdatedPackage(x.SearchElementModel) : true) + .Where(x => !NonHostFilter.First(f => f.FilterName.Equals(Resources.PackageSearchViewContextMenuFilterDependencies)).OnChecked ? true : PackageHasDependencies(x.SearchElementModel)) + .Where(x => !NonHostFilter.First(f => f.FilterName.Equals(Resources.PackageSearchViewContextMenuFilterNoDependencies)).OnChecked ? true : !PackageHasDependencies(x.SearchElementModel)) + .ToList(); + } + /// /// Checks if a package has any dependencies (will always have at least itself as 1 dependency) /// @@ -1484,27 +1512,27 @@ private static void Sort(List results, Pac switch (key) { case PackageSortingKey.Name: - results.Sort((e1, e2) => e1.Model.Name.ToLower().CompareTo(e2.Model.Name.ToLower())); + results.Sort((e1, e2) => e1.SearchElementModel.Name.ToLower().CompareTo(e2.SearchElementModel.Name.ToLower())); break; case PackageSortingKey.Downloads: - results.Sort((e1, e2) => e1.Model.Downloads.CompareTo(e2.Model.Downloads)); + results.Sort((e1, e2) => e1.SearchElementModel.Downloads.CompareTo(e2.SearchElementModel.Downloads)); break; case PackageSortingKey.LastUpdate: results.Sort((e1, e2) => e1.Versions.FirstOrDefault().Item1.created.CompareTo(e2.Versions.FirstOrDefault().Item1.created)); break; case PackageSortingKey.Votes: - results.Sort((e1, e2) => e1.Model.Votes.CompareTo(e2.Model.Votes)); + results.Sort((e1, e2) => e1.SearchElementModel.Votes.CompareTo(e2.SearchElementModel.Votes)); break; case PackageSortingKey.Maintainers: - results.Sort((e1, e2) => e1.Model.Maintainers.ToLower().CompareTo(e2.Model.Maintainers.ToLower())); + results.Sort((e1, e2) => e1.SearchElementModel.Maintainers.ToLower().CompareTo(e2.SearchElementModel.Maintainers.ToLower())); break; //This sorting key is applied to search results when user submits a search query on package manager search window, //it sorts in the following order: Not Deprecated Packages > search query in Name > Recently Updated case PackageSortingKey.Search: results.Sort((e1, e2) => { - int ret = e1.Model.IsDeprecated.CompareTo(e2.Model.IsDeprecated); - int i1 = e1.Model.Name.ToLower().IndexOf(query.ToLower(), StringComparison.InvariantCultureIgnoreCase); - int i2 = e2.Model.Name.ToLower().IndexOf(query.ToLower(), StringComparison.InvariantCultureIgnoreCase); + int ret = e1.SearchElementModel.IsDeprecated.CompareTo(e2.SearchElementModel.IsDeprecated); + int i1 = e1.SearchElementModel.Name.ToLower().IndexOf(query.ToLower(), StringComparison.InvariantCultureIgnoreCase); + int i2 = e2.SearchElementModel.Name.ToLower().IndexOf(query.ToLower(), StringComparison.InvariantCultureIgnoreCase); ret = ret != 0 ? ret : ((i1 == -1) ? int.MaxValue : i1).CompareTo((i2 == -1) ? int.MaxValue : i2); ret = ret != 0 ? ret : -e1.Versions.FirstOrDefault().Item1.created.CompareTo(e2.Versions.FirstOrDefault().Item1.created); return ret; @@ -1547,7 +1575,7 @@ public void ExecuteSelected() if (SearchResults.Count <= SelectedIndex) return; - SearchResults[SelectedIndex].Model.Execute(); + SearchResults[SelectedIndex].SearchElementModel.Execute(); } /// @@ -1564,12 +1592,50 @@ public void DisableSearchTextBox() /// /// Clear after closing down /// - internal void Close() + internal void PackageManagerViewClose() + { + SearchAndUpdateResults(String.Empty); // reset the search text property + InitialResultsLoaded = false; + TimedOut = false; + + RequestShowFileDialog -= OnRequestShowFileDialog; // adding this back in + + ClearSearchResults(); // also clear all SearchResults and unsubscribe + ClearMySearchResults(); + } + + /// + /// Remove PackageManagerSearchViewModel resources + /// + internal void Dispose() { + if(LastSync != null) + { + foreach(var package in LastSync) + { + package.UpvoteRequested -= PackageManagerClientViewModel.Model.Upvote; + } + LastSync.Clear(); + } + + nonHostFilter?.ForEach(f => f.PropertyChanged -= filter_PropertyChanged); + nonHostFilter.Clear(); + + if (aTimer != null) + { + aTimer.Stop(); + aTimer.Elapsed -= OnTimedEvent; + aTimer = null; + } + TimedOut = false; // reset the timedout screen InitialResultsLoaded = false; // reset the loading screen settings - RequestShowFileDialog -= OnRequestShowFileDialog; - nonHostFilter.ForEach(f => f.PropertyChanged -= filter_PropertyChanged); + + RequestShowFileDialog -= OnRequestShowFileDialog; // adding this back in + + ClearSearchResults(); // also clear all SearchResults and unsubscribe + ClearMySearchResults(); + } } } diff --git a/src/DynamoCoreWpf/ViewModels/PackageManager/PackageManagerViewModel.cs b/src/DynamoCoreWpf/ViewModels/PackageManager/PackageManagerViewModel.cs index 6844339f966..8474cf4e3ce 100644 --- a/src/DynamoCoreWpf/ViewModels/PackageManager/PackageManagerViewModel.cs +++ b/src/DynamoCoreWpf/ViewModels/PackageManager/PackageManagerViewModel.cs @@ -1,14 +1,16 @@ -using Dynamo.Controls; +using System; +using System.Collections.ObjectModel; using Dynamo.ViewModels; using NotificationObject = Dynamo.Core.NotificationObject; -using System.Collections.ObjectModel; namespace Dynamo.PackageManager { - public class PackageManagerViewModel : NotificationObject + public class PackageManagerViewModel : NotificationObject, IDisposable { private DynamoViewModel dynamoViewModel; private InstalledPackagesViewModel installedPackagesViewModel; + private double width = 1076; + private double height = 718; /// /// PreferenceViewModel containing the PackageManager paths and installed packages @@ -35,6 +37,35 @@ public class PackageManagerViewModel : NotificationObject /// public ObservableCollection Filters => installedPackagesViewModel.Filters; + + //Width of the PackageManagerView the default value is 1076 + public double Width + { + get + { + return width; + } + set + { + width = value; + RaisePropertyChanged(nameof(Width)); + } + } + + //Height of the PackageManagerView the default value is 718 + public double Height + { + get + { + return height; + } + set + { + height = value; + RaisePropertyChanged(nameof(Height)); + } + } + public PackageManagerViewModel(DynamoViewModel dynamoViewModel, PackageManagerSearchViewModel PkgSearchVM) { this.dynamoViewModel = dynamoViewModel; @@ -53,6 +84,12 @@ public PackageManagerViewModel(DynamoViewModel dynamoViewModel, PackageManagerSe PkgSearchVM.RegisterTransientHandlers(); LocalPackages.CollectionChanged += LocalPackages_CollectionChanged; + + // We are forced to make the update ourselves if the Preferences ViewModel has not been initialized yet + if (String.IsNullOrEmpty(PreferencesViewModel?.SelectedPackagePathForInstall)) + { + PreferencesViewModel.SelectedPackagePathForInstall = dynamoViewModel.PreferenceSettings.SelectedPackagePathForInstall; + } } private void LocalPackages_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e) @@ -69,5 +106,14 @@ private void InitializeInstalledPackages() } } + /// + /// Dispose method of the PackageManagerViewModel + /// + public void Dispose() + { + if (LocalPackages == null) return; + + LocalPackages.CollectionChanged -= LocalPackages_CollectionChanged; + } } } diff --git a/src/DynamoCoreWpf/ViewModels/PackageManager/PackageViewModel.cs b/src/DynamoCoreWpf/ViewModels/PackageManager/PackageViewModel.cs index f6bdc2c2e5f..f74bdd5365b 100644 --- a/src/DynamoCoreWpf/ViewModels/PackageManager/PackageViewModel.cs +++ b/src/DynamoCoreWpf/ViewModels/PackageManager/PackageViewModel.cs @@ -12,8 +12,8 @@ using Dynamo.PackageManager; using Dynamo.Wpf.Properties; using Dynamo.Wpf.Utilities; -using NotificationObject = Dynamo.Core.NotificationObject; using Prism.Commands; +using NotificationObject = Dynamo.Core.NotificationObject; namespace Dynamo.ViewModels { @@ -149,7 +149,7 @@ public bool HasNodeLibraries public bool HasCustomNodes { - get { return Model.LoadedCustomNodes.Any(); } + get { return Model.LoadedCustomNodes.Any(); } } public bool HasAssemblies @@ -183,12 +183,12 @@ public PackageViewModel(DynamoViewModel dynamoViewModel, Package model) ToggleTypesVisibleInManagerCommand = new DelegateCommand(() => { }, () => true); GetLatestVersionCommand = new DelegateCommand(() => { }, () => false); - PublishNewPackageVersionCommand = new DelegateCommand(() => ExecuteWithTou(PublishNewPackageVersion), () => CanPublish); + PublishNewPackageVersionCommand = new DelegateCommand(() => ExecuteWithTou(PublishNewPackageVersion), IsOwner); PublishNewPackageCommand = new DelegateCommand(() => ExecuteWithTou(PublishNewPackage), () => CanPublish); UninstallCommand = new DelegateCommand(Uninstall, CanUninstall); UnmarkForUninstallationCommand = new DelegateCommand(UnmarkForUninstallation, CanUnmarkForUninstallation); LoadCommand = new DelegateCommand(Load, CanLoad); - DeprecateCommand = new DelegateCommand(Deprecate, CanDeprecate); + DeprecateCommand = new DelegateCommand(Deprecate, IsOwner); UndeprecateCommand = new DelegateCommand(Undeprecate, CanUndeprecate); GoToRootDirectoryCommand = new DelegateCommand(GoToRootDirectory, () => true); @@ -408,7 +408,7 @@ private void Deprecate() packageManagerClient.Deprecate(Model.Name); } - private bool CanDeprecate() + private bool IsOwner() { if (!CanPublish) return false; return packageManagerClient.DoesCurrentUserOwnPackage(Model, dynamoModel.AuthenticationManager.Username); diff --git a/src/DynamoCoreWpf/ViewModels/PackageManager/PublishPackageViewModel.cs b/src/DynamoCoreWpf/ViewModels/PackageManager/PublishPackageViewModel.cs index b45a5779253..f1aeab43e50 100644 --- a/src/DynamoCoreWpf/ViewModels/PackageManager/PublishPackageViewModel.cs +++ b/src/DynamoCoreWpf/ViewModels/PackageManager/PublishPackageViewModel.cs @@ -3,9 +3,11 @@ using System.Collections.ObjectModel; using System.Collections.Specialized; using System.ComponentModel; +using System.Globalization; using System.IO; using System.Linq; using System.Reflection; +using System.Runtime.InteropServices; using System.Text.RegularExpressions; using System.Windows; using System.Windows.Forms; @@ -20,16 +22,52 @@ using Dynamo.Wpf.Utilities; using DynamoUtilities; using Greg.Requests; +using Prism.Commands; using PythonNodeModels; using Double = System.Double; -using String = System.String; using NotificationObject = Dynamo.Core.NotificationObject; -using Prism.Commands; +using String = System.String; namespace Dynamo.PackageManager { public delegate void PublishSuccessHandler(PublishPackageViewModel sender); + + /// + /// Keyword tag displaying under the keyword input text box + /// + public class KeywordTag : NotificationObject + { + /// + /// Name of the host + /// + public string Name { get; set; } + + private bool _onChecked; + /// + /// Triggers the remove action + /// + public bool OnChecked + { + get { return _onChecked; } + set + { + _onChecked = value; + + RaisePropertyChanged(nameof(OnChecked)); + } + } + + /// + /// Constructor + /// + /// Keyword name + public KeywordTag(string name) + { + Name = name; + } + } + /// /// The ViewModel for Package publishing public class PublishPackageViewModel : NotificationObject @@ -77,7 +115,7 @@ public HostComboboxEntry(string hostName) } } - public PublishPackageView Owner { get; set; } + public Window Owner { get; set; } /// /// A event called when publishing was a success @@ -106,11 +144,15 @@ public bool Uploading { _uploading = value; RaisePropertyChanged("Uploading"); - BeginInvoke(() => - { - SubmitCommand.RaiseCanExecuteChanged(); - PublishLocallyCommand.RaiseCanExecuteChanged(); - }); + // Can we try commenting out the can execute? + // The way async works here, when an error is returned from the response + // The Uploadling flag is set back to 'false' before the CanExecute code has reached it, + // as a result the error message is overriden. + //BeginInvoke(() => + //{ + // SubmitCommand.RaiseCanExecuteChanged(); + // PublishLocallyCommand.RaiseCanExecuteChanged(); + //}); } } @@ -180,6 +222,25 @@ public PackageUploadHandle.State UploadState } } + /// + /// UploadType property + /// + /// The type of the upload - local or online + /// + private PackageUploadHandle.UploadType _uploadType = PackageUploadHandle.UploadType.Local; + public PackageUploadHandle.UploadType UploadType + { + get { return _uploadType; } + set + { + if (_uploadType != value) + { + _uploadType = value; + RaisePropertyChanged("UploadType"); + } + } + } + /// /// Name property /// @@ -233,7 +294,7 @@ public string Keywords { if (_Keywords != value) { - value = value.Replace(',', ' ').ToLower().Trim(); + value = value.Replace(',', ' ').ToLower(); var options = RegexOptions.None; var regex = new Regex(@"[ ]{2,}", options); value = regex.Replace(value, @" "); @@ -245,11 +306,27 @@ public string Keywords } } + private ObservableCollection keywordsCollection = new ObservableCollection(); + + /// + /// A collection of dynamic non-hosted filters + /// such as New, Updated, Deprecated, Has/HasNoDependencies + /// + public ObservableCollection KeywordsCollection + { + get { return keywordsCollection; } + set + { + keywordsCollection = value; + RaisePropertyChanged(nameof(KeywordsCollection)); + } + } + /// /// KeywordList property /// /// A list of keywords, usually produced by parsing Keywords - public List KeywordList { get; set; } + public List KeywordList { get; set; } = new List(); /// /// FullVersion property @@ -264,7 +341,7 @@ public string FullVersion /// MinorVersion property /// /// The second element of the version - private string _MinorVersion = ""; + private string _MinorVersion = "0"; public string MinorVersion { get { return _MinorVersion; } @@ -290,7 +367,7 @@ public string MinorVersion /// BuildVersion property /// /// The third element of the version - private string _BuildVersion = ""; + private string _BuildVersion = "0"; public string BuildVersion { get { return _BuildVersion; } @@ -316,7 +393,7 @@ public string BuildVersion /// MajorVersion property /// /// The first element of the version - private string _MajorVersion = ""; + private string _MajorVersion = "0"; public string MajorVersion { get { return _MajorVersion; } @@ -564,6 +641,12 @@ public string MarkdownFilesDirectory /// A command which, when executed, submits the current package public DelegateCommand SubmitCommand { get; private set; } + /// + /// CancelCommand property + /// + /// A command which will clear the user interface and all underlaying data + public DelegateCommand CancelCommand { get; private set; } + /// /// PublishLocallyCommand property /// @@ -605,6 +688,11 @@ public string MarkdownFilesDirectory /// A command which, when executed, submits the current package public DelegateCommand ToggleMoreCommand { get; private set; } + /// + /// Sets the keywords tags based on the current KeywordList items + /// + public DelegateCommand SetKeywordsCommand { get; private set; } + /// /// The package used for this submission /// @@ -614,6 +702,24 @@ public string MarkdownFilesDirectory /// PackageContents property /// public ObservableCollection PackageContents { get; set; } = new ObservableCollection(); + public ObservableCollection PreviewPackageContents { get; set; } = new ObservableCollection(); + + private ObservableCollection _rootContents; + /// + /// A dedicated container for the files located under the current selected folder + /// + public ObservableCollection RootContents + { + get { return _rootContents; } + set + { + if (_rootContents != value) + { + _rootContents = value; + RaisePropertyChanged(nameof(RootContents)); + } + } + } /// /// CustomNodeDefinitions property @@ -636,6 +742,8 @@ public List CustomNodeDefinitions } } + private Dictionary CustomDyfFilepaths { get; set; } = new Dictionary(); + public List Assemblies { get; set; } /// @@ -738,8 +846,57 @@ public string CurrentWarningMessage } } - #endregion + private bool _retainFolderStructureOverride; + /// + /// Controls if the automatic folder structure should be used, or retain existing one + /// + public bool RetainFolderStructureOverride + { + get + { + return _retainFolderStructureOverride; + } + set + { + if(_retainFolderStructureOverride != value) + { + _retainFolderStructureOverride = value; + RaisePropertyChanged(nameof(RetainFolderStructureOverride)); + PreviewPackageBuild(); + } + } + } + private static MetadataLoadContext sharedMetaDataLoadContext = null; + /// + /// A shared MetaDataLoadContext that is used for assembly inspection during package publishing. + /// This member is shared so the behavior is similar to the ReflectionOnlyLoadContext this is replacing. + /// TODO - eventually it would be good to move to separate publish load contexts that are cleaned up at the appropriate time(?). + /// + private static MetadataLoadContext SharedPublishLoadContext + { + get + { + sharedMetaDataLoadContext ??= InitSharedPublishLoadContext(); + return sharedMetaDataLoadContext; + } + } + + private string _rootFolder; + /// + /// The publish folder for the current package + /// + public string RootFolder + { + get { return _rootFolder; } + set + { + _rootFolder = value; + RaisePropertyChanged(nameof(RootFolder)); + } + } + #endregion + internal PublishPackageViewModel() { customNodeDefinitions = new List(); @@ -749,11 +906,14 @@ internal PublishPackageViewModel() SelectDirectoryAndAddFilesRecursivelyCommand = new DelegateCommand(SelectDirectoryAndAddFilesRecursively); SelectMarkdownDirectoryCommand = new DelegateCommand(SelectMarkdownDirectory); ClearMarkdownDirectoryCommand = new DelegateCommand(ClearMarkdownDirectory); + CancelCommand = new DelegateCommand(Cancel); RemoveItemCommand = new Dynamo.UI.Commands.DelegateCommand(RemoveItem); ToggleMoreCommand = new DelegateCommand(() => MoreExpanded = !MoreExpanded, () => true); + SetKeywordsCommand = new DelegateCommand(SetKeywords, CanSetKeywords); Dependencies.CollectionChanged += DependenciesOnCollectionChanged; Assemblies = new List(); MarkdownFiles = new List(); + RootContents = new ObservableCollection(); PropertyChanged += ThisPropertyChanged; RefreshPackageContents(); RefreshDependencyNames(); @@ -765,7 +925,8 @@ private void RefreshDependencyNames() { if (Dependencies.Count < 1) { - DependencyNames = Properties.Resources.NoneString; + var textInfo = CultureInfo.CurrentUICulture.TextInfo; + DependencyNames = textInfo.ToTitleCase(Properties.Resources.NoneString); return; } DependencyNames = string.Join(", ", Dependencies.Select(x => x.name)); @@ -779,10 +940,109 @@ private void RefreshPackageContents() .Select(def => new PackageItemRootViewModel(def)) .Concat(Assemblies.Select((pa) => new PackageItemRootViewModel(pa))) .Concat(AdditionalFiles.Select((s) => new PackageItemRootViewModel(new FileInfo(s)))) + .Concat(CustomDyfFilepaths.Select((s) => new PackageItemRootViewModel((string)s.Key, (string)s.Value))) .ToList() .ToObservableCollection(); - foreach (var item in itemsToAdd) PackageContents.Add(item); + var items = new Dictionary(); + + if(!String.IsNullOrEmpty(RootFolder)) + { + var root = new PackageItemRootViewModel(RootFolder); + items[RootFolder] = root; + RootFolder = String.Empty; + } + + foreach (var item in itemsToAdd) + { + if (String.IsNullOrEmpty(item.DirectoryName)) continue; + if (!items.ContainsKey(item.DirectoryName)) + { + // Custom nodes don't have folders, we have introduced CustomNodePreview item instead + if (item.DependencyType.Equals(DependencyType.CustomNode)) continue; + if (items.Values.Any(x => IsDuplicateFile(x, item))) continue; + var root = new PackageItemRootViewModel(item.DirectoryName); + + root.ChildItems.Add(item); + items[item.DirectoryName] = root; + } + else + { + items[item.DirectoryName].ChildItems.Add(item); + } + } + + var updatedItems = BindParentToChild(items); + + updatedItems.AddRange(itemsToAdd.Where(pa => pa.DependencyType.Equals(DependencyType.CustomNode))); + + foreach (var item in updatedItems) PackageContents.Add(item); + + PreviewPackageBuild(); + } + + private bool IsDuplicateFile(PackageItemRootViewModel item1, PackageItemRootViewModel item2) + { + // We know that item2 is a file + switch (item1.DependencyType) + { + case DependencyType.Folder: + return item1.ChildItems.Any(x => IsDuplicateFile(x, item2)); + case DependencyType.File: + case DependencyType.Assembly: + case DependencyType.CustomNodePreview: + return item1.FilePath.Equals(item2.FilePath); + case DependencyType.CustomNode: + default: + return false; + } + } + + private List BindParentToChild(Dictionary items) + { + var updatedItems = new List(); + + foreach (var parent in items) + { + foreach(var child in items) + { + if (parent.Value.Equals(child.Value)) continue; + if (IsSubPathOfDeep(parent.Value, child.Value)) + { + if (child.Value.isChild) continue; // if this was picked up already, don't add it again + parent.Value.AddChild(child.Value); + child.Value.isChild = true; + } + } + } + + // Only add the folder items, they contain the files + updatedItems = items.Values.Where(x => !x.isChild).ToList(); + return updatedItems; + } + + /// + /// Test if path2 is subpath of path1 + /// If it is, make sure all the intermediate file paths are created as separte PackageItemRootViewModel + /// + /// + /// + /// + private bool IsSubPathOfDeep(PackageItemRootViewModel path1, PackageItemRootViewModel path2) + { + var di1 = new DirectoryInfo(path1.DirectoryName); + var di2 = new DirectoryInfo(path2.DirectoryName); + + while (di2.Parent != null) + { + if (di2.Parent.FullName == di1.FullName) + { + return true; + } + else di2 = di2.Parent; + } + + return false; } /// @@ -831,11 +1091,19 @@ private void ClearAllEntries() this.BuildVersion = "0"; this.ErrorString = string.Empty; this.Uploading = false; - this.UploadHandle = null; + // Clearing the UploadHandle when using Submit currently throws - check trheading + try + { + BeginInvoke(() => + { + if (this._uploadHandle == null) return; + this._uploadHandle.PropertyChanged -= UploadHandleOnPropertyChanged; + this.UploadHandle = null; + }); + } + catch { Exception ex; } this.IsNewVersion = false; this.MoreExpanded = false; - this.ClearPackageContents(); - this.ClearMarkdownDirectory(); this.UploadState = PackageUploadHandle.State.Ready; this.AdditionalFiles = new ObservableCollection(); this.Dependencies = new ObservableCollection(); @@ -844,15 +1112,67 @@ private void ClearAllEntries() this.SelectedHostsString = string.Empty; this.copyrightHolder = string.Empty; this.copyrightYear = string.Empty; + this.RootFolder = string.Empty; + this.ClearMarkdownDirectory(); + this.ClearPackageContents(); } + /// + /// Decides if any user changes have been made in the current packge publish session + /// + /// true if any changes have been made, otehrwise false + internal bool AnyUserChanges() + { + if(!String.IsNullOrEmpty(this.Name)) return true; + if(!String.IsNullOrEmpty(this.RepositoryUrl)) return true; + if(!String.IsNullOrEmpty(this.SiteUrl)) return true; + if(!String.IsNullOrEmpty(this.License)) return true; + if(!String.IsNullOrEmpty(this.Keywords)) return true; + if(!String.IsNullOrEmpty(this.Description)) return true; + if(!String.IsNullOrEmpty(this.Group)) return true; + if(!String.IsNullOrEmpty(this.MajorVersion) && !(this.MajorVersion.Equals("0"))) return true; + if(!String.IsNullOrEmpty(this.MinorVersion) && !(this.MinorVersion.Equals("0"))) return true; + if(!String.IsNullOrEmpty(this.BuildVersion) && !(this.BuildVersion.Equals("0"))) return true; + if(this.AdditionalFiles.Any()) return true; + if(this.Dependencies.Any()) return true; + if(this.Assemblies.Any()) return true; + if(this.SelectedHosts.Any()) return true; + if(!String.IsNullOrEmpty(this.SelectedHostsString)) return true; + if(!String.IsNullOrEmpty(this.copyrightHolder)) return true; + if(!String.IsNullOrEmpty(this.copyrightYear)) return true; + if(!String.IsNullOrEmpty(this.RootFolder)) return true; + + return false; + } + private void ClearPackageContents() { // this method clears the package contents in the publish package dialog + if (this.Package != null) this.Package = null; - this.Package = null; - this.CustomNodeDefinitions = new List(); - RaisePropertyChanged("PackageContents"); + // Make changes to your ObservableCollection or other UI-bound collection here. + if (this.PackageContents.Any()) + { + this.PackageContents.Clear(); + RaisePropertyChanged(nameof(PackageContents)); + } + if (this.PreviewPackageContents.Any()) + { + this.PreviewPackageContents.Clear(); + RaisePropertyChanged(nameof(PreviewPackageContents)); + } + if (this.RootContents.Any()) + { + this.RootContents.Clear(); + RaisePropertyChanged(nameof(RootContents)); + } + if (this.CustomDyfFilepaths.Any()) + { + this.CustomDyfFilepaths.Clear(); + RaisePropertyChanged(nameof(CustomDyfFilepaths)); + } + + this.CustomNodeDefinitions = new List(); } private void ThisPropertyChanged(object sender, PropertyChangedEventArgs e) @@ -865,11 +1185,35 @@ private void ThisPropertyChanged(object sender, PropertyChangedEventArgs e) } } - public static PublishPackageViewModel FromLocalPackage(DynamoViewModel dynamoViewModel, Package l) + private bool CanSetKeywords() + { + return KeywordList.Count() > 0; + } + + private void SetKeywords() + { + KeywordsCollection = KeywordList.Select(x => new KeywordTag(x)).ToObservableCollection(); + foreach (var keyword in KeywordsCollection) + { + keyword.PropertyChanged += Keyword_PropertyChanged; + } + } + + private void Keyword_PropertyChanged(object sender, PropertyChangedEventArgs e) + { + if (!(sender is KeywordTag keyword)) return; + if (e.PropertyName == nameof(KeywordTag.OnChecked)) + { + keyword.PropertyChanged -= Keyword_PropertyChanged; + KeywordsCollection.Remove(keyword); + } + } + + public static PublishPackageViewModel FromLocalPackage(DynamoViewModel dynamoViewModel, Package pkg) { var defs = new List(); - foreach (var x in l.LoadedCustomNodes) + foreach (var x in pkg.LoadedCustomNodes) { CustomNodeDefinition def; if (dynamoViewModel.Model.CustomNodeManager.TryGetFunctionDefinition( @@ -881,44 +1225,43 @@ public static PublishPackageViewModel FromLocalPackage(DynamoViewModel dynamoVie } } - var vm = new PublishPackageViewModel(dynamoViewModel) + var pkgViewModel = new PublishPackageViewModel(dynamoViewModel) { - Group = l.Group, - Description = l.Description, - Keywords = l.Keywords != null ? String.Join(" ", l.Keywords) : "", + Group = pkg.Group, + Description = pkg.Description, + Keywords = pkg.Keywords != null ? String.Join(" ", pkg.Keywords) : "", CustomNodeDefinitions = defs, - Name = l.Name, - RepositoryUrl = l.RepositoryUrl ?? "", - SiteUrl = l.SiteUrl ?? "", - Package = l, - License = l.License, - SelectedHosts = l.HostDependencies as List, - CopyrightHolder = l.CopyrightHolder, - CopyrightYear = l.CopyrightYear + Name = pkg.Name, + RepositoryUrl = pkg.RepositoryUrl ?? "", + SiteUrl = pkg.SiteUrl ?? "", + Package = pkg, + License = pkg.License, + SelectedHosts = pkg.HostDependencies as List, + CopyrightHolder = pkg.CopyrightHolder, + CopyrightYear = pkg.CopyrightYear }; // add additional files - l.EnumerateAdditionalFiles(); - foreach (var file in l.AdditionalFiles) + pkg.EnumerateAdditionalFiles(); + foreach (var file in pkg.AdditionalFiles) { - vm.AdditionalFiles.Add(file.Model.FullName); + pkgViewModel.AdditionalFiles.Add(file.Model.FullName); } - var nodeLibraryNames = l.Header.node_libraries; + var nodeLibraryNames = pkg.Header.node_libraries; var assembliesLoadedTwice = new List(); - // load assemblies into reflection only context - foreach (var file in l.EnumerateAssemblyFilesInBinDirectory()) + foreach (var file in pkg.EnumerateAssemblyFilesInPackage()) { Assembly assem; - var result = PackageLoader.TryReflectionOnlyLoadFrom(file, out assem); + var result = PackageLoader.TryMetaDataContextLoad(file, SharedPublishLoadContext, out assem); switch (result) { case AssemblyLoadingState.Success: { var isNodeLibrary = nodeLibraryNames == null || nodeLibraryNames.Contains(assem.FullName); - vm.Assemblies.Add(new PackageAssembly() + pkgViewModel.Assemblies.Add(new PackageAssembly() { IsNodeLibrary = isNodeLibrary, Assembly = assem @@ -928,7 +1271,7 @@ public static PublishPackageViewModel FromLocalPackage(DynamoViewModel dynamoVie case AssemblyLoadingState.NotManagedAssembly: { // if it's not a .NET assembly, we load it as an additional file - vm.AdditionalFiles.Add(file); + pkgViewModel.AdditionalFiles.Add(file); break; } case AssemblyLoadingState.AlreadyLoaded: @@ -940,24 +1283,24 @@ public static PublishPackageViewModel FromLocalPackage(DynamoViewModel dynamoVie } //after dependencies are loaded refresh package contents - vm.RefreshPackageContents(); - vm.UpdateDependencies(); + pkgViewModel.RefreshPackageContents(); + pkgViewModel.UpdateDependencies(); if (assembliesLoadedTwice.Any()) { - vm.UploadState = PackageUploadHandle.State.Error; - vm.ErrorString = Resources.OneAssemblyWasLoadedSeveralTimesErrorMessage + string.Join("\n", assembliesLoadedTwice); + pkgViewModel.UploadState = PackageUploadHandle.State.Error; + pkgViewModel.ErrorString = Resources.OneAssemblyWasLoadedSeveralTimesErrorMessage + string.Join("\n", assembliesLoadedTwice); } - if (l.VersionName == null) return vm; + if (pkg.VersionName == null) return pkgViewModel; - var parts = l.VersionName.Split('.'); - if (parts.Count() != 3) return vm; + var parts = pkg.VersionName.Split('.'); + if (parts.Count() != 3) return pkgViewModel; - vm.MajorVersion = parts[0]; - vm.MinorVersion = parts[1]; - vm.BuildVersion = parts[2]; - return vm; + pkgViewModel.MajorVersion = parts[0]; + pkgViewModel.MinorVersion = parts[1]; + pkgViewModel.BuildVersion = parts[2]; + return pkgViewModel; } @@ -969,17 +1312,21 @@ public void OnPublishSuccess() private void UploadHandleOnPropertyChanged(object sender, PropertyChangedEventArgs propertyChangedEventArgs) { - if (propertyChangedEventArgs.PropertyName == "UploadState") + if (propertyChangedEventArgs.PropertyName == nameof(PackageUploadHandle.UploadState)) { UploadState = ((PackageUploadHandle)sender).UploadState; if (((PackageUploadHandle)sender).UploadState == PackageUploadHandle.State.Uploaded) { - OnPublishSuccess(); + BeginInvoke(() => + { + OnPublishSuccess(); + ClearAllEntries(); + }); } - + } - else if (propertyChangedEventArgs.PropertyName == "ErrorString") + else if (propertyChangedEventArgs.PropertyName == nameof(PackageUploadHandle.ErrorString)) { UploadState = PackageUploadHandle.State.Error; ErrorString = ((PackageUploadHandle)sender).ErrorString; @@ -1068,7 +1415,7 @@ internal IEnumerable GetAllFiles() // make sure workspaces are saved var unsavedWorkspaceNames = - workspaces.Where(ws => ws.HasUnsavedChanges || ws.FileName == null).Select(ws => ws.Name).ToList(); + workspaces.Where(ws => ws.HasUnsavedChanges || ws.FileName == null).Select( ws => ws.Name).ToList(); if (unsavedWorkspaceNames.Any()) { throw new Exception(Wpf.Properties.Resources.MessageUnsavedChanges0 + @@ -1211,7 +1558,7 @@ public string ErrorString get { return _errorString; } set { - _errorString = value; + _errorString = value; RaisePropertyChanged("ErrorString"); } } @@ -1245,15 +1592,7 @@ private void ShowAddFileDialogAndAdd() if (fDialog.ShowDialog() != DialogResult.OK) return; - UploadState = PackageUploadHandle.State.Ready; - - foreach (var file in fDialog.FileNames) - { - AddFile(file); - } - RefreshPackageContents(); - RaisePropertyChanged(nameof(PackageContents)); - RefreshDependencyNames(); + AddAllFilesAfterSelection(fDialog.FileNames.ToList()); } /// @@ -1275,6 +1614,14 @@ private void SelectDirectoryAndAddFilesRecursively() string directoryPath = packagePathEventArgs.Path; + if (!IsDirectoryWritable(directoryPath)) + { + ErrorString = String.Format(Resources.FolderNotWritableError, directoryPath); + var ErrorMessage = ErrorString + "\n" + Resources.SolutionToFolderNotWritatbleError; + Dynamo.Wpf.Utilities.MessageBoxService.Show(Owner, ErrorMessage, Resources.FileNotPublishCaption, MessageBoxButton.OK, MessageBoxImage.Warning); + return; + } + List filePaths = Directory .GetFiles ( @@ -1285,7 +1632,20 @@ private void SelectDirectoryAndAddFilesRecursively() if (filePaths.Count < 1) return; - List existingPackageContents = PackageContents + AddAllFilesAfterSelection(filePaths); + } + + /// + /// Combines adding files from single file prompt and files in folders propt + /// + /// + internal void AddAllFilesAfterSelection(List filePaths, string rootFolder = null) + { + this.RootFolder = rootFolder ?? string.Empty; + + UploadState = PackageUploadHandle.State.Ready; + + List existingPackageContents = PackageItemRootViewModel.GetFiles(PackageContents.ToList()) .Where(x => x.FileInfo != null) .Select(x => x.FileInfo.FullName) .ToList(); @@ -1325,7 +1685,7 @@ private void SelectMarkdownDirectory() ErrorString = String.Format(Resources.FolderNotWritableError, directoryPath); string errorMessage = ErrorString + Environment.NewLine + Resources.SolutionToFolderNotWritatbleError; if (DynamoModel.IsTestMode) return; - MessageBoxService.Show(errorMessage, Resources.FileNotPublishCaption, MessageBoxButton.OK, MessageBoxImage.Error); + MessageBoxService.Show(Owner, errorMessage, Resources.FileNotPublishCaption, MessageBoxButton.OK, MessageBoxImage.Error); return; } MarkdownFilesDirectory = directoryPath; @@ -1349,31 +1709,77 @@ private void SelectMarkdownDirectory() /// /// Removes an item from the package contents list. /// - private void RemoveItem(object parameter) + private void RemoveItem (object parameter) { if (!(parameter is PackageItemRootViewModel packageItemRootViewModel)) return; - string fileName = packageItemRootViewModel.FileInfo == null ? packageItemRootViewModel.Name : packageItemRootViewModel.FileInfo.FullName; + RemoveItemRecursively(packageItemRootViewModel); + RefreshPackageContents(); + RaisePropertyChanged(nameof(PackageContents)); + RaisePropertyChanged(nameof(PreviewPackageContents)); + + return; + } + + /// + /// The Cancel command to clear all package data and user interface + /// + private void Cancel() + { + this.ClearAllEntries(); + } + + private void RemoveItemRecursively(PackageItemRootViewModel packageItemRootViewModel) + { DependencyType fileType = packageItemRootViewModel.DependencyType; - if (fileName.ToLower().EndsWith(".dll") || fileType.Equals(DependencyType.Assembly)) + if (fileType == DependencyType.Folder) + { + var nestedFiles = PackageItemRootViewModel.GetFiles(packageItemRootViewModel) + .Where(x => !x.DependencyType.Equals(DependencyType.Folder)) + .ToList(); + + foreach (var file in nestedFiles) + { + RemoveItemRecursively(file); + } + } + else + { + RemoveSingleItem(packageItemRootViewModel, fileType); + } + } + + private void RemoveSingleItem(PackageItemRootViewModel vm, DependencyType fileType) + { + var fileName = vm.DisplayName; + + if (fileType.Equals(DependencyType.Assembly)) { Assemblies.Remove(Assemblies - .First(x => x.Name == Path.GetFileNameWithoutExtension(fileName))); + .First(x => x.Name == fileName)); + } + else if (fileName.ToLower().EndsWith(".dll")) + { + fileName = vm.FilePath; + AdditionalFiles.Remove(AdditionalFiles + .First(x => x == fileName)); + } - else if (fileType.Equals(DependencyType.CustomNode)) + else if (fileType.Equals(DependencyType.CustomNode) || fileType.Equals(DependencyType.CustomNodePreview)) { + fileName = Path.GetFileNameWithoutExtension(fileName); CustomNodeDefinitions.Remove(CustomNodeDefinitions .First(x => x.DisplayName == fileName)); + + CustomDyfFilepaths.Remove(fileName + ".dyf"); } else { + fileName = vm.FilePath; AdditionalFiles.Remove(AdditionalFiles .First(x => x == fileName)); } - - RefreshPackageContents(); - return; } private bool CanShowAddFileDialogAndAdd() @@ -1427,6 +1833,7 @@ private void AddCustomNodeFile(string filename) && CustomNodeDefinitions.All(x => x.FunctionId != funcDef.FunctionId)) { CustomNodeDefinitions.Add(funcDef); + CustomDyfFilepaths.TryAdd(Path.GetFileName(filename), filename); RaisePropertyChanged("PackageContents"); } } @@ -1462,7 +1869,7 @@ private void AddDllFile(string filename) // as the existing assembly cannot be modified while Dynamo is active. if (this.Assemblies.Any(x => assemName == x.Assembly.GetName().Name)) { - MessageBoxService.Show(string.Format(Resources.PackageDuplicateAssemblyWarning, + MessageBoxService.Show(Owner, string.Format(Resources.PackageDuplicateAssemblyWarning, dynamoViewModel.BrandingResourceProvider.ProductName), Resources.PackageDuplicateAssemblyWarningTitle, MessageBoxButton.OK, @@ -1473,7 +1880,7 @@ private void AddDllFile(string filename) Assemblies.Add(new PackageAssembly() { Assembly = assem, - IsNodeLibrary = true // assume is node library when first added + LocalFilePath = filename }); RaisePropertyChanged("PackageContents"); } @@ -1499,7 +1906,16 @@ private void Submit() { return; } + + UploadType = PackageUploadHandle.UploadType.Submit; + var contentFiles = BuildPackage(); + + //do not create the updatedFiles used for retain folder route unless needed + IEnumerable> updatedFiles = null; + if(RetainFolderStructureOverride) + updatedFiles = UpdateFilesForRetainFolderStructure(contentFiles); + try { //if buildPackage() returns no files then the package @@ -1510,7 +1926,9 @@ private void Submit() } // begin submission var pmExtension = dynamoViewModel.Model.GetPackageManagerExtension(); - var handle = pmExtension.PackageManagerClient.PublishAsync(Package, contentFiles, MarkdownFiles, IsNewVersion); + var handle = RetainFolderStructureOverride ? + pmExtension.PackageManagerClient.PublishRetainAsync(Package, updatedFiles, MarkdownFiles, IsNewVersion) : + pmExtension.PackageManagerClient.PublishAsync(Package, contentFiles, MarkdownFiles, IsNewVersion); // start upload Uploading = true; @@ -1552,13 +1970,16 @@ internal static string TranslatePackageManagerError(string message) } /// - /// Delegate used to publish the element to a local folder + /// Delegate used to publish the element to a local folder + /// private void PublishLocally() { var publishPath = GetPublishFolder(); if (string.IsNullOrEmpty(publishPath)) return; + UploadType = PackageUploadHandle.UploadType.Local; + var files = BuildPackage(); try @@ -1580,7 +2001,7 @@ private void PublishLocally() } string FileNotPublishMessage = string.Format(Resources.FileNotPublishMessage, filesCannotBePublished); UploadState = PackageUploadHandle.State.Error; - MessageBoxResult response = DynamoModel.IsTestMode ? MessageBoxResult.OK : MessageBoxService.Show(FileNotPublishMessage, Resources.FileNotPublishCaption, MessageBoxButton.OK, MessageBoxImage.Error); + MessageBoxResult response = DynamoModel.IsTestMode ? MessageBoxResult.OK : MessageBoxService.Show(Owner, FileNotPublishMessage, Resources.FileNotPublishCaption, MessageBoxButton.OK, MessageBoxImage.Error); if (response == MessageBoxResult.OK) { @@ -1593,37 +2014,32 @@ private void PublishLocally() UploadState = PackageUploadHandle.State.Copying; Uploading = true; - // begin publishing to local directory - var remapper = new CustomNodePathRemapper(DynamoViewModel.Model.CustomNodeManager, - DynamoModel.IsTestMode); - var builder = new PackageDirectoryBuilder(new MutatingFileSystem(), remapper); - builder.BuildDirectory(Package, publishPath, files, MarkdownFiles); - UploadState = PackageUploadHandle.State.Uploaded; - - // Once upload is successful, a display message will appear to ask - // whether user wants to continue uploading another file or not. - if (UploadState == PackageUploadHandle.State.Uploaded) + + if (RetainFolderStructureOverride) + { + var updatedFiles = UpdateFilesForRetainFolderStructure(files); + + // begin publishing to local directory retaining the folder structure + var remapper = new CustomNodePathRemapper(DynamoViewModel.Model.CustomNodeManager, + DynamoModel.IsTestMode); + var builder = new PackageDirectoryBuilder(new MutatingFileSystem(), remapper); + builder.BuildRetainDirectory(Package, publishPath, updatedFiles, MarkdownFiles); + UploadState = PackageUploadHandle.State.Uploaded; + } + else { - // For test mode, presume the dialog input to be No and proceed. - MessageBoxResult dialogResult = DynamoModel.IsTestMode ? MessageBoxResult.No : MessageBoxService.Show(Resources.PublishPackageMessage, Resources.PublishPackageDialogCaption, MessageBoxButton.YesNo, MessageBoxImage.Information); ; + // begin publishing to local directory + var remapper = new CustomNodePathRemapper(DynamoViewModel.Model.CustomNodeManager, + DynamoModel.IsTestMode); + var builder = new PackageDirectoryBuilder(new MutatingFileSystem(), remapper); + builder.BuildDirectory(Package, publishPath, files, MarkdownFiles); + UploadState = PackageUploadHandle.State.Uploaded; + } - if (dialogResult == MessageBoxResult.Yes) - { - this.ClearAllEntries(); - Uploading = false; - UploadState = PackageUploadHandle.State.Ready; - } - else - { - Uploading = true; - System.Threading.Timer timer = null; - timer = new System.Threading.Timer((obj) => - { - OnPublishSuccess(); - timer.Dispose(); - }, - null, 1200, System.Threading.Timeout.Infinite); - } + if (UploadState == PackageUploadHandle.State.Uploaded) + { + OnPublishSuccess(); + ClearAllEntries(); } } catch (Exception e) @@ -1634,6 +2050,67 @@ private void PublishLocally() } } + /// + /// Allocate files in lists by folder + /// When we are calling this method, we have chosen the 'retain folder structure' path + /// + /// + /// + private IEnumerable> UpdateFilesForRetainFolderStructure(IEnumerable files) + { + if (!files.Any() || !PreviewPackageContents.Any()) + { + return Enumerable.Empty>(); + } + + var updatedFiles = files.Select(file => + { + if (Assemblies.Any(x => x.Name.Equals(Path.GetFileNameWithoutExtension(file)))) + { + return Assemblies.First(x => x.Name.Equals(Path.GetFileNameWithoutExtension(file))).LocalFilePath; + } + return file; + }).ToList(); + + if (PreviewPackageContents.Count() > 1) + { + // we cannot have more than 1 root folder at this stage + return Enumerable.Empty>(); + } + + var updatedFileStructure = new List>(); + var packageFolderItem = PreviewPackageContents.First(); + + foreach (var root in packageFolderItem.ChildItems) + { + var updatedFolder = new List(); + if (root.DependencyType.Equals(DependencyType.Folder)) + { + var folderContents = PackageItemRootViewModel.GetFiles(root); + foreach (var item in folderContents) + { + if (item.DependencyType.Equals(DependencyType.Folder) || item.DependencyType.Equals(DependencyType.CustomNode)) continue; + if (updatedFiles.Contains(item.FilePath)) + { + updatedFolder.Add(item.FilePath); + } + } + } + else if (root.DependencyType.Equals(DependencyType.CustomNode)) + { + continue; + } + else + { + updatedFolder.Add(root.FilePath); + } + + updatedFileStructure.Add(updatedFolder); + } + + return updatedFileStructure; + } + // build the package private IEnumerable BuildPackage() { @@ -1736,7 +2213,7 @@ private string GetPublishFolder() { ErrorString = String.Format(Resources.FolderNotWritableError, folder); var ErrorMessage = ErrorString + "\n" + Resources.SolutionToFolderNotWritatbleError; - Dynamo.Wpf.Utilities.MessageBoxService.Show(ErrorMessage, Resources.FileNotPublishCaption, MessageBoxButton.OK, MessageBoxImage.Warning); + Dynamo.Wpf.Utilities.MessageBoxService.Show(Owner, ErrorMessage, Resources.FileNotPublishCaption, MessageBoxButton.OK, MessageBoxImage.Warning); return string.Empty; } @@ -1767,6 +2244,7 @@ private string GetPublishFolder() } + RootFolder = folder; return folder; } @@ -1810,15 +2288,40 @@ private bool CheckPackageValidity() IsWarningEnabled = false; } - if (Name.Length < 3) + if(Name.Length <= 0 && !PackageContents.Any()) { - ErrorString = Resources.NameNeedMoreCharacters; + ErrorString = Resources.PackageManagerProvidePackageNameAndFiles; + return false; + } + else if (Name.Length <= 0 && Double.Parse(BuildVersion) + Double.Parse(MinorVersion) + Double.Parse(MajorVersion) <= 0) + { + ErrorString = Resources.PackageManagerProvidePackageNameAndVersion; + return false; + } + else if (!PackageContents.Any() && Double.Parse(BuildVersion) + Double.Parse(MinorVersion) + Double.Parse(MajorVersion) <= 0) + { + ErrorString = Resources.PackageManagerProvideVersionAndFiles; + return false; + } + else if (Name.Length <= 0) + { + ErrorString = Resources.PackageManagerProvidePackageName; + return false; + } + else if (Double.Parse(BuildVersion) + Double.Parse(MinorVersion) + Double.Parse(MajorVersion) <= 0) + { + ErrorString = Resources.PackageManagerProvideVersion; + return false; + } + else if (!PackageContents.Any()) + { + ErrorString = Resources.PackageManagerProvideFiles; return false; } - if (Description.Length <= 10) + if (Name.Length < 3) { - ErrorString = Resources.DescriptionNeedMoreCharacters; + ErrorString = Resources.NameNeedMoreCharacters; return false; } @@ -1840,12 +2343,6 @@ private bool CheckPackageValidity() return false; } - if (Double.Parse(BuildVersion) + Double.Parse(MinorVersion) + Double.Parse(MajorVersion) <= 0) - { - ErrorString = Resources.VersionValueGreaterThan0; - return false; - } - if (!PackageContents.Any()) { ErrorString = Resources.PackageNeedAtLeastOneFile; @@ -1856,6 +2353,7 @@ private bool CheckPackageValidity() if (Uploading) return false; + this.ErrorString = Resources.PackageManagerReadyToPublish; return true; } @@ -1868,5 +2366,155 @@ internal void EnableInvalidNameWarningState(string warningMessage) CurrentWarningMessage = warningMessage; IsWarningEnabled = true; } + + private void PreviewPackageBuild() + { + if (PreviewPackageContents == null) PreviewPackageContents = new ObservableCollection(); + else PreviewPackageContents.Clear(); + + if (PackageContents?.Count == 0) return; + + var publishPath = !String.IsNullOrEmpty(RootFolder) ? RootFolder : new FileInfo("Publish Path").FullName; + if (string.IsNullOrEmpty(publishPath)) + return; + + var files = GetAllFiles().ToList(); + files = files.GroupBy(file => Path.GetFileName(file), StringComparer.OrdinalIgnoreCase) + .Select(group => group.First()) + .ToList(); + try + { + var unqualifiedFiles = GetAllUnqualifiedFiles(); + + if (files == null || files.Count() < 1 || unqualifiedFiles.Count() > 0) + { + string filesCannotBePublished = null; + foreach (var file in unqualifiedFiles) + { + filesCannotBePublished = filesCannotBePublished + file + "\n"; + } + string FileNotPublishMessage = string.Format(Resources.FileNotPublishMessage, filesCannotBePublished); + UploadState = PackageUploadHandle.State.Error; + MessageBoxResult response = DynamoModel.IsTestMode ? MessageBoxResult.OK : MessageBoxService.Show(Owner, FileNotPublishMessage, Resources.FileNotPublishCaption, MessageBoxButton.OK, MessageBoxImage.Error); + + return; + } + + // Generate the Package Name, either based on the user 'Description', or the root path name, if no 'Description' yet + var packageName = !string.IsNullOrEmpty(Name) ? Name : Path.GetFileName(publishPath); + var rootItemPreview = RetainFolderStructureOverride ? + GetExistingRootItemViewModel(publishPath, packageName) : + GetPreBuildRootItemViewModel(publishPath, packageName, files); + + PreviewPackageContents.Add(rootItemPreview); + + RaisePropertyChanged(nameof(PreviewPackageContents)); + } + catch (Exception e) + { + UploadState = PackageUploadHandle.State.Error; + ErrorString = e.Message; + dynamoViewModel.Model.Logger.Log(e); + } + } + + internal PackageItemRootViewModel GetExistingRootItemViewModel(string publishPath, string packageName) + { + if (!PackageContents.Any()) return null; + if (PackageContents.Count(x => x.DependencyType.Equals(DependencyType.Folder)) == 1) { + var item = PackageContents.First(x => x.DependencyType.Equals(DependencyType.Folder)); + if(item.DisplayName != packageName) + { + item = new PackageItemRootViewModel(Path.Combine(publishPath, packageName)); + item.AddChildren(PackageContents.First().ChildItems.ToList()); + } + return item; + } + + // It means we have more than 1 root item, in which case we need to combine them + var rootItem = new PackageItemRootViewModel(Path.Combine(publishPath, packageName)); + foreach(var item in PackageContents) + { + item.isChild = true; + rootItem.AddChildren(item); + } + return rootItem; + } + + internal PackageItemRootViewModel GetPreBuildRootItemViewModel(string publishPath, string packageName, List files) + { + PackageDirectoryBuilder.PreBuildDirectory(packageName, publishPath, + out string rootDir, out string dyfDir, out string binDir, out string extraDir, out string docDir); + + var rootItemPreview = new PackageItemRootViewModel(rootDir); + var dyfItemPreview = new PackageItemRootViewModel(dyfDir) { isChild = true }; + var binItemPreview = new PackageItemRootViewModel(binDir) { isChild = true }; + var extraItemPreview = new PackageItemRootViewModel(extraDir) { isChild = true }; + var docItemPreview = new PackageItemRootViewModel(docDir) { isChild = true }; + + var pkg = new PackageItemRootViewModel(new FileInfo(Path.Combine(rootDir, "pkg.json"))); + rootItemPreview.AddChild(pkg); + + foreach (var file in files) + { + if (!File.Exists(file)) continue; + var fileName = Path.GetFileName(file); + + if (Path.GetDirectoryName(file).EndsWith(PackageDirectoryBuilder.DocumentationDirectoryName)) + { + var doc = new PackageItemRootViewModel(new FileInfo(Path.Combine(docDir, fileName))); + docItemPreview.AddChild(doc); + } + else if (file.EndsWith(".dyf")) + { + var dyfPreview = new PackageItemRootViewModel(fileName, Path.Combine(dyfDir, fileName)); + dyfItemPreview.AddChild(dyfPreview); + } + else if (file.EndsWith(".dll") || PackageDirectoryBuilder.IsXmlDocFile(file, files) || PackageDirectoryBuilder.IsDynamoCustomizationFile(file, files)) + { + // Assemblies carry the information if they are NodeLibrary or not + if(Assemblies.Any(x => x.Name.Equals(Path.GetFileNameWithoutExtension(fileName)))) + { + var packageContents = PackageItemRootViewModel.GetFiles(PackageContents.ToList()); + var dll = packageContents.First(x => x.DependencyType.Equals(DependencyType.Assembly) && x.DisplayName.Equals(Path.GetFileNameWithoutExtension(fileName))); + if(dll != null) + binItemPreview.AddChildren(dll); + } + else + { + var dll = new PackageItemRootViewModel(new FileInfo(Path.Combine(binDir, fileName))); + binItemPreview.AddChild(dll); + } + } + else + { + var extra = new PackageItemRootViewModel(new FileInfo(Path.Combine(extraDir, fileName))); + extraItemPreview.AddChild(extra); + } + } + + foreach(var docFile in MarkdownFiles) + { + var fileName = Path.GetFileName(docFile); + var doc = new PackageItemRootViewModel(new FileInfo(Path.Combine(docDir, fileName))); + docItemPreview.AddChild(doc); + } + + rootItemPreview.AddChild(dyfItemPreview); + rootItemPreview.AddChild(binItemPreview); + rootItemPreview.AddChild(extraItemPreview); + rootItemPreview.AddChild(docItemPreview); + + return rootItemPreview; + } + + private static MetadataLoadContext InitSharedPublishLoadContext() + { + // Retrieve the location of the assembly and the referenced assemblies used by the domain + var runtimeAssemblies = Directory.GetFiles(RuntimeEnvironment.GetRuntimeDirectory(), "*.dll"); + // Create PathAssemblyResolver that can resolve assemblies using the created list. + var resolver = new PathAssemblyResolver(runtimeAssemblies); + return new MetadataLoadContext(resolver); + } } } diff --git a/src/DynamoCoreWpf/ViewModels/Preview/InfoBubbleViewModel.cs b/src/DynamoCoreWpf/ViewModels/Preview/InfoBubbleViewModel.cs index f9f180e3785..745d7ddc674 100644 --- a/src/DynamoCoreWpf/ViewModels/Preview/InfoBubbleViewModel.cs +++ b/src/DynamoCoreWpf/ViewModels/Preview/InfoBubbleViewModel.cs @@ -1088,7 +1088,7 @@ private static string RemoveLinkFromText(string text) // return the text without the link or identifier string[] split = text.Split(new string[] { externalLinkIdentifier }, StringSplitOptions.None); - return split[0]; + return String.Concat(split); } private static Uri ParseLinkFromText(string text) diff --git a/src/DynamoCoreWpf/ViewModels/RunSettingsViewModel.cs b/src/DynamoCoreWpf/ViewModels/RunSettingsViewModel.cs index 3ff099bd85b..6a454a8e2fd 100644 --- a/src/DynamoCoreWpf/ViewModels/RunSettingsViewModel.cs +++ b/src/DynamoCoreWpf/ViewModels/RunSettingsViewModel.cs @@ -314,9 +314,9 @@ void NotifyOfGraphRunChanged() RaisePropertyChanged(nameof(RunButtonEnabled)); RaisePropertyChanged(nameof(RunButtonToolTip)); - if (Application.Current != null) + if (string.IsNullOrEmpty(DynamoModel.HostAnalyticsInfo.HostName)) { - Application.Current.Dispatcher.Invoke(new Action(() => + Application.Current?.Dispatcher.Invoke(new Action(() => { dynamoViewModel.ShowOpenDialogAndOpenResultCommand.RaiseCanExecuteChanged(); dynamoViewModel.NewHomeWorkspaceCommand.RaiseCanExecuteChanged(); diff --git a/src/DynamoCoreWpf/ViewModels/Search/BrowserItemViewModel.cs b/src/DynamoCoreWpf/ViewModels/Search/BrowserItemViewModel.cs index 4c8e4a8a326..dbb8e932ead 100644 --- a/src/DynamoCoreWpf/ViewModels/Search/BrowserItemViewModel.cs +++ b/src/DynamoCoreWpf/ViewModels/Search/BrowserItemViewModel.cs @@ -11,12 +11,12 @@ using Dynamo.Search.SearchElements; using Dynamo.ViewModels; using Dynamo.Wpf.Extensions; -using NotificationObject = Dynamo.Core.NotificationObject; using Prism.Commands; +using NotificationObject = Dynamo.Core.NotificationObject; namespace Dynamo.Wpf.ViewModels { - public abstract class BrowserItemViewModel : NotificationObject + public abstract class BrowserItemViewModel : NotificationObject, IDisposable { public ICommand ToggleIsExpandedCommand { get; protected set; } public BrowserItem Model { get; private set; } @@ -75,6 +75,12 @@ internal static BrowserInternalElementViewModel WrapExplicit(BrowserInternalElem return new BrowserInternalElementViewModel(elem); } + public void Dispose() + { + if (Model == null || Model.Items == null) return; + Model.Items.CollectionChanged -= ItemsOnCollectionChanged; + } + #endregion } @@ -364,15 +370,22 @@ private void SubCategoriesOnCollectionChanged(object sender, NotifyCollectionCha /// public override void Dispose() { - foreach (var category in SubCategories) - category.PropertyChanged -= CategoryOnPropertyChanged; + if (SubCategories != null) + { + foreach (var category in SubCategories) + category.PropertyChanged -= CategoryOnPropertyChanged; + } - foreach (var item in Items) - item.PropertyChanged -= ItemOnPropertyChanged; + if (Items != null) + { + foreach (var item in Items) + item.PropertyChanged -= ItemOnPropertyChanged; + Items.CollectionChanged -= ItemsOnCollectionChanged; + } + + if (Entries != null) Entries.CollectionChanged -= OnCollectionChanged; + if (SubCategories != null) SubCategories.CollectionChanged -= SubCategoriesOnCollectionChanged; - Entries.CollectionChanged -= OnCollectionChanged; - SubCategories.CollectionChanged -= SubCategoriesOnCollectionChanged; - Items.CollectionChanged -= ItemsOnCollectionChanged; base.Dispose(); } @@ -384,11 +397,17 @@ public void DisposeTree() { Dispose(); - foreach (var entry in Entries) - entry.Dispose(); + if (Entries != null) + { + foreach (var entry in Entries) + entry.Dispose(); + } - foreach (var subCategory in SubCategories) - subCategory.DisposeTree(); + if (SubCategories != null) + { + foreach (var subCategory in SubCategories) + subCategory.DisposeTree(); + } } private void CategoryOnPropertyChanged(object sender, PropertyChangedEventArgs propertyChangedEventArgs) diff --git a/src/DynamoCoreWpf/ViewModels/Search/NodeAutoCompleteSearchViewModel.cs b/src/DynamoCoreWpf/ViewModels/Search/NodeAutoCompleteSearchViewModel.cs index 003b50517ab..f2552201f5b 100644 --- a/src/DynamoCoreWpf/ViewModels/Search/NodeAutoCompleteSearchViewModel.cs +++ b/src/DynamoCoreWpf/ViewModels/Search/NodeAutoCompleteSearchViewModel.cs @@ -76,6 +76,17 @@ public bool IsDisplayingMLRecommendation } } + /// + /// If MLAutocompleteTOU is approved + /// + public bool IsMLAutocompleteTOUApproved + { + get + { + return dynamoViewModel.PreferenceSettings.IsMLAutocompleteTOUApproved; + } + } + /// /// If true, autocomplete method options are hidden from UI /// @@ -213,7 +224,7 @@ internal MLNodeAutoCompletionRequest GenerateRequestForMLAutocomplete() request.Port.ListAtLevel = portInfo.Level; // Set host info - var hostName = string.IsNullOrEmpty(dynamoViewModel.Model.HostAnalyticsInfo.HostName) ? dynamoViewModel.Model.HostName : dynamoViewModel.Model.HostAnalyticsInfo.HostName; + var hostName = string.IsNullOrEmpty(DynamoModel.HostAnalyticsInfo.HostName) ? dynamoViewModel.Model.HostName : DynamoModel.HostAnalyticsInfo.HostName; var hostNameEnum = GetHostNameEnum(hostName); if (hostNameEnum != HostNames.None) @@ -436,7 +447,7 @@ private MLNodeAutoCompletionResponse GetMLNodeAutocompleteResults(string request { try { - var uri = DynamoUtilities.PathHelper.getServiceBackendAddress(this, nodeAutocompleteMLEndpoint); + var uri = DynamoUtilities.PathHelper.GetServiceBackendAddress(this, nodeAutocompleteMLEndpoint); var client = new RestClient(uri); var request = new RestRequest(string.Empty,Method.Post); diff --git a/src/DynamoCoreWpf/ViewModels/Watch3D/DefaultWatch3DViewModel.cs b/src/DynamoCoreWpf/ViewModels/Watch3D/DefaultWatch3DViewModel.cs index c0c06232571..1521963c8f9 100644 --- a/src/DynamoCoreWpf/ViewModels/Watch3D/DefaultWatch3DViewModel.cs +++ b/src/DynamoCoreWpf/ViewModels/Watch3D/DefaultWatch3DViewModel.cs @@ -5,6 +5,7 @@ using System.Linq; using System.Windows; using System.Windows.Input; +using System.Windows.Interop; using System.Windows.Media; using System.Windows.Media.Media3D; using System.Xml; @@ -393,12 +394,14 @@ private void LogVisualizationCapabilities() var pixelShader4Supported = RenderCapability.IsPixelShaderVersionSupported(4, 0); var softwareEffectSupported = RenderCapability.IsShaderEffectSoftwareRenderingSupported; var maxTextureSize = RenderCapability.MaxHardwareTextureSize; + var renderMode = RenderOptions.ProcessRenderMode; logger.Log(string.Format("RENDER : Rendering Tier: {0}", renderingTier)); logger.LogError(string.Format("RENDER : Pixel Shader 3 Supported: {0}", pixelShader3Supported)); logger.Log(string.Format("RENDER : Pixel Shader 4 Supported: {0}", pixelShader4Supported)); logger.Log(string.Format("RENDER : Software Effect Rendering Supported: {0}", softwareEffectSupported)); logger.Log(string.Format("RENDER : Maximum hardware texture size: {0}", maxTextureSize)); + logger.Log(string.Format("RENDER : ProcessRenderMode: {0}", renderMode == RenderMode.Default ? "Hardware (with Software fallback)" : "Software" )); } private void RegisterModelEventhandlers(IDynamoModel dynamoModel) diff --git a/src/DynamoCoreWpf/ViewModels/Watch3D/HelixWatch3DViewModel.cs b/src/DynamoCoreWpf/ViewModels/Watch3D/HelixWatch3DViewModel.cs index 6354ca410f7..5e46cbf77ba 100644 --- a/src/DynamoCoreWpf/ViewModels/Watch3D/HelixWatch3DViewModel.cs +++ b/src/DynamoCoreWpf/ViewModels/Watch3D/HelixWatch3DViewModel.cs @@ -220,11 +220,7 @@ static DYNNVOptimusEnabler() { try { - - if (Environment.Is64BitProcess) - NativeMethods.LoadNvApi64(); - else - NativeMethods.LoadNvApi32(); + NativeMethods.LoadNvApi64(); } catch { } // will always fail since 'fake' entry point doesn't exists } diff --git a/src/DynamoCoreWpf/Views/Core/DynamoView.xaml.cs b/src/DynamoCoreWpf/Views/Core/DynamoView.xaml.cs index 571626f7efa..58be0f74b2d 100644 --- a/src/DynamoCoreWpf/Views/Core/DynamoView.xaml.cs +++ b/src/DynamoCoreWpf/Views/Core/DynamoView.xaml.cs @@ -256,7 +256,7 @@ public DynamoView(DynamoViewModel dynamoViewModel) { fileTrustWarningPopup = new FileTrustWarning(this); } - if (!DynamoModel.IsTestMode && Application.Current != null) + if (!DynamoModel.IsTestMode && string.IsNullOrEmpty(DynamoModel.HostAnalyticsInfo.HostName) && Application.Current != null) { Application.Current.MainWindow = this; } @@ -1308,7 +1308,7 @@ private void DynamoView_Loaded(object sender, EventArgs e) #region Package manager - dynamoViewModel.RequestPackagePublishDialog += DynamoViewModelRequestRequestPackageManagerPublish; + dynamoViewModel.RequestPackagePublishDialog += DynamoViewModelRequestPackageManager; dynamoViewModel.RequestPackageManagerSearchDialog += DynamoViewModelRequestShowPackageManagerSearch; dynamoViewModel.RequestPackageManagerDialog += DynamoViewModelRequestShowPackageManager; @@ -1372,9 +1372,10 @@ private void DynamoView_Loaded(object sender, EventArgs e) TrackStartupAnalytics(); - // In native host scenario (e.g. Revit), the "Application.Current" will be "null". Therefore, the InCanvasSearchControl.OnRequestShowInCanvasSearch - // will not work. Instead, we have to check if the Owner Window (DynamoView) is deactivated or not. - if (Application.Current == null) + // In native host scenario (e.g. Revit), the InCanvasSearchControl.OnRequestShowInCanvasSearch + // will not work. Instead, we have to check if the Owner Window (DynamoView) is deactivated or not. + + if (!string.IsNullOrEmpty(DynamoModel.HostAnalyticsInfo.HostName)) { this.Deactivated += (s, args) => { HidePopupWhenWindowDeactivated(null); }; } @@ -1464,23 +1465,37 @@ private void DynamoViewModelRequestAboutWindow(DynamoViewModel model) private PublishPackageView _pubPkgView; - private void DynamoViewModelRequestRequestPackageManagerPublish(PublishPackageViewModel model) + private void DynamoViewModelRequestPackageManager(PublishPackageViewModel model) { - var cmd = Analytics.TrackCommandEvent("PublishPackage"); - if (_pubPkgView == null) + if (packageManagerWindow == null) { - _pubPkgView = new PublishPackageView(model) + if (_pkgSearchVM == null) + { + _pkgSearchVM = new PackageManagerSearchViewModel(dynamoViewModel.PackageManagerClientViewModel); + } + + if (_pkgVM == null) + { + _pkgVM = new PackageManagerViewModel(dynamoViewModel, _pkgSearchVM); + } + + packageManagerWindow = new PackageManagerView(this, _pkgVM) { Owner = this, WindowStartupLocation = WindowStartupLocation.CenterOwner }; - _pubPkgView.Closed += (sender, args) => { _pubPkgView = null; cmd.Dispose(); }; - _pubPkgView.Show(); - if (_pubPkgView.IsLoaded && IsLoaded) _pubPkgView.Owner = this; + // setting the owner to the packageManagerWindow will centralize promts originating from the Package Manager + dynamoViewModel.Owner = packageManagerWindow; + + packageManagerWindow.Closed += HandlePackageManagerWindowClosed; + packageManagerWindow.Show(); + + if (packageManagerWindow.IsLoaded && IsLoaded) packageManagerWindow.Owner = this; } - _pubPkgView.Focus(); + packageManagerWindow.Focus(); + packageManagerWindow.Navigate(Wpf.Properties.Resources.PackageManagerPublishTab); } private PackageManagerSearchView _searchPkgsView; @@ -1492,7 +1507,7 @@ private void DynamoViewModelRequestShowPackageManagerSearch(object s, EventArgs if (!DisplayTermsOfUseForAcceptance()) return; // Terms of use not accepted. - var cmd = Analytics.TrackCommandEvent("SearchPackage"); + var cmd = Analytics.TrackTaskCommandEvent("SearchPackage"); // The package search view model is shared and can be shared by resources at the moment // If it hasn't been initialized yet, we do that here @@ -1513,7 +1528,7 @@ private void DynamoViewModelRequestShowPackageManagerSearch(object s, EventArgs WindowStartupLocation = WindowStartupLocation.CenterOwner }; - _searchPkgsView.Closed += (sender, args) => { _searchPkgsView = null; cmd.Dispose(); }; + _searchPkgsView.Closed += (sender, args) => { _searchPkgsView = null; Analytics.EndTaskCommandEvent(cmd); }; _searchPkgsView.Show(); if (_searchPkgsView.IsLoaded && IsLoaded) _searchPkgsView.Owner = this; @@ -1940,7 +1955,7 @@ private void WindowClosed(object sender, EventArgs e) dynamoViewModel.RequestViewOperation -= DynamoViewModelRequestViewOperation; //PACKAGE MANAGER - dynamoViewModel.RequestPackagePublishDialog -= DynamoViewModelRequestRequestPackageManagerPublish; + dynamoViewModel.RequestPackagePublishDialog -= DynamoViewModelRequestPackageManager; dynamoViewModel.RequestPackageManagerSearchDialog -= DynamoViewModelRequestShowPackageManagerSearch; //FUNCTION NAME PROMPT @@ -2014,6 +2029,8 @@ private void WindowClosed(object sender, EventArgs e) this.Dispose(); sharedViewExtensionLoadedParams?.Dispose(); + this._pkgSearchVM?.Dispose(); + this._pkgVM?.Dispose(); } // the key press event is being intercepted before it can get to @@ -2241,7 +2258,6 @@ private void DynamoViewModelRequestShowPackageManager(object s, EventArgs e) if (!DisplayTermsOfUseForAcceptance()) return; // Terms of use not accepted. - var cmd = Analytics.TrackCommandEvent("PackageManager"); if (_pkgSearchVM == null) { _pkgSearchVM = new PackageManagerSearchViewModel(dynamoViewModel.PackageManagerClientViewModel); @@ -2254,6 +2270,14 @@ private void DynamoViewModelRequestShowPackageManager(object s, EventArgs e) if (packageManagerWindow == null) { + if (e is PackageManagerSizeEventArgs) + { + var packageManagerSizeEventArgs = e as PackageManagerSizeEventArgs; + //Set a fixed size for the PackageManagerView + _pkgVM.Width = packageManagerSizeEventArgs.Width; + _pkgVM.Height = packageManagerSizeEventArgs.Height; + } + packageManagerWindow = new PackageManagerView(this, _pkgVM) { Owner = this, @@ -2263,7 +2287,7 @@ private void DynamoViewModelRequestShowPackageManager(object s, EventArgs e) // setting the owner to the packageManagerWindow will centralize promts originating from the Package Manager dynamoViewModel.Owner = packageManagerWindow; - packageManagerWindow.Closed += (sender, args) => { packageManagerWindow = null; cmd.Dispose(); }; + packageManagerWindow.Closed += HandlePackageManagerWindowClosed; packageManagerWindow.Show(); if (packageManagerWindow.IsLoaded && IsLoaded) packageManagerWindow.Owner = this; @@ -2274,9 +2298,19 @@ private void DynamoViewModelRequestShowPackageManager(object s, EventArgs e) { packageManagerWindow.Navigate((e as OpenPackageManagerEventArgs).Tab); } + _pkgSearchVM.RefreshAndSearchAsync(); } + private void HandlePackageManagerWindowClosed(object sender, EventArgs e) + { + packageManagerWindow.Closed -= HandlePackageManagerWindowClosed; + packageManagerWindow = null; + + var cmd = Analytics.TrackCommandEvent("PackageManager"); + cmd.Dispose(); + } + internal void EnableEnvironment(bool isEnabled) { this.mainGrid.IsEnabled = isEnabled; @@ -2930,6 +2964,7 @@ public void Dispose() // Removing the tab items list handler dynamoViewModel.SideBarTabItems.CollectionChanged -= this.OnCollectionChanged; + shortcutBar?.Dispose(); if (fileTrustWarningPopup != null) { diff --git a/src/DynamoCoreWpf/Views/GuidedTour/HtmlPages/Resources/SearchPackages.gif b/src/DynamoCoreWpf/Views/GuidedTour/HtmlPages/Resources/SearchPackages.gif index 2885c11ce0c..0ab03a57287 100644 Binary files a/src/DynamoCoreWpf/Views/GuidedTour/HtmlPages/Resources/SearchPackages.gif and b/src/DynamoCoreWpf/Views/GuidedTour/HtmlPages/Resources/SearchPackages.gif differ diff --git a/src/DynamoCoreWpf/Views/GuidedTour/HtmlPages/searchPackages.html b/src/DynamoCoreWpf/Views/GuidedTour/HtmlPages/searchPackages.html index e0b345474bc..65d4ed188bc 100644 --- a/src/DynamoCoreWpf/Views/GuidedTour/HtmlPages/searchPackages.html +++ b/src/DynamoCoreWpf/Views/GuidedTour/HtmlPages/searchPackages.html @@ -1,4 +1,4 @@ -īģŋ + @@ -15,9 +15,8 @@ img { display: block; - margin-left: auto; - margin-right: auto; - width: 75%; + width: 90%; + margin: 0rem 0.9rem 0rem 0.9rem; height: auto; } @@ -60,4 +59,4 @@ - \ No newline at end of file + diff --git a/src/DynamoCoreWpf/Views/GuidedTour/RealTimeInfoWindow.xaml b/src/DynamoCoreWpf/Views/GuidedTour/RealTimeInfoWindow.xaml index b0488f6ad3f..17e9801107a 100644 --- a/src/DynamoCoreWpf/Views/GuidedTour/RealTimeInfoWindow.xaml +++ b/src/DynamoCoreWpf/Views/GuidedTour/RealTimeInfoWindow.xaml @@ -1,12 +1,10 @@ -īģŋ - + - + - - + + StrokeThickness="2"/> - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/DynamoCoreWpf/Views/PackageManager/Controls/CustomBrowserControl.xaml.cs b/src/DynamoCoreWpf/Views/PackageManager/Controls/CustomBrowserControl.xaml.cs new file mode 100644 index 00000000000..3b3e3d7f67b --- /dev/null +++ b/src/DynamoCoreWpf/Views/PackageManager/Controls/CustomBrowserControl.xaml.cs @@ -0,0 +1,564 @@ +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Collections.Specialized; +using System.ComponentModel; +using System.Globalization; +using System.Linq; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Data; +using System.Windows.Input; +using System.Windows.Media; +using Dynamo.Utilities; +using Lucene.Net.Util; + +namespace Dynamo.PackageManager.UI +{ + /// + /// Interaction logic for CustomBrowserControl.xaml + /// + public partial class CustomBrowserControl : UserControl, IDisposable + { + + public bool DisableRemove + { + get { return (bool)GetValue(DisableRemoveProperty); } + set { SetValue(DisableRemoveProperty, value); } + } + + public static readonly DependencyProperty DisableRemoveProperty = + DependencyProperty.Register("DisableRemove", typeof(bool), typeof(CustomBrowserControl), new PropertyMetadata(false)); + + /// + /// Binds the ItemsSource of the TreeView + /// + public ObservableCollection Root + { + get { return (ObservableCollection)GetValue(RootProperty); } + set { SetValue(RootProperty, value); } + } + + public static readonly DependencyProperty RootProperty = + DependencyProperty.Register("Root", typeof(ObservableCollection), typeof(CustomBrowserControl), + new FrameworkPropertyMetadata(null, FrameworkPropertyMetadataOptions.None, propertyChangedCallback: OnItemsSourceChanged)); + + + private static void OnItemsSourceChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) + { + var root = (CustomBrowserControl)d; + + if (e.OldValue != null) + { + var coll = (INotifyCollectionChanged)e.OldValue; + coll.CollectionChanged -= root.Root_CollectionChanged; + } + + if (e.NewValue != null) + { + var coll = (ObservableCollection)e.NewValue; + coll.CollectionChanged += root.Root_CollectionChanged; + } + } + + private void Root_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e) + { + Dispatcher.BeginInvoke((Action)(() => + { + UpdateCustomTreeView(sender); + })); + } + + /// + /// Constructor + /// + public CustomBrowserControl() + { + InitializeComponent(); + } + + public void Dispose() + { + var currentRoot = this.Root; + if (currentRoot != null) + { + currentRoot.CollectionChanged -= Root_CollectionChanged; + } + } + + /// + /// Updates the visuals of the treeview elements once they are rendered + /// + internal void RefreshCustomTreeView() + { + var treeView = this.customTreeView; + treeView.ApplyTemplate(); + treeView.UpdateLayout(); + + var visualChildren = FindVisualChildren(treeView); + if (visualChildren == null || visualChildren.Count() == 0) return; + + var root = visualChildren.First(); + if (root == null) return; + + root.ApplyTemplate(); + root.IsExpanded = true; + root.UpdateLayout(); + + var hmarker = FindVisualChild(root, "HorizontalMarker"); + if (hmarker != null) hmarker.Visibility = Visibility.Hidden; + + root.IsSelected = true; + + ApplyVisualLogic(visualChildren); + } + + private static TreeViewItem GetLastTreeViewItem(TreeViewItem item) + { + var parent = FindParent(item); + + if (parent != null) + { + parent.ApplyTemplate(); + parent.IsExpanded = true; + parent.UpdateLayout(); + + var children = FindVisualChildrenShallow(parent); + if (children == null) return null; + + // Remove everything but folders + children = children.Where(x => (x.Header as PackageItemRootViewModel).DependencyType.Equals(DependencyType.Folder)); + // For folders containing only file items, return null + if (!children.Any()) return null; + if (children.Last() == item) return item; + } + else + { + // If the item has no parent, then remove the horizontal marker + var hmarker = FindVisualChild(item, "HorizontalMarker"); + if (hmarker != null) hmarker.Visibility = Visibility.Hidden; + } + + return null; + } + + private static void ApplyVisualLogic(IEnumerable treeViewItems) + { + foreach (object item in treeViewItems) + { + if (item is TreeViewItem topItem) + { + topItem.IsExpanded = true; + topItem.ApplyTemplate(); + + var lastItem = GetLastTreeViewItem(topItem); + if (lastItem != null) + { + var marker = FindVisualChild(topItem, "VerticalMarker"); + if (marker != null) + { + marker.Height = 28; + marker.VerticalAlignment = VerticalAlignment.Top; + } + } + } + } + } + + private void UpdateCustomTreeView(object sender) + { + if ((sender as ObservableCollection).Count == 0) return; + + RefreshCustomTreeView(); + } + + /// + /// Updates the currently displayed files based on which folder is selected + /// This method is invoked in 2 ways: + /// 1. As ItemSelectionChange event of the customTreeView element + /// 2. On Page navigation (each Page displays different section of the PreviewPackageContents) + /// Will not fire if the Page that's triggering it is not currently enabled + /// + /// The TreeView element. We are interested in the currently SelectedItem. + /// Arguments + internal void customTreeView_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs e) + { + var customTree = sender as TreeView; + if (customTree == null) return; + + var parentPage = FindLogicalParent(customTree); + if (parentPage == null || !parentPage.IsEnabled) return; + + var selectedItem = customTree.SelectedItem as PackageItemRootViewModel; + + var viewModel = this.DataContext as PublishPackageViewModel; + viewModel.RootContents.Clear(); + + if (selectedItem != null) + { + viewModel.RootContents.AddRange(new ObservableCollection (selectedItem.ChildItems + .OrderBy(x => x.DependencyType.Equals(DependencyType.Folder) ? 0 : 1) + .ThenBy(x => x.DisplayName) + .ToList())); + } + } + + private void RemoveButton_Click(object sender, RoutedEventArgs e) + { + var button = sender as Button; + if (button == null) { return; } + + var treeViewItem = FindParent(button); + if (treeViewItem != null) { + + var treeView = this.customTreeView; + var selectedItem = treeView.SelectedItem; + + var rootItem = treeViewItem.Header as PackageItemRootViewModel; + if (rootItem == null) { return; } + + var viewModel = this.DataContext as PublishPackageViewModel; + + Dispatcher.BeginInvoke((Action)(() => + { + viewModel.RemoveItemCommand.Execute(rootItem); + })); + } + } + + #region Utility + + private static T FindParent(DependencyObject child) where T : DependencyObject + { + DependencyObject parentObject = VisualTreeHelper.GetParent(child); + + if (parentObject == null) + return null; + + T parent = parentObject as T; + if (parent != null) + return parent; + + return FindParent(parentObject); + } + + private static T FindLogicalParent(DependencyObject child) where T : DependencyObject + { + DependencyObject parentObject = LogicalTreeHelper.GetParent(child); + + if (parentObject == null) + return null; + + T parent = parentObject as T; + if (parent != null) + return parent; + + return FindLogicalParent(parentObject); + } + + + // Helper method to find visual children in a WPF control + private static IEnumerable FindVisualChildren(DependencyObject depObj) where T : DependencyObject + { + if (depObj != null) + { + for (int i = 0; i < VisualTreeHelper.GetChildrenCount(depObj); i++) + { + DependencyObject child = VisualTreeHelper.GetChild(depObj, i); + if (child != null && child is T) + { + yield return (T)child; + } + + foreach (T childOfChild in FindVisualChildren(child)) + { + yield return childOfChild; + } + } + } + } + + private static IEnumerable FindVisualChildrenShallow(DependencyObject depObj) where T : DependencyObject + { + if (depObj != null) + { + for (int i = 0; i < VisualTreeHelper.GetChildrenCount(depObj); i++) + { + DependencyObject child = VisualTreeHelper.GetChild(depObj, i); + if (child != null && child is T) + { + yield return (T)child; + } + else if(child != null && child is not T) + { + foreach (T childOfChild in FindVisualChildrenShallow(child)) + { + yield return childOfChild; + } + } + } + } + } + + + private static T FindVisualChild(DependencyObject parent, string name) where T : DependencyObject + { + if (parent == null) + { + return null; + } + + for (int i = 0; i < VisualTreeHelper.GetChildrenCount(parent); i++) + { + DependencyObject child = VisualTreeHelper.GetChild(parent, i); + if (child is T && (child as FrameworkElement).Name == name) + { + return child as T; + } + + T result = FindVisualChild(child, name); + if (result != null) + { + return result; + } + } + + return null; + } + + #endregion + } + + #region Helpers + + public static class TreeViewItemHelper + { + public static GridLength GetIndent(DependencyObject obj) + { + return (GridLength)obj.GetValue(IndentProperty); + } + + public static void SetIndent(DependencyObject obj, GridLength value) + { + obj.SetValue(IndentProperty, value); + } + + // Using a DependencyProperty as the backing store for Indent. This enables animation, styling, binding, etc... + public static readonly DependencyProperty IndentProperty = + DependencyProperty.RegisterAttached("Indent", typeof(GridLength), typeof(TreeViewItemHelper), new PropertyMetadata(new GridLength(0))); + } + + public class IndentConverter : IValueConverter + { + private const int IndentSize = 20; // hard-coded into the XAML template + + public object Convert(object value, Type targetType, object parameter, CultureInfo culture) + { + return new GridLength(((GridLength)value).Value + IndentSize); + } + + public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) + { + return Binding.DoNothing; + } + } + + public class HasChildrenToStyleConverter : IValueConverter + { + public object Convert(object value, Type targetType, object parameter, CultureInfo culture) + { + if (value is TreeViewItem treeViewItem) + { + // Check if the TreeViewItem has any nested items (child items) + bool hasChildren = treeViewItem.Items.Count > 0; + + // Define styles for TreeViewItems with and without children + Style styleWithChildren = Application.Current.FindResource("TreeViewItemWithChildrenStyle") as Style; + Style styleWithoutChildren = Application.Current.FindResource("TreeViewItemWithoutChildrenStyle") as Style; + + // Return the appropriate style based on the presence of children + return hasChildren ? styleWithChildren : styleWithoutChildren; + } + + // Default style or value if the input is not a TreeViewItem + return DependencyProperty.UnsetValue; + } + + public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) + { + throw new NotImplementedException(); + } + } + + public class HasChildrenToVisibilityConverter : IValueConverter + { + public object Convert(object value, Type targetType, object parameter, CultureInfo culture) + { + if (value is TreeViewItem treeViewItem) + { + // Check if the TreeViewItem has any nested items (child items) + bool hasChildren = treeViewItem.Items.Count > 0; + + // Return the appropriate style based on the presence of children + return hasChildren ? Visibility.Hidden : Visibility.Visible; + } + + // Default style or value if the input is not a TreeViewItem + return Visibility.Visible; + } + + public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) + { + throw new NotImplementedException(); + } + } + + public class ChildrenItemsContainsFolderToVisibilityConverter : IValueConverter + { + public object Convert(object value, Type targetType, object parameter, CultureInfo culture) + { + if (value is ICollection children) + { + bool containsFolders = children.Any(x => x.DependencyType.Equals(DependencyType.Folder)); + + // Return visible if there are any folders in this root item's children + return containsFolders ? Visibility.Visible : Visibility.Collapsed; + } + + // Default style or value if the input is not a TreeViewItem + return Visibility.Visible; + } + + public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) + { + throw new NotImplementedException(); + } + } + + public class SortingConverter : IValueConverter + { + public object Convert(object value, Type targetType, object parameter, CultureInfo culture) + { + System.Collections.IList collection = value as System.Collections.IList; + var view = new ListCollectionView(collection); + var sort = new SortDescription(parameter.ToString(), ListSortDirection.Ascending); + view.SortDescriptions.Add(sort); + + return view; + } + + public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) + { + return null; + } + } + + public static class MyTreeViewHelper + { + private static TreeViewItem _currentItem = null; + + // IsMouseDirectlyOverItem: A DependencyProperty that will be true only on the + // TreeViewItem that the mouse is directly over. I.e., this won't be set on that + // parent item. + // + // This is the only public member, and is read-only. + + // The property key (since this is a read-only DP) + private static readonly DependencyPropertyKey IsMouseDirectlyOverItemKey = + DependencyProperty.RegisterAttachedReadOnly("IsMouseDirectlyOverItem", + typeof(bool), + typeof(MyTreeViewHelper), + new FrameworkPropertyMetadata(null, new CoerceValueCallback(CalculateIsMouseDirectlyOverItem))); + + // The DP itself + public static readonly DependencyProperty IsMouseDirectlyOverItemProperty = + IsMouseDirectlyOverItemKey.DependencyProperty; + + // A strongly-typed getter for the property. + public static bool GetIsMouseDirectlyOverItem(DependencyObject obj) + { + return (bool)obj.GetValue(IsMouseDirectlyOverItemProperty); + } + + // A coercion method for the property + private static object CalculateIsMouseDirectlyOverItem(DependencyObject item, object value) + { + // This method is called when the IsMouseDirectlyOver property is being calculated + // for a TreeViewItem. + if (item == _currentItem) + return true; + else + return false; + } + + // UpdateOverItem: A private RoutedEvent used to find the nearest encapsulating + // TreeViewItem to the mouse's current position. + private static readonly RoutedEvent UpdateOverItemEvent = EventManager.RegisterRoutedEvent( + "UpdateOverItem", RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(MyTreeViewHelper)); + + // Class constructor + static MyTreeViewHelper() + { + // Get all Mouse enter/leave events for TreeViewItem. + EventManager.RegisterClassHandler(typeof(TreeViewItem), TreeViewItem.MouseEnterEvent, new MouseEventHandler(OnMouseTransition), true); + EventManager.RegisterClassHandler(typeof(TreeViewItem), TreeViewItem.MouseLeaveEvent, new MouseEventHandler(OnMouseTransition), true); + + // Listen for the UpdateOverItemEvent on all TreeViewItem's. + EventManager.RegisterClassHandler(typeof(TreeViewItem), UpdateOverItemEvent, new RoutedEventHandler(OnUpdateOverItem)); + } + + + // OnUpdateOverItem: This method is a listener for the UpdateOverItemEvent. When it is received, + // it means that the sender is the closest TreeViewItem to the mouse (closest in the sense of the tree, + // not geographically). + + static void OnUpdateOverItem(object sender, RoutedEventArgs args) + { + // Mark this object as the tree view item over which the mouse + // is currently positioned. + _currentItem = sender as TreeViewItem; + + // Tell that item to re-calculate the IsMouseDirectlyOverItem property + _currentItem.InvalidateProperty(IsMouseDirectlyOverItemProperty); + + // Prevent this event from notifying other tree view items higher in the tree. + args.Handled = true; + } + + // OnMouseTransition: This method is a listener for both the MouseEnter event and + // the MouseLeave event on TreeViewItems. It updates the _currentItem, and updates + // the IsMouseDirectlyOverItem property on the previous TreeViewItem and the new + // TreeViewItem. + + static void OnMouseTransition(object sender, MouseEventArgs args) + { + lock (IsMouseDirectlyOverItemProperty) + { + if (_currentItem != null) + { + // Tell the item that previously had the mouse that it no longer does. + DependencyObject oldItem = _currentItem; + _currentItem = null; + oldItem.InvalidateProperty(IsMouseDirectlyOverItemProperty); + } + + // Get the element that is currently under the mouse. + IInputElement currentPosition = Mouse.DirectlyOver; + + // See if the mouse is still over something (any element, not just a tree view item). + if (currentPosition != null) + { + // Yes, the mouse is over something. + // Raise an event from that point. If a TreeViewItem is anywhere above this point + // in the tree, it will receive this event and update _currentItem. + + RoutedEventArgs newItemArgs = new RoutedEventArgs(UpdateOverItemEvent); + currentPosition.RaiseEvent(newItemArgs); + + } + } + } + } + + #endregion +} diff --git a/src/DynamoCoreWpf/Views/PackageManager/Controls/FilterTagControl.xaml b/src/DynamoCoreWpf/Views/PackageManager/Controls/FilterTagControl.xaml index 92241a7049b..1aeb2132a7e 100644 --- a/src/DynamoCoreWpf/Views/PackageManager/Controls/FilterTagControl.xaml +++ b/src/DynamoCoreWpf/Views/PackageManager/Controls/FilterTagControl.xaml @@ -23,8 +23,7 @@ ToggleDefaultBrush="{StaticResource MidBlueBrush}" ToggleHoverBrush="{StaticResource MidDarkBlueBrush}" TogglePressedBrush="{StaticResource MidLightBlueBrush}" /> - + - + + + + + + - - + + - - + + diff --git a/src/DynamoCoreWpf/Views/PackageManager/Controls/NumericUpDownControl.xaml b/src/DynamoCoreWpf/Views/PackageManager/Controls/NumericUpDownControl.xaml index 9e65748e433..46ba6ef2868 100644 --- a/src/DynamoCoreWpf/Views/PackageManager/Controls/NumericUpDownControl.xaml +++ b/src/DynamoCoreWpf/Views/PackageManager/Controls/NumericUpDownControl.xaml @@ -137,6 +137,7 @@ + /// Checks if the input value passes our criteria + /// + /// text string to be tested + /// + internal bool IsValidInput(string text) + { + return _numMatch.IsMatch(text); + } + // validate data before changing the text (only allow numbers) private void inputField_PreviewTextInput(object sender, TextCompositionEventArgs e) { var tb = (TextBox)sender; var text = tb.Text.Insert(tb.CaretIndex, e.Text); - e.Handled = !_numMatch.IsMatch(text); + e.Handled = !IsValidInput(text); } // Handles the direct input of text (via keyboard) @@ -166,7 +176,16 @@ private void inputField_LostFocus(object sender, RoutedEventArgs e) } mouseClickSelection = true; - } + } + + private void inputField_PreviewKeyDown(object sender, KeyEventArgs e) + { + if (e.Key == Key.Space) + { + e.Handled = true; // Prevent space from being entered + } + } + #endregion } } diff --git a/src/DynamoCoreWpf/Views/PackageManager/Controls/PackageManagerPackagesControl.xaml b/src/DynamoCoreWpf/Views/PackageManager/Controls/PackageManagerPackagesControl.xaml index e9d66b23f5d..998499ef4d2 100644 --- a/src/DynamoCoreWpf/Views/PackageManager/Controls/PackageManagerPackagesControl.xaml +++ b/src/DynamoCoreWpf/Views/PackageManager/Controls/PackageManagerPackagesControl.xaml @@ -14,7 +14,6 @@ d:DataContext="{d:DesignInstance ViewModels:PackageManagerSearchElementViewModel, IsDesignTimeCreatable=False}"> - @@ -22,16 +21,6 @@ - - - - - - @@ -485,7 +472,7 @@ - - - - - - - - @@ -424,547 +300,248 @@ + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - MIT - - - - + - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + diff --git a/src/DynamoCoreWpf/Views/PackageManager/Pages/PublishPackageFinishPage.xaml.cs b/src/DynamoCoreWpf/Views/PackageManager/Pages/PublishPackageFinishPage.xaml.cs new file mode 100644 index 00000000000..ebe06b98c30 --- /dev/null +++ b/src/DynamoCoreWpf/Views/PackageManager/Pages/PublishPackageFinishPage.xaml.cs @@ -0,0 +1,63 @@ +using System; +using System.Diagnostics; +using System.IO; +using System.Linq; +using System.Windows; +using System.Windows.Controls; +using Dynamo.PackageManager; +using Dynamo.PackageManager.UI; + +namespace Views.PackageManager.Pages +{ + /// + /// Interaction logic for PublishPackageFinishPage.xaml + /// + public partial class PublishPackageFinishPage : Page + { + private PublishPackageViewModel PublishPackageViewModel; + + public PublishPackageFinishPage() + { + InitializeComponent(); + + this.DataContextChanged += PublishFinishPage_DataContextChanged; + this.Tag = "Publish Finished Page"; + } + + internal void LoadEvents() + { + if ( PublishPackageViewModel == null ) { return; } + + var uploadType = PublishPackageViewModel.UploadType; + var publishedFiles = PackageItemRootViewModel.GetFiles(PublishPackageViewModel.PackageContents.ToList()); + var count = publishedFiles.Count(x => x.DependencyType != DependencyType.Folder); + var message = uploadType.Equals(PackageUploadHandle.UploadType.Local) ? + Dynamo.Wpf.Properties.Resources.PackageManagerFinishedPackageFilesPublishedMessage : + Dynamo.Wpf.Properties.Resources.PackageManagerFinishedPackageFilesUploadedMessage; + + this.filesUploadedMessage.Text = String.Format("{0} {1}", count.ToString(), message); + this.packagePathTextBlox.Text = PublishPackageViewModel.RootFolder; + } + + private void PublishFinishPage_DataContextChanged(object sender, DependencyPropertyChangedEventArgs e) + { + PublishPackageViewModel = this.DataContext as PublishPackageViewModel; + } + + private void uploadFilesDirectoryButton_Click(object sender, RoutedEventArgs e) + { + if(this.packagePathTextBlox is TextBox pathTextBox && !String.IsNullOrEmpty(pathTextBox.Text)){ + var directory = pathTextBox.Text; + if (!Directory.Exists(directory)) { return; } + + Process.Start("explorer.exe", directory); + } + } + + public void Dispose() + { + this.PublishPackageViewModel = null; + this.DataContextChanged -= PublishFinishPage_DataContextChanged; + } + } +} diff --git a/src/DynamoCoreWpf/Views/PackageManager/Pages/PublishPackagePreviewPage.xaml b/src/DynamoCoreWpf/Views/PackageManager/Pages/PublishPackagePreviewPage.xaml new file mode 100644 index 00000000000..db73da4bdd7 --- /dev/null +++ b/src/DynamoCoreWpf/Views/PackageManager/Pages/PublishPackagePreviewPage.xaml @@ -0,0 +1,445 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/DynamoCoreWpf/Views/PackageManager/Pages/PublishPackagePreviewPage.xaml.cs b/src/DynamoCoreWpf/Views/PackageManager/Pages/PublishPackagePreviewPage.xaml.cs new file mode 100644 index 00000000000..16826c28ba7 --- /dev/null +++ b/src/DynamoCoreWpf/Views/PackageManager/Pages/PublishPackagePreviewPage.xaml.cs @@ -0,0 +1,57 @@ +using System.Windows; +using System.Windows.Controls; + +namespace Dynamo.PackageManager.UI +{ + /// + /// Interaction logic for PublishPackagePreviewPage.xaml + /// + public partial class PublishPackagePreviewPage : Page + { + private PublishPackageViewModel PublishPackageViewModel; + + /// + /// Constructor + /// + public PublishPackagePreviewPage() + { + InitializeComponent(); + + this.DataContextChanged += PublishPackagePublishPage_DataContextChanged; + this.Tag = "Preview Package Contents"; + } + + private void PublishPackagePublishPage_DataContextChanged(object sender, DependencyPropertyChangedEventArgs e) + { + PublishPackageViewModel = this.DataContext as PublishPackageViewModel; + } + + internal void LoadEvents() + { + this.IsEnabled = true; + + if (customBrowserControl != null) + { + var treeView = customBrowserControl.customTreeView; + + customBrowserControl.RefreshCustomTreeView(); + customBrowserControl.customTreeView_SelectedItemChanged(treeView, null); + } + } + + public void Dispose() + { + this.PublishPackageViewModel = null; + this.DataContextChanged -= PublishPackagePublishPage_DataContextChanged; + this.customBrowserControl?.Dispose(); + } + + private void customBrowserControl_Loaded(object sender, RoutedEventArgs e) + { + if (customBrowserControl != null) + { + customBrowserControl.RefreshCustomTreeView(); + } + } + } +} diff --git a/src/DynamoCoreWpf/Views/PackageManager/Pages/PublishPackagePublishPage.xaml b/src/DynamoCoreWpf/Views/PackageManager/Pages/PublishPackagePublishPage.xaml new file mode 100644 index 00000000000..3fa2101b100 --- /dev/null +++ b/src/DynamoCoreWpf/Views/PackageManager/Pages/PublishPackagePublishPage.xaml @@ -0,0 +1,1055 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + MIT + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/DynamoCoreWpf/Views/PackageManager/Pages/PublishPackagePublishPage.xaml.cs b/src/DynamoCoreWpf/Views/PackageManager/Pages/PublishPackagePublishPage.xaml.cs new file mode 100644 index 00000000000..84e1a796522 --- /dev/null +++ b/src/DynamoCoreWpf/Views/PackageManager/Pages/PublishPackagePublishPage.xaml.cs @@ -0,0 +1,147 @@ +using System.Diagnostics; +using System.Globalization; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Media; +using System.Windows.Navigation; + +namespace Dynamo.PackageManager.UI +{ + public class PackageNameLengthValidationRule : ValidationRule + { + public override ValidationResult Validate(object value, CultureInfo cultureInfo) + { + if (value is string name && name.TrimEnd().Length > 2) + { + // Validation succeeded + return ValidationResult.ValidResult; + } + + // Validation failed + return new ValidationResult(false, Wpf.Properties.Resources.NameNeedMoreCharacters); + } + } + + + /// + /// Interaction logic for PublishPackagePublishPage.xaml + /// + public partial class PublishPackagePublishPage : Page + { + private PublishPackageViewModel PublishPackageViewModel; + + public PublishPackagePublishPage() + { + InitializeComponent(); + + this.DataContextChanged += PublishPackagePublishPage_DataContextChanged; + this.Tag = "Publish a Package"; + } + + private void PublishPackagePublishPage_DataContextChanged(object sender, DependencyPropertyChangedEventArgs e) + { + PublishPackageViewModel = this.DataContext as PublishPackageViewModel; + } + + public void LoadEvents() + { + this.IsEnabled = true; + + if (previewBrowserControl != null) + { + var treeView = previewBrowserControl.customTreeView; + + previewBrowserControl.RefreshCustomTreeView(); + previewBrowserControl.customTreeView_SelectedItemChanged(treeView, null); + } + } + + private void HostEntry_CheckStateChanged(object sender, RoutedEventArgs e) + { + PublishPackageViewModel.SelectedHosts.Clear(); + PublishPackageViewModel.SelectedHostsString = string.Empty; + foreach (var host in PublishPackageViewModel.KnownHosts) + { + if (host.IsSelected) + { + PublishPackageViewModel.SelectedHosts.Add(host.HostName); + PublishPackageViewModel.SelectedHostsString += host.HostName + ", "; + } + } + // Format string since it will be displayed + PublishPackageViewModel.SelectedHostsString = PublishPackageViewModel.SelectedHostsString.Trim().TrimEnd(','); + } + + /// + /// Navigates to a predefined URL in the user's default browser. + /// Currently used to make the MIT license text a clickable link. + /// + /// + /// + private void Hyperlink_RequestNavigate(object sender, RequestNavigateEventArgs e) + { + Process.Start(new ProcessStartInfo(e.Uri.AbsoluteUri) { UseShellExecute = true }); + e.Handled = true; + } + + public void Dispose() + { + this.PublishPackageViewModel = null; + this.DataContextChanged -= PublishPackagePublishPage_DataContextChanged; + this.previewBrowserControl?.Dispose(); + } + + private void NavigationButton_Click(object sender, RoutedEventArgs e) + { + var pmPublishControl = GetUserControlFromPage(this) as PackageManagerPublishControl; + if (pmPublishControl != null) + { + pmPublishControl.BreadcrumbButton_Click(sender, e); + } + } + + public static UserControl GetUserControlFromPage(Page page) + { + if (page == null) + { + return null; + } + + // Get the parent of the Page (a Frame or NavigationWindow) + DependencyObject parent = VisualTreeHelper.GetParent(page); + + while (parent != null) + { + if (parent is UserControl control) + { + return control; + } + + // Check the parent's parent + parent = VisualTreeHelper.GetParent(parent); + } + + return null; // Page is not hosted in a Window + } + + private void previewBrowserControl_Loaded(object sender, RoutedEventArgs e) + { + if (previewBrowserControl != null) + { + previewBrowserControl.RefreshCustomTreeView(); + } + } + + private void textBoxInput_PreviewKeyDown(object sender, System.Windows.Input.KeyEventArgs e) + { + var textBox = sender as TextBox; + if (textBox == null) return; + + // Prevents text starting with a space + if (e.Key == System.Windows.Input.Key.Space && string.IsNullOrWhiteSpace(textBox.Text)) + { + e.Handled = true; + } + } + } +} diff --git a/src/DynamoCoreWpf/Views/PackageManager/Pages/PublishPackageSelectPage.xaml b/src/DynamoCoreWpf/Views/PackageManager/Pages/PublishPackageSelectPage.xaml new file mode 100644 index 00000000000..77801747576 --- /dev/null +++ b/src/DynamoCoreWpf/Views/PackageManager/Pages/PublishPackageSelectPage.xaml @@ -0,0 +1,615 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/DynamoCoreWpf/Views/PackageManager/Pages/PublishPackageSelectPage.xaml.cs b/src/DynamoCoreWpf/Views/PackageManager/Pages/PublishPackageSelectPage.xaml.cs new file mode 100644 index 00000000000..a5132dc1aac --- /dev/null +++ b/src/DynamoCoreWpf/Views/PackageManager/Pages/PublishPackageSelectPage.xaml.cs @@ -0,0 +1,235 @@ +using System; +using System.Collections.ObjectModel; +using System.ComponentModel; +using System.Globalization; +using System.Linq; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Data; +using Dynamo.Utilities; + +namespace Dynamo.PackageManager.UI +{ + /// + /// Interaction logic for PublishPackageSelectPage.xaml + /// + public partial class PublishPackageSelectPage : Page, INotifyPropertyChanged + { + private PublishPackageViewModel PublishPackageViewModel; + + public event PropertyChangedEventHandler PropertyChanged; + + /// + /// A selection of PackageItemRootViewModel keeping track of currently seleted items + /// Used for removing files and folders from the current Package contents + /// + public ObservableCollection ItemSelection { get; set; } = new ObservableCollection(); + + private bool _allItemsSelected; + /// + /// Indicates if all preview items are currently selected + /// + public bool AllItemsSelected + { + get { return _allItemsSelected; } + set + { + if (_allItemsSelected != value) + { + _allItemsSelected = value; + RaisePropertyChanged(nameof(AllItemsSelected)); + } + } + } + protected virtual void RaisePropertyChanged(string propertyName) + { + PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); + } + + /// + /// Constructor + /// + public PublishPackageSelectPage() + { + InitializeComponent(); + + this.DataContextChanged += PublishPackagePublishPage_DataContextChanged; + this.Tag = "Select Package Contents"; + } + + private void PublishPackagePublishPage_DataContextChanged(object sender, DependencyPropertyChangedEventArgs e) + { + PublishPackageViewModel = this.DataContext as PublishPackageViewModel; + } + + internal void LoadEvents() + { + this.IsEnabled = true; + + if (customBrowserControl != null) + { + var treeView = customBrowserControl.customTreeView; + + customBrowserControl.RefreshCustomTreeView(); + customBrowserControl.customTreeView_SelectedItemChanged(treeView, null); + } + } + + public void Dispose() + { + this.ItemSelection?.Clear(); + this.PublishPackageViewModel = null; + this.DataContextChanged -= PublishPackagePublishPage_DataContextChanged; + this.customBrowserControl?.Dispose(); + } + + private void customBrowserControl_Loaded(object sender, RoutedEventArgs e) + { + var firstItem = (TreeViewItem)this.customBrowserControl.customTreeView.ItemContainerGenerator.ContainerFromIndex(0); + if (firstItem != null) + { + firstItem.IsSelected = true; + } + } + + // Removes all currently selected PackageItemRootViewModel items + private void RemoveButton_Click(object sender, RoutedEventArgs e) + { + foreach(var item in ItemSelection) + { + PublishPackageViewModel.RemoveItemCommand.Execute(item); + } + + ItemSelection.Clear(); + AllItemsSelected = false; + } + + // Adds/removes (selects/deselects) item to the ItemSelection collection + private void SelectItemCheckBox_Checked(object sender, RoutedEventArgs e) + { + var checkBox = sender as CheckBox; + if (checkBox == null) { return; } + + var row = WpfUtilities.FindUpVisualTree(checkBox); + if (row == null) { return; } + + var item = row.DataContext as PackageItemRootViewModel; + if (item == null) { return; } + + if (checkBox.IsChecked == true) + { + item.IsSelected = true; + ItemSelection.Add(item); + } + else + { + item.IsSelected = false; + ItemSelection.Remove(item); + } + + if(ItemSelection.Count == PublishPackageViewModel.RootContents.Count) + { + AllItemsSelected = true; + } + else { AllItemsSelected = false; } + } + + // Clears the current item selection + private void DeselectButton_Click(object sender, RoutedEventArgs e) + { + ItemSelection.ToList() + .ForEach(item => { item.IsSelected = false; }); + + ItemSelection.Clear(); + AllItemsSelected = false; + } + + // Selects/deselects all items inside the current RootContents collection + private void SelectDeselectButton_Click(object sender, RoutedEventArgs e) + { + var checkBox = (sender as CheckBox); + if (checkBox == null) { return; } + + ItemSelection.Clear(); + + if (checkBox.IsChecked == true) + { + PublishPackageViewModel.RootContents.ToList().ForEach(item => { item.IsSelected = true; }); + ItemSelection.AddRange(PublishPackageViewModel.RootContents); + } + else + { + PublishPackageViewModel.RootContents.ToList().ForEach(item => { item.IsSelected = false; }); + } + } + } + + public class DependencyTypeToImageSourceConverter : IValueConverter + { + public object Convert(object value, Type targetType, object parameter, CultureInfo culture) + { + if (value is not DependencyType.Folder) + { + // Return visible only if the item is a Folder + return "/DynamoCoreWpf;component/UI/Images/file-generic-16px.png"; + } + + // If the item is anything else (Assembly, File, Custom Node) return collapsed + return "/DynamoCoreWpf;component/UI/Images/folder-generic-16px.png"; + } + + public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) + { + throw new NotImplementedException(); + } + } + + + public class DependencyTypeToVisibilityConverter : IValueConverter + { + public object Convert(object value, Type targetType, object parameter, CultureInfo culture) + { + if (value != null && value is DependencyType dependencyType) + { + if (dependencyType.ToString() == parameter?.ToString()) + { + // Return visible if the item matches the specified dependency type + return Visibility.Visible; + } + } + // If the item does not match the specified dependency type or value is null, return collapsed + return Visibility.Collapsed; + } + + public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) + { + throw new NotImplementedException(); + } + } + + /// + /// Assembly can either have an Assembly or File DependencyType. We need to check for both. + /// + public class AsselmblyPackageItemRootViewModelToVisibilityConverter : IValueConverter + { + public object Convert(object value, Type targetType, object parameter, CultureInfo culture) + { + if (value != null && value is PackageItemRootViewModel item) + { + if (item.DependencyType.Equals(DependencyType.Assembly)) + { + // Return visible if the item is an Assembly + return Visibility.Visible; + } + } + // If the item does not match the specified dependency type or value is null, return collapsed + return Visibility.Collapsed; + } + + public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) + { + throw new NotImplementedException(); + } + } + +} diff --git a/src/DynamoCoreWpf/Views/SplashScreen/SplashScreen.xaml.cs b/src/DynamoCoreWpf/Views/SplashScreen/SplashScreen.xaml.cs index 2a56843cc30..1445a0ed524 100644 --- a/src/DynamoCoreWpf/Views/SplashScreen/SplashScreen.xaml.cs +++ b/src/DynamoCoreWpf/Views/SplashScreen/SplashScreen.xaml.cs @@ -14,6 +14,7 @@ using Dynamo.Utilities; using Dynamo.ViewModels; using DynamoUtilities; +using Greg.AuthProviders; using Microsoft.Web.WebView2.Core; using Microsoft.Web.WebView2.Wpf; @@ -83,7 +84,7 @@ public DynamoView DynamoView // When view model is closed, we need to close the splash screen if it is displayed. viewModel.RequestClose += SplashScreenRequestClose; authManager = viewModel.Model.AuthenticationManager; - hostAnalyticsInfo = viewModel.Model.HostAnalyticsInfo; + hostAnalyticsInfo = DynamoModel.HostAnalyticsInfo; } } @@ -129,9 +130,15 @@ public void OnRequestStaticSplashScreen() } /// - /// Constructor + /// Stores the value that indicates if the SignIn Button will be enabled(default) or not /// - public SplashScreen() + bool enableSignInButton; + + /// + /// Splash Screen Constructor. + /// Indicates if the SignIn Button will be enabled(default) or not. + /// + public SplashScreen(bool enableSignInButton = true) { InitializeComponent(); @@ -149,6 +156,7 @@ public SplashScreen() RequestImportSettings = ImportSettings; RequestSignIn = SignIn; RequestSignOut = SignOut; + this.enableSignInButton = enableSignInButton; } private void DynamoModel_LanguageDetected() @@ -230,12 +238,16 @@ private void LaunchDynamo(bool isCheckboxChecked) { viewModel.PreferenceSettings.EnableStaticSplashScreen = !isCheckboxChecked; } - StaticSplashScreenReady -= OnStaticScreenReady; Close(); dynamoView?.Show(); dynamoView?.Activate(); } + private void OnLoginStateChanged(LoginState state) + { + HandleSignInStatusChange(authManager.IsLoggedIn()); + } + /// /// Once main window is initialized, Dynamic Splash screen should finish loading /// @@ -250,6 +262,7 @@ private void OnStaticScreenReady() // If user is launching Dynamo for the first time or chose to always show splash screen, display it. Otherwise, display Dynamo view directly. if (viewModel.PreferenceSettings.IsFirstRun || viewModel.PreferenceSettings.EnableStaticSplashScreen) { + authManager.LoginStateChanged += OnLoginStateChanged; SetSignInStatus(authManager.IsLoggedInInitial()); SetLoadingDone(); } @@ -346,6 +359,7 @@ internal async void SetLoadingDone() { await webView.CoreWebView2.ExecuteScriptAsync($"window.setLoadingDone()"); await webView.CoreWebView2.ExecuteScriptAsync($"window.setTotalLoadingTime(\"{Wpf.Properties.Resources.SplashScreenTotalLoadingTimeLabel} {totalLoadingTime}ms\")"); + SetSignInEnable(enableSignInButton); } } @@ -393,6 +407,28 @@ await webView.CoreWebView2.ExecuteScriptAsync("window.setSignInStatus({" + } } + /// + /// Handle the login status changes on splash screen. + /// + internal async void HandleSignInStatusChange(bool status) + { + if (webView?.CoreWebView2 != null) + { + await webView.CoreWebView2.ExecuteScriptAsync(@$"window.handleSignInStateChange({{""status"": ""{status}""}})"); + } + } + + /// + /// Enable or disable the SignIn button on splash screen. + /// + /// + internal async void SetSignInEnable(bool enabled) + { + if (webView?.CoreWebView2 != null) + { + await webView.CoreWebView2.ExecuteScriptAsync(@$"window.setEnableSignInButton({{""enable"": ""{enabled}""}})"); + } + } /// /// Setup the values for all labels on splash screen using resources /// @@ -509,6 +545,11 @@ protected override void OnClosed(EventArgs e) DynamoModel.RequestUpdateLoadBarStatus -= DynamoModel_RequestUpdateLoadBarStatus; DynamoModel.LanguageDetected -= DynamoModel_LanguageDetected; + StaticSplashScreenReady -= OnStaticScreenReady; + if (authManager is not null) + { + authManager.LoginStateChanged -= OnLoginStateChanged; + } webView.Dispose(); webView = null; diff --git a/src/DynamoCrypto/Dynamo.cer b/src/DynamoCrypto/Dynamo.cer deleted file mode 100644 index b9d26a00e6b..00000000000 Binary files a/src/DynamoCrypto/Dynamo.cer and /dev/null differ diff --git a/src/DynamoCrypto/DynamoCrypto.cs b/src/DynamoCrypto/DynamoCrypto.cs deleted file mode 100644 index b79a6d90463..00000000000 --- a/src/DynamoCrypto/DynamoCrypto.cs +++ /dev/null @@ -1,200 +0,0 @@ -īģŋusing System; -using System.Diagnostics; -using System.IO; -using System.Security.Cryptography; -using System.Security.Cryptography.X509Certificates; - -namespace DynamoCrypto -{ - /// - /// This class contains static methods for finding Dynamo certificates in - /// a user, or a local machine's certificate store. It also has methods - /// for signing or verifying a file using public/private key pairs. These methods - /// use the DSA algorithm for verification. - /// - public class Utils - { - /// - /// Find a certificate in the key store and return the - /// private key, if one is available. - /// - /// The key container name. - /// An X509Certificate2 object containing a private key. - /// A byte array of the private key. - public static byte[] GetPrivateKeyFromCertificate(X509Certificate2 certificate) - { - byte[] privateBlob; - - if (certificate.HasPrivateKey) - { - var dsa = certificate.PrivateKey as DSACryptoServiceProvider; - - if (dsa == null) - { - Console.WriteLine("There was an error getting the private key from the certificate."); - return null; - } - - privateBlob = dsa.ExportCspBlob(true); - dsa.Dispose(); - } - else - { - Console.WriteLine("The certificate does not contain a private key."); - return null; - } - - return privateBlob; - } - - /// - /// Find a certificate in the key store and return the - /// public key, if one is available. - /// - /// The key container name. - /// A X509Certificate2 object containing a public key. - /// A byte array of the the public key or null if the certificate does not contain a public key. - public static byte[] GetPublicKeyFromCertificate(X509Certificate2 certificate) - { - var dsa = certificate.PublicKey.Key as DSACryptoServiceProvider; - - if (dsa == null) - { - Console.WriteLine("There was an error getting the public key from the certificate."); - return null; - } - - byte[] publicBlob = dsa.ExportCspBlob(false); - dsa.Dispose(); - - return publicBlob; - } - - /// - /// Generate a signature file using a private key. - /// - /// The file whose contents will be hashed. - /// The path of the generated signature file. - /// The private key. - public static void SignFile(string filePath, string signatureFilePath, byte[] privateBlob) - { - try - { - if (privateBlob.Length == 0) - { - throw new Exception("The specified private key is invalid."); - } - - byte[] hash = null; - - using (Stream fileStream = File.Open(filePath, FileMode.Open)) - { - SHA1 sha1 = new SHA1CryptoServiceProvider(); - hash = sha1.ComputeHash(fileStream); - } - - // Import the private key - var dsa = new DSACryptoServiceProvider(); - dsa.ImportCspBlob(privateBlob); - var rsaFormatter = new DSASignatureFormatter(dsa); - rsaFormatter.SetHashAlgorithm("SHA1"); - - // Create a signature based on the private key - byte[] signature = rsaFormatter.CreateSignature(hash); - - // Write the signature file - File.WriteAllBytes(signatureFilePath, signature); - } - catch (Exception e) - { - Debug.WriteLine(e); - } - } - - /// - /// Verify a file using a signature file and a public key. - /// - /// The file whose contents will be hashed. - /// The path of the signature file. - /// The public key. - /// True if the file is verified, otherwise false. - public static bool VerifyFile(string filePath, string signatureFilePath, byte[] publicBlob) - { - if (publicBlob.Length == 0) - return false; - - bool verified = false; - byte[] hash = null; - - try - { - // Compute a hash of the installer - using (Stream fileStream = File.Open(filePath, FileMode.Open)) - { - SHA1 sha1 = new SHA1CryptoServiceProvider(); - hash = sha1.ComputeHash(fileStream); - } - - // Import the public key - var dsa = new DSACryptoServiceProvider(); - dsa.ImportCspBlob(publicBlob); - - var dsaDeformatter = new DSASignatureDeformatter(dsa); - dsaDeformatter.SetHashAlgorithm("SHA1"); - - // Read the signature file - byte[] signature = File.ReadAllBytes(signatureFilePath); - - // Verify the signature against the hash of the installer - verified = dsaDeformatter.VerifySignature(hash, signature); - - Console.WriteLine("File verified: {0}", verified); - } - catch (Exception e) - { - Debug.WriteLine(e); - - return false; - } - - return verified; - } - - /// - /// Find a certificate in the key store. - /// - /// The key container name. - /// An X509Certificate2 or null if no certificate can be found. - public static X509Certificate2 FindCertificateForCurrentUser(string keyContainerName, StoreLocation location) - { - // Look for the Dynamo certificate in the certificate store. - // http://stackoverflow.com/questions/6304773/how-to-get-x509certificate-from-certificate-store-and-generate-xml-signature-dat - var store = new X509Store(location); - store.Open(OpenFlags.ReadOnly); - var cers = store.Certificates.Find(X509FindType.FindBySubjectName, keyContainerName, false); - - X509Certificate2 cer = null; - if (cers.Count == 0) - { - Console.WriteLine("The certificate could not be found in the certificate store."); - return null; - } - - cer = cers[0]; - return cer; - } - - /// - /// Install a certificate in the local machine certificate store. - /// - /// The installed certificate. - public static X509Certificate2 InstallCertificateForCurrentUser(string certPath) - { - var store = new X509Store(StoreLocation.CurrentUser); - store.Open(OpenFlags.ReadWrite); - var cert = new X509Certificate2(certPath); - store.Add(cert); - return cert; - } - } -} diff --git a/src/DynamoCrypto/DynamoCrypto.csproj b/src/DynamoCrypto/DynamoCrypto.csproj deleted file mode 100644 index e5dd1fd49d8..00000000000 --- a/src/DynamoCrypto/DynamoCrypto.csproj +++ /dev/null @@ -1,18 +0,0 @@ -īģŋ - - - - - {96643E77-C786-498C-AAA9-80E449854CE9} - Library - Properties - DynamoCrypto - DynamoCrypto - - - - PreserveNewest - - - - \ No newline at end of file diff --git a/src/DynamoCrypto/Properties/AssemblyInfo.cs b/src/DynamoCrypto/Properties/AssemblyInfo.cs deleted file mode 100644 index 95f6482d058..00000000000 --- a/src/DynamoCrypto/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,11 +0,0 @@ -īģŋusing System.Reflection; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("DynamoCrypto")] -[assembly: AssemblyCulture("")] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("523c59b7-6fb8-4a80-a119-f031faf5cbd3")] diff --git a/src/DynamoManipulation/DynamoManipulation.csproj b/src/DynamoManipulation/DynamoManipulation.csproj index 31a0f991507..fce8a5a9727 100644 --- a/src/DynamoManipulation/DynamoManipulation.csproj +++ b/src/DynamoManipulation/DynamoManipulation.csproj @@ -40,7 +40,7 @@ - + diff --git a/src/DynamoPackages/DynamoPackages.csproj b/src/DynamoPackages/DynamoPackages.csproj index ef52d420fb4..9c294ca7d47 100644 --- a/src/DynamoPackages/DynamoPackages.csproj +++ b/src/DynamoPackages/DynamoPackages.csproj @@ -30,9 +30,10 @@ - + - + + diff --git a/src/DynamoPackages/Package.cs b/src/DynamoPackages/Package.cs index f6b1f6b9d61..8c5d5e08b9b 100644 --- a/src/DynamoPackages/Package.cs +++ b/src/DynamoPackages/Package.cs @@ -23,6 +23,7 @@ public class PackageAssembly { public bool IsNodeLibrary { get; set; } public Assembly Assembly { get; set; } + public string LocalFilePath {get;set;} public string Name { @@ -327,7 +328,8 @@ public void EnumerateAdditionalFiles() AdditionalFiles.AddRange(nonDyfDllFiles); } - public IEnumerable EnumerateAssemblyFilesInBinDirectory() + //TODO can we make this internal? + public IEnumerable EnumerateAssemblyFilesInPackage() { if (String.IsNullOrEmpty(RootDirectory) || !Directory.Exists(RootDirectory)) return new List(); diff --git a/src/DynamoPackages/PackageDirectoryBuilder.cs b/src/DynamoPackages/PackageDirectoryBuilder.cs index ed8ef09e683..6189e9b8222 100644 --- a/src/DynamoPackages/PackageDirectoryBuilder.cs +++ b/src/DynamoPackages/PackageDirectoryBuilder.cs @@ -11,6 +11,7 @@ namespace Dynamo.PackageManager public interface IPackageDirectoryBuilder { IDirectoryInfo BuildDirectory(Package packages, string packagesDirectory, IEnumerable files, IEnumerable markdownfiles); + IDirectoryInfo BuildRetainDirectory(Package package, string packagesDirectory, IEnumerable> contentFiles, IEnumerable markdownFiles); } /// @@ -56,12 +57,40 @@ public IDirectoryInfo BuildDirectory(Package package, string packagesDirectory, WritePackageHeader(package, rootDir); RemoveUnselectedFiles(contentFiles, rootDir); CopyFilesIntoPackageDirectory(contentFiles, markdownFiles, dyfDir, binDir, extraDir, docDir); - RemoveDyfFiles(contentFiles, dyfDir); + RemoveDyfFiles(contentFiles, dyfDir); + RemapCustomNodeFilePaths(contentFiles, dyfDir.FullName); return rootDir; } + public IDirectoryInfo BuildRetainDirectory(Package package, string packagesDirectory, IEnumerable> contentFiles, IEnumerable markdownFiles) + { + + var rootPath = Path.Combine(packagesDirectory, package.Name); + var rootDir = fileSystem.TryCreateDirectory(rootPath); + package.RootDirectory = rootDir.FullName; + + var dyfFiles = new List(); + + WritePackageHeader(package, rootDir); + + RemoveUnselectedFiles(contentFiles.SelectMany(files => files).ToList(), rootDir); + CopyFilesIntoRetainedPackageDirectory(contentFiles, markdownFiles, rootDir, out dyfFiles); + RemoveRetainDyfFiles(contentFiles.SelectMany(files => files).ToList(), dyfFiles); + + RemapRetainCustomNodeFilePaths(contentFiles.SelectMany(files => files).ToList(), dyfFiles); + + + return rootDir; + } + + public static void PreBuildDirectory(string packageName, string packagesDirectory, + out string rootDir, out string dyfDir, out string binDir, out string extraDir, out string docDir) + { + PreviewPackageDirectory(packagesDirectory, packageName, out rootDir, out dyfDir, out binDir, out extraDir, out docDir); + } + #endregion #region Private Utility Methods @@ -74,6 +103,39 @@ private void RemapCustomNodeFilePaths(IEnumerable filePaths, string dyfR } } + private void RemapRetainCustomNodeFilePaths(IEnumerable filePaths, List dyfFiles) + { + foreach (var func in filePaths.Where(x => x.EndsWith(".dyf"))) + { + //var remapLocation = dyfFiles.First(x => Path.GetDirectoryName(x).Equals(Path.GetDirectoryName(func))); + var remapLocation = dyfFiles.First(x => + { + var p1 = Path.GetFileName(Path.GetDirectoryName(x)); + var f1 = Path.GetFileName(x); + var r1 = Path.Combine(p1, f1); + + var p2 = Path.GetFileName(Path.GetDirectoryName(func)); + var f2 = Path.GetFileName(func); + var r2 = Path.Combine(p2, f2); + + return r1.Equals(r2); + }); + pathRemapper.SetPath(func, remapLocation); + } + } + + + private void RemoveRetainDyfFiles(IEnumerable filePaths, List dyfFiles) + { + var dyfsToRemove = filePaths + .Where(x => x.EndsWith(".dyf") && fileSystem.FileExists(x) && Path.GetDirectoryName(x) != Path.GetDirectoryName(dyfFiles.First(f => Path.GetFileName(f).Equals(Path.GetFileName(x))))); + + foreach (var dyf in dyfsToRemove) + { + fileSystem.DeleteFile(dyf); + } + } + private void RemoveDyfFiles(IEnumerable filePaths, IDirectoryInfo dyfDir) { var dyfsToRemove = filePaths @@ -122,6 +184,19 @@ private void FormPackageDirectory(string packageDirectory, string packageName, docDir = fileSystem.TryCreateDirectory(docPath); } + + private static void PreviewPackageDirectory(string packageDirectory, string packageName, + out string root, out string dyfDir, + out string binDir, out string extraDir, + out string docDir) + { + root = Path.Combine(packageDirectory, packageName); + dyfDir = Path.Combine(root, CustomNodeDirectoryName); + binDir = Path.Combine(root, BinaryDirectoryName); + extraDir = Path.Combine(root, ExtraDirectoryName); + docDir = Path.Combine(root, DocumentationDirectoryName); + } + private void WritePackageHeader(Package package, IDirectoryInfo rootDir) { var pkgHeader = PackageUploadBuilder.NewRequestBody(package); @@ -139,6 +214,77 @@ private void WritePackageHeader(Package package, IDirectoryInfo rootDir) fileSystem.WriteAllText(headerPath, pkgHeaderStr); } + internal void CopyFilesIntoRetainedPackageDirectory(IEnumerable> contentFiles, IEnumerable markdownFiles, IDirectoryInfo rootDir, out List dyfFiles) + { + dyfFiles = new List(); + + foreach (var files in contentFiles) + { + // We expect that files are bundled in root folders + // For single files, just get its folder + var commonPath = files.Count() > 1 ? GetLongestCommonPrefix(files.ToArray()) : Path.GetDirectoryName(files.First()); + commonPath = commonPath.TrimEnd(Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar); + var commonRootPath = Path.GetDirectoryName(commonPath); + if (commonRootPath == null) commonRootPath = commonPath; // already at the root + + foreach (var file in files.Where(x => x != null)) + { + // If the file doesn't actually exist, don't copy it + if (!fileSystem.FileExists(file)) + { + continue; + } + + var relativePath = file.Substring(commonRootPath.Length); + + // Ensure the relative path starts with a directory separator. + if (!string.IsNullOrEmpty(relativePath) && relativePath[0] != Path.DirectorySeparatorChar) + { + relativePath = Path.DirectorySeparatorChar + relativePath; + } + + var destPath = Path.Combine(rootDir.FullName, relativePath.TrimStart('\\')); + + // We are already creating the pkg.json file ourselves, so skip it + if (destPath.Equals(Path.Combine(rootDir.FullName, "pkg.json"))) + { + continue; + } + + if (fileSystem.FileExists(destPath)) + { + fileSystem.DeleteFile(destPath); + } + + if (!Directory.Exists(Path.GetDirectoryName(destPath))) + { + Directory.CreateDirectory(Path.GetDirectoryName(destPath)); + } + + fileSystem.CopyFile(file, destPath); + + if (file.EndsWith(".dyf")) + { + dyfFiles.Add(destPath); + } + } + } + // All files under Markdown directory do not apply to the rule above, + // because they may fall into extra folder instead of docs folder, + // currently there is on obvious way to filter them properly only based on path string. + var docDirPath = Path.Combine(rootDir.FullName, DocumentationDirectoryName); + foreach (var file in markdownFiles.Where(x => x != null)) + { + var destPath = Path.Combine(docDirPath, Path.GetFileName(file)); + + if (fileSystem.FileExists(destPath)) + { + fileSystem.DeleteFile(destPath); + } + + fileSystem.CopyFile(file, destPath); + } + } internal void CopyFilesIntoPackageDirectory(IEnumerable files, IEnumerable markdownFiles, IDirectoryInfo dyfDir, IDirectoryInfo binDir, @@ -244,6 +390,28 @@ public static string NormalizePath(string path) .ToUpperInvariant(); } + + /// + /// Utility method to get the common file path + /// + /// A collection of filepaths + /// + public static string GetLongestCommonPrefix(string[] s) + { + int k = s[0].Length; + for (int i = 1; i < s.Length; i++) + { + k = Math.Min(k, s[i].Length); + for (int j = 0; j < k; j++) + if (s[i][j] != s[0][j]) + { + k = j; + break; + } + } + return s[0].Substring(0, k); + } + #endregion } diff --git a/src/DynamoPackages/PackageLoader.cs b/src/DynamoPackages/PackageLoader.cs index 95ee95b09e2..6e28e734ae7 100644 --- a/src/DynamoPackages/PackageLoader.cs +++ b/src/DynamoPackages/PackageLoader.cs @@ -3,7 +3,7 @@ using System.IO; using System.Linq; using System.Reflection; -using Dynamo.Configuration; +using System.Runtime.Loader; using Dynamo.Core; using Dynamo.Exceptions; using Dynamo.Extensions; @@ -743,28 +743,38 @@ private void CheckPackageNodeLibraryCertificates(string packageDirectoryPath, Pa } /// - /// Attempt to load a managed assembly in to ReflectionOnlyLoadFrom context. + /// Attempt to load a managed assembly in to MetaDataLoad context. /// /// The filename of a DLL + /// The MetaDataLoadContext to load the package assemblies into for inspection. /// out Assembly - the passed value does not matter and will only be set if loading succeeds /// Returns Success if success, NotManagedAssembly if BadImageFormatException, AlreadyLoaded if FileLoadException - internal static AssemblyLoadingState TryReflectionOnlyLoadFrom(string filename, out Assembly assem) + internal static AssemblyLoadingState TryMetaDataContextLoad(string filename,MetadataLoadContext mlc, out Assembly assem) { - try - { - assem = Assembly.ReflectionOnlyLoadFrom(filename); - return AssemblyLoadingState.Success; - } - catch (BadImageFormatException) - { - assem = null; - return AssemblyLoadingState.NotManagedAssembly; - } - catch (FileLoadException) - { - assem = null; - return AssemblyLoadingState.AlreadyLoaded; - } + try + { + var mlcAssemblies = mlc.GetAssemblies(); + assem = mlc.LoadFromAssemblyPath(filename); + var mlcAssemblies2 = mlc.GetAssemblies(); + //if loading the assembly did not actually add a new assembly to the MLC + //then we've loaded it already, and our current behavior is to + //disable publish when a package contains the same assembly twice. + if (mlcAssemblies2.Count() == mlcAssemblies.Count()) + { + throw new FileLoadException(filename); + } + return AssemblyLoadingState.Success; + } + catch (BadImageFormatException) + { + assem = null; + return AssemblyLoadingState.NotManagedAssembly; + } + catch (FileLoadException) + { + assem = null; + return AssemblyLoadingState.AlreadyLoaded; + } } /// diff --git a/src/DynamoPackages/PackageManagerClient.cs b/src/DynamoPackages/PackageManagerClient.cs index 96b5bd99984..e11f682435b 100644 --- a/src/DynamoPackages/PackageManagerClient.cs +++ b/src/DynamoPackages/PackageManagerClient.cs @@ -237,6 +237,19 @@ internal PackageUploadHandle PublishAsync(Package package, IEnumerable f return packageUploadHandle; } + + internal PackageUploadHandle PublishRetainAsync(Package package, IEnumerable> files, IEnumerable markdownFiles, bool isNewVersion) + { + var packageUploadHandle = new PackageUploadHandle(PackageUploadBuilder.NewRequestBody(package)); + + Task.Factory.StartNew(() => + { + PublishRetainFolderStructure(package, files, markdownFiles, isNewVersion, packageUploadHandle); + }); + + return packageUploadHandle; + } + internal void Publish(Package package, IEnumerable files, IEnumerable markdownFiles, bool isNewVersion, PackageUploadHandle packageUploadHandle) { try @@ -276,6 +289,54 @@ internal void Publish(Package package, IEnumerable files, IEnumerable + /// This method allows the user to publish a package retaining their predefined folder structure + /// In this case, Dynamo will not allocate files in specific folders, but instead will replicate the folder structure under the chosen publish path + /// + /// The newly created package + /// List of folders. Each list of lists represents a root folder. There can be one or many root folders. + /// Any files located in the user specified markdown folder. + /// A boolean showing if this is a new package, or an update to an existing package. + /// The PackageUploadHandle used to communicate the status of the upload. + internal void PublishRetainFolderStructure(Package package, IEnumerable> files, IEnumerable markdownFiles, bool isNewVersion, PackageUploadHandle packageUploadHandle) + { + try + { + ResponseBody ret = null; + if (isNewVersion) + { + var pkg = uploadBuilder.NewPackageVersionRetainUpload(package, packageUploadDirectory, files, markdownFiles, + packageUploadHandle); + packageUploadHandle.UploadState = PackageUploadHandle.State.Uploading; + ret = this.client.ExecuteAndDeserialize(pkg); + } + else + { + var pkg = uploadBuilder.NewPackageRetainUpload(package, packageUploadDirectory, files, markdownFiles, + packageUploadHandle); + packageUploadHandle.UploadState = PackageUploadHandle.State.Uploading; + ret = this.client.ExecuteAndDeserialize(pkg); + } + if (ret == null) + { + packageUploadHandle.Error("Failed to submit. Try again later."); + return; + } + + if (ret != null && !ret.success) + { + packageUploadHandle.Error(ret.message); + return; + } + + packageUploadHandle.Done(null); + } + catch (Exception e) + { + packageUploadHandle.Error(e.GetType() + ": " + e.Message); + } + } + [Obsolete("No longer used. Delete in 3.0")] internal PackageManagerResult DownloadPackageHeader(string id, out PackageHeader header) { diff --git a/src/DynamoPackages/PackageManagerExtension.cs b/src/DynamoPackages/PackageManagerExtension.cs index fe50bd10cf5..4015d0fdb72 100644 --- a/src/DynamoPackages/PackageManagerExtension.cs +++ b/src/DynamoPackages/PackageManagerExtension.cs @@ -120,7 +120,7 @@ public void Dispose() /// public void Startup(StartupParams startupParams) { - string url = DynamoUtilities.PathHelper.getServiceBackendAddress(this, "packageManagerAddress"); + string url = DynamoUtilities.PathHelper.GetServiceBackendAddress(this, "packageManagerAddress"); OnMessageLogged(LogMessage.Info("Dynamo will use the package manager server at : " + url)); diff --git a/src/DynamoPackages/PackageUploadBuilder.cs b/src/DynamoPackages/PackageUploadBuilder.cs index 83a253c75de..390f1a9ae75 100644 --- a/src/DynamoPackages/PackageUploadBuilder.cs +++ b/src/DynamoPackages/PackageUploadBuilder.cs @@ -12,8 +12,14 @@ public interface IPackageUploadBuilder PackageUpload NewPackageUpload(Package package, string packagesDirectory, IEnumerable files, IEnumerable markdownFiles, PackageUploadHandle handle); + PackageUpload NewPackageRetainUpload(Package package, string packagesDirectory, IEnumerable> files, IEnumerable markdownFiles, + PackageUploadHandle handle); + PackageVersionUpload NewPackageVersionUpload(Package package, string packagesDirectory, IEnumerable files, IEnumerable markdownFiles, PackageUploadHandle handle); + + PackageVersionUpload NewPackageVersionRetainUpload(Package package, string packagesDirectory, + IEnumerable> files, IEnumerable markdownFiles, PackageUploadHandle handle); } internal class PackageUploadBuilder : IPackageUploadBuilder @@ -77,6 +83,28 @@ public PackageUpload NewPackageUpload(Package package, string packagesDirectory, BuildAndZip(package, packagesDirectory, files, markdownFiles, handle).Name); } + /// + /// Build a new package and upload retaining folder structure + /// TODO: Should that be a separate method or an override? Break API ok? + /// + /// + /// + /// + /// + /// + /// + /// + public PackageUpload NewPackageRetainUpload(Package package, string packagesDirectory, IEnumerable> files, IEnumerable markdownFiles, PackageUploadHandle handle) + { + if (package == null) throw new ArgumentNullException("package"); + if (packagesDirectory == null) throw new ArgumentNullException("packagesDirectory"); + if (files == null) throw new ArgumentNullException("files"); + if (handle == null) throw new ArgumentNullException("handle"); + + return new PackageUpload(NewRequestBody(package), + BuildAndZip(package, packagesDirectory, files, markdownFiles, handle).Name); + } + /// /// Build a new version of the package and upload /// @@ -97,6 +125,26 @@ public PackageVersionUpload NewPackageVersionUpload(Package package, string pack return new PackageVersionUpload(NewRequestBody(package), BuildAndZip(package, packagesDirectory, files, markdownFiles, handle).Name); } + /// + /// Build a new version of the package and upload retaining folder structure + /// + /// + /// + /// + /// + /// + /// + /// + public PackageVersionUpload NewPackageVersionRetainUpload(Package package, string packagesDirectory, IEnumerable> files, IEnumerable markdownFiles, PackageUploadHandle handle) + { + if (package == null) throw new ArgumentNullException("package"); + if (packagesDirectory == null) throw new ArgumentNullException("packagesDirectory"); + if (files == null) throw new ArgumentNullException("files"); + if (handle == null) throw new ArgumentNullException("handle"); + + return new PackageVersionUpload(NewRequestBody(package), BuildAndZip(package, packagesDirectory, files, markdownFiles, handle).Name); + } + #endregion #region Private Class Methods @@ -112,6 +160,17 @@ private IFileInfo BuildAndZip(Package package, string packagesDirectory, IEnumer return Zip(dir); } + private IFileInfo BuildAndZip(Package package, string packagesDirectory, IEnumerable> files, IEnumerable markdownFiles, PackageUploadHandle handle) + { + handle.UploadState = PackageUploadHandle.State.Copying; + + var dir = builder.BuildRetainDirectory(package, packagesDirectory, files, markdownFiles); + + handle.UploadState = PackageUploadHandle.State.Compressing; + + return Zip(dir); + } + private IFileInfo Zip(IDirectoryInfo directory) { IFileInfo info; diff --git a/src/DynamoPackages/PackageUploadHandle.cs b/src/DynamoPackages/PackageUploadHandle.cs index acd224b0143..bbab2024537 100644 --- a/src/DynamoPackages/PackageUploadHandle.cs +++ b/src/DynamoPackages/PackageUploadHandle.cs @@ -13,6 +13,16 @@ public enum State Ready, Copying, Compressing, Uploading, Uploaded, Error } + /// + /// Tracks the type of publish, which can be local or online + /// + public enum UploadType + { + Local, Submit + } + + + private string _errorString = ""; public string ErrorString { get { return _errorString; } set { _errorString = value; RaisePropertyChanged("ErrorString"); } } diff --git a/src/DynamoUtilities/CLIWrapper.cs b/src/DynamoUtilities/CLIWrapper.cs new file mode 100644 index 00000000000..70e71d2f8e0 --- /dev/null +++ b/src/DynamoUtilities/CLIWrapper.cs @@ -0,0 +1,186 @@ +using System; +using System.ComponentModel; +using System.Diagnostics; +using System.IO; +using System.Reflection; +using System.Threading.Tasks; + +namespace Dynamo.Utilities +{ + /// + /// Base class for Dynamo CLI wrappers + /// + internal abstract class CLIWrapper : IDisposable + { + protected const string endOfDataToken = @"<<<<>>>>"; + protected const string startofDataToken = @"<<<<>>>>"; + protected readonly Process process = new Process(); + protected bool started; + internal event Action MessageLogged; + + public virtual void Dispose() + { + process.ErrorDataReceived -= Process_ErrorDataReceived; + KillProcess(); + } + + /// + /// Start the process. + /// + /// relative path to the exe to start. + /// argument string to pass to process. + protected virtual void StartProcess(string relativeEXEPath, string argString) + { + ProcessStartInfo startInfo = new ProcessStartInfo + { + CreateNoWindow = true, + RedirectStandardOutput = true, + RedirectStandardInput = true, + RedirectStandardError = true, + + UseShellExecute = false, + Arguments = argString, + FileName = GetToolPath(relativeEXEPath) + }; + + process.StartInfo = startInfo; + try + { + process.Start(); + started = true; + //the only purpose here is to avoid deadlocks when std err gets filled up 4kb + //in long running processes. + process.ErrorDataReceived += Process_ErrorDataReceived; + process.BeginErrorReadLine(); + + } + catch (Win32Exception) + { + // Do nothing + } + } + + private void Process_ErrorDataReceived(object sender, DataReceivedEventArgs e) + { + //do nothing, we just want to empty the error stream. + } + + + + /// + /// Kill the CLI tool - if running + /// + protected void KillProcess() + { + if (started) + { + if (!process.HasExited) + { + process.Kill(); + } + started = false; + } + process.Dispose(); + } + /// + /// Compute the location of the CLI tool. + /// + /// Returns full path to the CLI tool + protected static string GetToolPath(string relativePath) + { + var rootPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) ?? throw new ArgumentNullException(nameof(Path.GetDirectoryName)); + var toolPath = Path.Combine(rootPath,relativePath); + return toolPath; + } + /// + /// Read data from CLI tool + /// + /// will return empty string if we don't finish reading all data in the timeout provided in milliseconds. + /// if this delegate is non null, it will be used instead of communicating with std out of the process. Used for testing only. + /// + protected virtual string GetData(int timeoutms, Func mockReadLine = null) + { + var readStdOutTask = Task.Run(() => + { + if (process.HasExited) + { + return string.Empty; + } + + using (var writer = new StringWriter()) + { + var done = false; + var start = false; + while (!done) + { + try + { + string line = null; + if(mockReadLine != null) + { + line = mockReadLine.Invoke(); + } + else + { + line = process.StandardOutput.ReadLine(); + } + + + MessageLogged?.Invoke(line); + if (line == null || line == startofDataToken) + { + start = true; + continue; //don't record start token to stream. + } + + if (line == null || line == endOfDataToken) + { + done = true; + } + else + { + //if we have started recieving valid data, start recording + if (!string.IsNullOrWhiteSpace(line) && start) + { + writer.WriteLine(line); + } + } + } + catch (Exception) + { + KillProcess(); + return GetCantCommunicateErrorMessage(); + } + } + + return writer.ToString(); + } + }); + var completedTask = Task.WhenAny(readStdOutTask, Task.Delay(TimeSpan.FromMilliseconds(timeoutms))).Result; + //if the completed task was our read std out task, then return the data + //else we timed out, so return an empty string. + return completedTask == readStdOutTask ? readStdOutTask.Result : string.Empty; + } + + protected void RaiseMessageLogged(string message) + { + MessageLogged?.Invoke(message); + } + + /// + /// Can't start Error message + /// + /// Returns error message + protected abstract string GetCantStartErrorMessage(); + + + /// + /// Can't communicate Error message + /// + /// Returns error message + protected abstract string GetCantCommunicateErrorMessage(); + + + + } +} diff --git a/src/DynamoUtilities/DynamoFeatureFlagsManager.cs b/src/DynamoUtilities/DynamoFeatureFlagsManager.cs index e4237cbd4b7..de0614bedff 100644 --- a/src/DynamoUtilities/DynamoFeatureFlagsManager.cs +++ b/src/DynamoUtilities/DynamoFeatureFlagsManager.cs @@ -24,6 +24,16 @@ internal class DynamoFeatureFlagsManager : CLIWrapper private Dictionary AllFlagsCache { get; set; }//TODO lock is likely overkill. private SynchronizationContext syncContext; internal static event Action FlagsRetrieved; + + //TODO(DYN-6464)- remove this field!. + /// + /// set to true after some FF issue is logged. For now we only log once to avoid clients overwhelming the logger. + /// + private bool loggedFFIssueOnce = false; + /// + /// Timeout in ms for feature flag communication with CLI process. + /// + private const int featureFlagTimeoutMs = 5000; /// /// Constructor @@ -54,18 +64,18 @@ internal void CacheAllFlags() { //wait for response - var dataFromCLI = GetData(); + var dataFromCLI = GetData(featureFlagTimeoutMs); //convert from json string to dictionary. try - { + { AllFlagsCache = JsonConvert.DeserializeObject>(dataFromCLI); //invoke the flags retrieved event on the sync context which should be the main ui thread. syncContext?.Send((_) => - { + { FlagsRetrieved?.Invoke(); - },null); - + }, null); + } catch (Exception e) { @@ -74,34 +84,45 @@ internal void CacheAllFlags() } /// - /// Check feature flag value, if not exist, return defaultval + /// Check feature flag value, if it does not exist, return the defaultval. /// - /// - /// - /// + /// Must be a bool or string, only bool or string flags should be created unless this implementation is improved. + /// feature flag name + /// Currently the flag and default val MUST be a bool or string. /// internal T CheckFeatureFlag(string featureFlagKey, T defaultval) { if(!(defaultval is bool || defaultval is string)){ - RaiseMessageLogged("unsupported flag type"); - return defaultval; + throw new ArgumentException("unsupported flag type", defaultval.GetType().ToString()); } // if we have not retrieved flags from the cli return empty - // and log. + // and log once. if(AllFlagsCache == null) - { - RaiseMessageLogged("the flags cache is null, something went wrong retrieving feature flags," + - " or you need to wait longer for the cache to populate, you can use the static FlagsRetrieved event for this purpose. "); + { //TODO(DYN-6464) Revisit this and log more when the logger is not easily overwhelmed. + if (!loggedFFIssueOnce) + { + RaiseMessageLogged( + $"The flags cache was null while checking {featureFlagKey}, something went wrong retrieving feature flags," + + " or you need to wait longer for the cache to populate before checking for flags, you can use the static FlagsRetrieved event for this purpose." + + "This message will not be logged again, and future calls to CheckFeatureFlags will return default values!!!"); + } + + loggedFFIssueOnce = true; return defaultval; } - if (AllFlagsCache.ContainsKey(featureFlagKey)) + if (AllFlagsCache.TryGetValue(featureFlagKey, out var flagVal)) { - return (T)AllFlagsCache[featureFlagKey]; + return (T)flagVal; } else { - RaiseMessageLogged($"failed to get value for feature flag key ex: {featureFlagKey},{System.Environment.NewLine} returning default value: {defaultval}"); + if (!loggedFFIssueOnce) + { + RaiseMessageLogged( + $"failed to get value for feature flag key ex: {featureFlagKey},{System.Environment.NewLine} returning default value: {defaultval}"); + } + loggedFFIssueOnce = true; return defaultval; } } diff --git a/src/DynamoUtilities/DynamoUtilities.csproj b/src/DynamoUtilities/DynamoUtilities.csproj index 4f87ab6979a..7ee79695b53 100644 --- a/src/DynamoUtilities/DynamoUtilities.csproj +++ b/src/DynamoUtilities/DynamoUtilities.csproj @@ -12,10 +12,8 @@ DynamoUtilities true - + - - diff --git a/src/DynamoUtilities/Md2Html.cs b/src/DynamoUtilities/Md2Html.cs index 763134589a8..c7115826667 100644 --- a/src/DynamoUtilities/Md2Html.cs +++ b/src/DynamoUtilities/Md2Html.cs @@ -1,168 +1,11 @@ using System; -using System.ComponentModel; -using System.Diagnostics; using System.IO; -using System.Reflection; +using System.Threading; using DynamoUtilities.Properties; +using Newtonsoft.Json.Linq; namespace Dynamo.Utilities { - //TODO move to new file. - /// - /// Base class for Dynamo CLI wrappers - /// - internal abstract class CLIWrapper : IDisposable - { - protected const string endOfDataToken = @"<<<<>>>>"; - protected const string startofDataToken = @"<<<<>>>>"; - protected readonly Process process = new Process(); - protected bool started; - internal event Action MessageLogged; - - public virtual void Dispose() - { - process.ErrorDataReceived -= Process_ErrorDataReceived; - KillProcess(); - } - - /// - /// Start the process. - /// - /// relative path to the exe to start. - /// argument string to pass to process. - protected virtual void StartProcess(string relativeEXEPath, string argString) - { - ProcessStartInfo startInfo = new ProcessStartInfo - { - CreateNoWindow = true, - RedirectStandardOutput = true, - RedirectStandardInput = true, - RedirectStandardError = true, - - UseShellExecute = false, - Arguments = argString, - FileName = GetToolPath(relativeEXEPath) - }; - - process.StartInfo = startInfo; - try - { - process.Start(); - started = true; - //the only purspose here is to avoid deadlocks when std err gets filled up 4kb - //in long running processes. - process.ErrorDataReceived += Process_ErrorDataReceived; - process.BeginErrorReadLine(); - - } - catch (Win32Exception) - { - // Do nothing - } - } - - private void Process_ErrorDataReceived(object sender, DataReceivedEventArgs e) - { - //do nothing, we just want to empty the error stream. - } - - - - /// - /// Kill the CLI tool - if running - /// - protected void KillProcess() - { - if (started) - { - if (!process.HasExited) - { - process.Kill(); - } - started = false; - } - process.Dispose(); - } - /// - /// Compute the location of the CLI tool. - /// - /// Returns full path to the CLI tool - protected static string GetToolPath(string relativePath) - { - var rootPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) ?? throw new ArgumentNullException(nameof(Path.GetDirectoryName)); - var toolPath = Path.Combine(rootPath,relativePath); - return toolPath; - } - //TODO if we see any issues with deadlocks we can try using a timeout on another thread. - /// - /// Read data from CLI tool - /// Returns data read from CLI tool - /// - protected virtual string GetData() - { - if (process.HasExited) - { - return string.Empty; - } - using (var writer = new StringWriter()) - { - var done = false; - var start = false; - while (!done) - { - try - { - var line = process.StandardOutput.ReadLine(); - MessageLogged?.Invoke(line); - if (line == null || line == startofDataToken) - { - start = true; - continue;//don't record start token to stream. - } - if (line == null || line == endOfDataToken) - { - done = true; - } - else - { //if we have started recieving valid data, start recording - if (!string.IsNullOrWhiteSpace(line) && start) - { - writer.WriteLine(line); - } - } - } - catch (Exception) - { - KillProcess(); - return GetCantCommunicateErrorMessage(); - } - } - - return writer.ToString(); - } - } - - protected void RaiseMessageLogged(string message) - { - MessageLogged?.Invoke(message); - } - - /// - /// Can't start Error message - /// - /// Returns error message - protected abstract string GetCantStartErrorMessage(); - - - /// - /// Can't communicate Error message - /// - /// Returns error message - protected abstract string GetCantCommunicateErrorMessage(); - - - - } /// /// Utilities for converting Markdown to html and for sanitizing html /// The Md2Html command line tool is used for doing the actual conversion/santizing @@ -175,6 +18,8 @@ protected void RaiseMessageLogged(string message) internal class Md2Html : CLIWrapper { private string relativePath = Path.Combine(@"Md2Html", @"Md2Html.exe"); + private int processCommunicationTimeoutms = 5000; + /// /// Constructor /// Start the CLI tool and keep it around @@ -228,9 +73,7 @@ internal string ParseMd2Html(string mdString, string mdPath) return GetCantCommunicateErrorMessage(); } - var output = GetData(); - - return output; + return GetData(processCommunicationTimeoutms); } /// @@ -257,9 +100,7 @@ internal string SanitizeHtml(string content) return GetCantCommunicateErrorMessage(); } - var output = GetData(); - - return output; + return GetData(processCommunicationTimeoutms); } /// diff --git a/src/DynamoUtilities/PIIDetector.cs b/src/DynamoUtilities/PIIDetector.cs new file mode 100644 index 00000000000..43ef96c0398 --- /dev/null +++ b/src/DynamoUtilities/PIIDetector.cs @@ -0,0 +1,133 @@ + +using Newtonsoft.Json.Linq; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text.RegularExpressions; + +namespace Dynamo.Utilities +{ + /// + /// Helper Class for removing PII Data from a JSON workspace + /// + internal static class PIIDetector + { + const string Nodes = "Nodes"; + const string InputValue = "InputValue"; + const string HintPath = "HintPath"; + const string Code = "Code"; + const string View = "View"; + const string Annotations = "Annotations"; + const string Title = "Title"; + + /// + /// Removes the PII data from a JSON workspace indicating the status of the result + /// + /// + /// + public static Tuple RemovePIIData(JObject jsonObject) + { + JObject jObjectResult = jsonObject; + bool removeResult = true; + + try + { + foreach (var properties in jObjectResult.Properties()) + { + if (properties.Name == Nodes) + { + var nodes = (JArray)properties.Value; + foreach (JObject node in nodes) + { + node.Children().ToList().ForEach(property => + { + if (property.Name == InputValue || property.Name == HintPath || property.Name == Code) + { + property.Value = RemovePIIData((string)property.Value); + } + }); + } + } + else if (properties.Name == View) + { + var view = (JObject)properties.Value; + var viewProperties = view.Children(); + + var annotations = (JArray)viewProperties.FirstOrDefault(x => x.Name == Annotations).Value; + foreach (JObject annotation in annotations) + { + annotation.Children().ToList().ForEach(property => + { + if (property.Name == Title) + { + property.Value = RemovePIIData((string)property.Value); + } + }); + } + } + } + } + catch + { + removeResult = false; + } + + return new Tuple(jObjectResult, removeResult); + } + + static string emailPattern = @"\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*"; + static string websitePattern = @"(?:http(s)?:\/\/)?[\w.-]+(?:\.[\w\.-]+)+[\w\-\._~:/?#[\]@!\$&'\(\)\*\+,;=.]+"; + static string directoryPattern = @"(^([a-z]|[A-Z]):(?=\\(?![\0-\37<>:""/\\|?*])|\/(?![\0-\37<>:""/\\|?*])|$)|^\\(?=[\\\/][^\0-\37<>:""/\\|?*]+)|^(?=(\\|\/)$)|^\.(?=(\\|\/)$)|^\.\.(?=(\\|\/)$)|^(?=(\\|\/)[^\0-\37<>:""/\\|?*]+)|^\.(?=(\\|\/)[^\0-\37<>:""/\\|?*]+)|^\.\.(?=(\\|\/)[^\0-\37<>:""/\\|?*]+))((\\|\/)[^\0-\37<>:""/\\|?*]+|(\\|\/)$)*()"; + static string creditCardPattern = @"(\d{4}[-, ]\d{4})"; + static string ssnPattern = @"\d{3}[- ]\d{2}[- ]\d{4}"; + static string ipPattern = @"((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)"; + static string datePattern = @"\d{1,2}[/-]\d{1,2}[/-]\d{2,4}"; + + public static JToken GetNodeById(JObject jsonWorkspace,string nodeId) + { + return jsonWorkspace["Nodes"].Where(t => t.Value("Id") == nodeId).Select(t => t).FirstOrDefault(); + } + + public static JToken GetNodeValue(JObject jsonWorkspace, string nodeId,string propertyName) + { + var node = jsonWorkspace["Nodes"].Where(t => t.Value("Id") == nodeId).Select(t => t).FirstOrDefault(); + var property = node.Children().FirstOrDefault(x => x.Name == propertyName); + return property.Value; + } + + public static JToken GetNoteValue(JObject jsonWorkspace, string nodeId) + { + var x = jsonWorkspace["View"]["Annotations"]; + var note = jsonWorkspace["View"]["Annotations"].Where(t => t.Value("Id") == nodeId).Select(t => t).FirstOrDefault(); + var property = note.Children().FirstOrDefault(x => x.Name == "Title"); + return property.Value; + } + + internal static bool ContainsEmail(string value) { return new Regex(emailPattern).Match(value).Success; } + internal static bool ContainsWebsite(string value) { return new Regex(websitePattern).Match(value).Success; } + internal static bool ContainsDirectory(string value) { return new Regex(directoryPattern).Match(value).Success; } + internal static bool ContainsCreditCard(string value) { return new Regex(creditCardPattern).Match(value).Success; } + internal static bool ContainsSSN(string value) { return new Regex(ssnPattern).Match(value).Success; } + internal static bool ContainsIpAddress(string value) { return new Regex(ipPattern).Match(value).Success; } + internal static bool ContainsDate(string value) { return new Regex(datePattern).Match(value).Success; } + + /// + /// Removes the PII data based on the information patterns + /// + /// + /// + internal static string RemovePIIData(string data) + { + string result; + result = Regex.Replace(data, emailPattern, ""); + result = Regex.Replace(result, websitePattern, ""); + result = Regex.Replace(result, directoryPattern, ""); + result = Regex.Replace(result, creditCardPattern, ""); + result = Regex.Replace(result, ssnPattern, ""); + result = Regex.Replace(result, ipPattern, ""); + result = Regex.Replace(result, datePattern, ""); + + return result; + } + } +} diff --git a/src/DynamoUtilities/PathHelper.cs b/src/DynamoUtilities/PathHelper.cs index 393ac19df9b..d1a296ff761 100644 --- a/src/DynamoUtilities/PathHelper.cs +++ b/src/DynamoUtilities/PathHelper.cs @@ -465,7 +465,7 @@ internal static bool IsSubDirectoryOfDirectory(string subdirectory, string direc /// Service or feature for which the address is being requested. /// It should match the key specified in the config file. /// Path that will be used to fetch resources - public static string getServiceBackendAddress(object o, string serviceKey) + public static string GetServiceBackendAddress(object o, string serviceKey) { string url = null; if (o != null) diff --git a/src/DynamoUtilities/Properties/AssemblyInfo.cs b/src/DynamoUtilities/Properties/AssemblyInfo.cs index c3981334ac4..67a7633b408 100644 --- a/src/DynamoUtilities/Properties/AssemblyInfo.cs +++ b/src/DynamoUtilities/Properties/AssemblyInfo.cs @@ -24,3 +24,5 @@ [assembly: InternalsVisibleTo("DynamoApplications")] [assembly: InternalsVisibleTo("DynamoCLI")] [assembly: InternalsVisibleTo("NodeDocumentationMarkdownGenerator")] +[assembly: InternalsVisibleTo("DynamoUtilitiesTests")] + diff --git a/src/Engine/ProtoCore/Lang/CallSite.cs b/src/Engine/ProtoCore/Lang/CallSite.cs index 692d83e28cf..ea85ed6f996 100644 --- a/src/Engine/ProtoCore/Lang/CallSite.cs +++ b/src/Engine/ProtoCore/Lang/CallSite.cs @@ -3,11 +3,11 @@ using System.Collections.ObjectModel; using System.Diagnostics; using System.IO; +using System.IO.Compression; using System.Linq; -using System.Reflection; -using System.Runtime.Serialization; -using System.Runtime.Serialization.Formatters.Soap; using System.Text; +using DynamoServices; +using Newtonsoft.Json; using ProtoCore.DSASM; using ProtoCore.Exceptions; using ProtoCore.Lang; @@ -57,6 +57,7 @@ internal SingleRunTraceData() { } /// /// Does this struct contain any trace data /// + [JsonIgnore] public bool IsEmpty { get { return Data == null && NestedData == null; } @@ -66,6 +67,7 @@ public bool IsEmpty /// Is there any data anywhere in this run data, or is it all /// empty structure /// + [JsonIgnore] public bool HasAnyNestedData { get @@ -85,89 +87,24 @@ public bool HasAnyNestedData } } + [JsonIgnore] public bool HasNestedData { get { return NestedData != null; } } + [JsonIgnore] public bool HasData { get { return Data != null; } } - internal static SingleRunTraceData DeserialseFromData(SerializationInfo info, StreamingContext context, int objectID, string marker) - { - SingleRunTraceData srtd = new SingleRunTraceData(); - - bool hasData = info.GetBoolean(marker + objectID + "_HasData"); - - if (hasData) - { - Byte[] data = Convert.FromBase64String(info.GetString(marker + objectID + "_Data")); - - IFormatter formatter = new SoapFormatter(); - MemoryStream s = new MemoryStream(data); - formatter.Binder = new TraceBinder(); - srtd.Data = (ISerializable)formatter.Deserialize(s); - } - - bool hasNestedData = info.GetBoolean(marker + objectID + "_HasNestedData"); - - if (hasNestedData) - { - - int nestedDataCount = info.GetInt32(marker + objectID + "_NestedDataCount"); - - if (nestedDataCount > 0) - srtd.NestedData = new List(); - - for (int i = 0; i < nestedDataCount; i++) - { - srtd.NestedData.Add( - DeserialseFromData(info, context, i, marker + objectID + "-") - ); - } - - } - - return srtd; - } - - internal void GetObjectData(SerializationInfo info, StreamingContext context, int objectID, string marker) - { - info.AddValue(marker + objectID + "_HasData", HasData); - - if (HasData) - { - //Serialise the object - using (MemoryStream s = new MemoryStream()) - { - IFormatter formatter = new SoapFormatter(); - formatter.Serialize(s, Data); - info.AddValue(marker + objectID + "_Data", Convert.ToBase64String(s.ToArray())); - } - } - - info.AddValue(marker + objectID + "_HasNestedData", HasNestedData); - - if (HasNestedData) - { - //Recursive Serialise - info.AddValue(marker + objectID + "_NestedDataCount", NestedData.Count); - - for (int i = 0; i < NestedData.Count; i++) - NestedData[i].GetObjectData(info, context, i, marker + objectID + "-"); - } - - - } - /// /// This gets the zero-most, left most index /// null if no data /// /// - public ISerializable GetLeftMostData() + public string GetLeftMostData() { if (HasData) return Data; @@ -187,10 +124,13 @@ public ISerializable GetLeftMostData() return nestedTraceData.GetLeftMostData(); } + [JsonProperty("nestedData", NullValueHandling = NullValueHandling.Ignore)] public List NestedData; - public ISerializable Data; - public bool Contains(ISerializable data) + [JsonProperty("data", NullValueHandling = NullValueHandling.Ignore)] + public string Data; + + public bool Contains(string data) { if (HasData) { @@ -212,9 +152,9 @@ public bool Contains(ISerializable data) return false; } - public List RecursiveGetNestedData() + public List RecursiveGetNestedData() { - List ret = new List(); + List ret = new List(); if (HasData) ret.Add(Data); @@ -229,143 +169,6 @@ public List RecursiveGetNestedData() } } - /// - /// TraceBinder is used to find assemblies to be used for - /// deserialization in cases where the exact assembly that was - /// used in the serialization is not available. - /// - internal class TraceBinder : SerializationBinder - { - // Use a custom serialization binder to make the serializer more permissive - // http://www.codeproject.com/Articles/11079/NET-XML-and-SOAP-Serialization-Samples-Tips - - public override System.Type BindToType(string assemblyName, string typeName) - { - var assemblies = AppDomain.CurrentDomain.GetAssemblies().Where(a => !a.IsDynamic); - var assemblyNameObj = new AssemblyName(assemblyName); - //find matching assemblies by name, version is not used. - var matchingAssembly = assemblies.FirstOrDefault(x => x.GetName().Name == assemblyNameObj.Name); - if (matchingAssembly != null) - { - var matchingType = matchingAssembly.GetType(typeName); - if (matchingType != null) - { - return matchingType; - } - } - //if there was no matching assembly, or type, try all assemblies and all types. - //TODO(DYN-1594 - remove this fallback when we can determine if it is required. It is very slow.) - var types = new List(); - foreach (var a in assemblies) - { - try - { - types.AddRange(a.GetTypes()); - } - catch (ReflectionTypeLoadException) - { - // We ignore assembly loading exceptions that are thrown here when their dependencies cannot be found - } - } - var result = types.FirstOrDefault(t => t.FullName == typeName); - - return result; - } - } - - /// - /// Helper class that complies with the standard serialization contract that - /// can be used for loading and saving the trace data - /// Normal usage patten is: - /// 1. Instantiate - /// 2. Push Trace data from callsite - /// 3. Call GetObjectData to serialize it onto a stream - /// 4. Recreate using the special constructor - /// - [Serializable] - private class TraceSerialiserHelper : ISerializable - { - /// - /// Empty defaul - /// - public TraceSerialiserHelper() - { - - } - - /// - /// Load the data out of the serialisation entries - /// - public TraceSerialiserHelper(SerializationInfo info, StreamingContext context) - { - TraceData = new List(); - - int noElements = info.GetInt32("NumberOfElements"); - for (int i = 0; i < noElements; i++) - { - try - { - SingleRunTraceData srtd = SingleRunTraceData.DeserialseFromData( - info, context, i, "Base-"); - TraceData.Add(srtd); - } - catch (ReflectionTypeLoadException) - { - // If deserialization fails, continue to the next - // element. Deserialization will throw an exception in - // contexts where the assembly used do do the serialization, - // or any of its referenced assemblies cannot be resolved. -#if DEBUG - Debug.WriteLine("Deserialization of trace data failed."); -#endif - } - } - - } - - /// - /// Save the data into the standard serialization pattern - /// - public void GetObjectData(SerializationInfo info, StreamingContext context) - { - info.AddValue("NumberOfElements", TraceData.Count); - for (int i = 0; i < TraceData.Count; i++) - { - TraceData[i].GetObjectData(info, context, i, "Base-"); - } - } - - /// - /// Create a TraceSerialiserHelper from CallSiteData. - /// - /// A string repsenting the CallSiteData - /// A TraceSerialiserHelper or null if deserialization fails. - internal static TraceSerialiserHelper FromCallSiteData(string callSiteData) - { - try - { - Validity.Assert(!String.IsNullOrEmpty(callSiteData)); - var data = Convert.FromBase64String(callSiteData); - var formatter = new SoapFormatter(); - formatter.Binder = new TraceBinder(); - var s = new MemoryStream(data); - var helper = (TraceSerialiserHelper)formatter.Deserialize(s); - return helper; - } - catch (Exception ex) - { -#if DEBUG - Debug.WriteLine("Constructing a TraceSerialiserHelper from CallSiteData failed."); - Debug.WriteLine(ex.Message); -#endif - return null; - } - - } - - public List TraceData { get; set; } - } - #endregion #region private members @@ -374,7 +177,7 @@ internal static TraceSerialiserHelper FromCallSiteData(string callSiteData) private string methodName; private readonly FunctionTable globalFunctionTable; internal int invokeCount; //Number of times the callsite has been executed within this run - private List beforeFirstRunSerializables = new List(); + private List beforeFirstRunSerializables = new List(); //TODO(Luke): This should be loaded from the attribute private string TRACE_KEY = DynamoServices.TraceUtils.__TEMP_REVIT_TRACE_ID; @@ -458,19 +261,36 @@ public CallSite(int classScope, string methodName, #region public methods /// - /// Load the serialised data provided into this callsite's trace cache + /// Load the serialized data provided into this callsite's trace cache /// /// The data to load public void LoadSerializedDataIntoTraceCache(string serializedTraceData) { - var helper = TraceSerialiserHelper.FromCallSiteData(serializedTraceData); - if (helper == null) + if (serializedTraceData == null || CheckIfTraceDataIsLegacySOAPFormat(serializedTraceData)) { - beforeFirstRunSerializables = new List(); + beforeFirstRunSerializables = new List(); return; } - this.traceData = helper.TraceData; + List newTraceData = null; + try + { + //Optional Compression / Decompression + var decompressedTraceData = DecompressSerializedTraceData(serializedTraceData); + newTraceData = JsonConvert.DeserializeObject>(decompressedTraceData); + } + catch(Exception e) + { + DynamoConsoleLogger.OnLogMessageToDynamoConsole($"issue while deserializing trace data for callsite {callsiteID} : {e}"); + } + + if (newTraceData == null) + { + beforeFirstRunSerializables = new List(); + return; + } + + this.traceData = newTraceData; // Cache the historical trace data for comparison // when graph update is complete. This data will be cleared @@ -621,27 +441,38 @@ public string GetTraceDataToSave() if (!this.traceData.Any(srtd => srtd.HasAnyNestedData)) return null; - TraceSerialiserHelper helper = new TraceSerialiserHelper(); - helper.TraceData = this.traceData; - - using (MemoryStream memoryStream = new MemoryStream()) - { + var serializedTraceData = JsonConvert.SerializeObject(this.traceData); + //Optional + serializedTraceData= CompressSerializedTraceData(serializedTraceData); + return serializedTraceData; + } - IFormatter formatter = new SoapFormatter(); - formatter.Serialize(memoryStream, helper); + /// + /// Compress the input string via GZIP to Base64String + /// + /// + /// + private static string CompressSerializedTraceData(string json) + { + byte[] dataToCompress = Encoding.UTF8.GetBytes(json); - return Convert.ToBase64String(memoryStream.ToArray()); + using (var memoryStream = new MemoryStream()) + using (var gzipStream = new GZipStream(memoryStream, CompressionLevel.Optimal)) + { + gzipStream.Write(dataToCompress, 0, dataToCompress.Length); + //we ned to flush the gzip stream to force write to be done BEFORE we access the memory stream. + gzipStream.Close(); + return Convert.ToBase64String(memoryStream.ToArray()); } - } /// /// Returns all serializables that were created historically, but /// were not re-created in the most recent graph update. /// - public IList GetOrphanedSerializables() + public IList GetOrphanedSerializables() { - var result = new List(); + var result = new List(); if (!beforeFirstRunSerializables.Any()) return result; @@ -732,6 +563,20 @@ private void UpdateCallsiteExecutionState(Object callsiteData, RuntimeCore runti } }*/ } + internal static bool CheckIfTraceDataIsLegacySOAPFormat(string base64EncodedTraceData) + { + var data = Convert.FromBase64String(base64EncodedTraceData); + if (data.Length > 17) + { + var header = Encoding.UTF8.GetString(data, 0, 18); + if (header == @" functionEndPoint, Conte //TraceCache -> TLS //Extract left most high-D pack - ISerializable traceD = previousTraceData.GetLeftMostData(); + string traceD = previousTraceData.GetLeftMostData(); if (traceD != null) { @@ -2041,21 +1886,50 @@ public static StackValue PerformReturnTypeCoerce(FunctionEndPoint functionEndPoi #endregion /// - /// Returns a flat collection of ISerializable objects from a serialized representation of a SingleRunTraceData object. + /// Returns a flat collection of strings from a serialized representation of a SingleRunTraceData object. /// /// The serialized representation of a SingleRunTraceData object. - /// A flat collection of ISerializable objects. - public static IList GetAllSerializablesFromSingleRunTraceData( + /// A flat collection of strings. + public static IList GetAllSerializablesFromSingleRunTraceData( RawTraceData callSiteData) { - var helper = TraceSerialiserHelper.FromCallSiteData(callSiteData.Data); - if (helper == null) + if (callSiteData.Data == null || CheckIfTraceDataIsLegacySOAPFormat(callSiteData.Data)) + { + return new List(); + } + + List traceData = null; + try + { + //Optional Compression / Decompression + var data = DecompressSerializedTraceData(callSiteData.Data); + traceData = JsonConvert.DeserializeObject>(data); + } + catch (Exception e) { - return new List(); + DynamoConsoleLogger.OnLogMessageToDynamoConsole($"issue while deserializing trace data for callsite {callSiteData.ID} : {e}"); } - var serializables = helper.TraceData.SelectMany(std => std.RecursiveGetNestedData()).ToList(); + if (traceData == null) + { + return new List(); + } + + var serializables = traceData.SelectMany(std => std.RecursiveGetNestedData()).ToList(); return serializables; } + + private static string DecompressSerializedTraceData(string serializedTraceData) + { + var dataToDecompress = Convert.FromBase64String(serializedTraceData); + + using (var memoryStream = new MemoryStream(dataToDecompress)) + using (var outputStream = new MemoryStream()) + using (var decompressStream = new GZipStream(memoryStream, CompressionMode.Decompress)) + { + decompressStream.CopyTo(outputStream); + return Encoding.UTF8.GetString(outputStream.ToArray()); + } + } } } diff --git a/src/Engine/ProtoCore/Lang/TraceUtils.cs b/src/Engine/ProtoCore/Lang/TraceUtils.cs deleted file mode 100644 index 4ec7ec09329..00000000000 --- a/src/Engine/ProtoCore/Lang/TraceUtils.cs +++ /dev/null @@ -1,97 +0,0 @@ -īģŋusing System; -using System.Collections.Generic; -using System.Runtime.Serialization; -using System.Threading; - -namespace ProtoCore.Lang -{ - [Obsolete("This class is not used anymore, use the same class from Dynamo.Services namespace", false)] - public static class TraceUtils - { - - -// ReSharper disable InconsistentNaming -//Luke: This is deliberately inconsistent, it is not supposed to be in widespread use, to work around a defiency -//in the TLS implementation. -//TODO(Luke): Replace this with an attribute lookup - internal const string __TEMP_REVIT_TRACE_ID = "{0459D869-0C72-447F-96D8-08A7FB92214B}-REVIT"; -// ReSharper restore InconsistentNaming - - - /// - /// Returns a list of the keys bound to trace elements - /// This should be extracted from the attribute on the methods - /// - /// - public static List TEMP_GetTraceKeys() - { - //TODO:Luke Extract this from RequiresTraceAttribute - - return new List() { __TEMP_REVIT_TRACE_ID }; - } - - /// - /// Returns a map of TraceID -> Objects - /// - /// - public static Dictionary GetObjectFromTLS() - { - Dictionary objs = new Dictionary(); - - foreach (String key in TEMP_GetTraceKeys()) - { - objs.Add(key, - (ISerializable)Thread.GetData(Thread.GetNamedDataSlot(key))); - } - - return objs; - } - - /// - /// Set the data associated with trace - /// - /// - public static void SetObjectToTLS(Dictionary objs) - { - foreach (String k in objs.Keys) - { - if (objs[k] == null) - Thread.FreeNamedDataSlot(k); - - Thread.SetData(Thread.GetNamedDataSlot(k), objs[k]); - - } - } - - /// - /// Clear a specific key - /// - /// - public static void ClearTLSKey(string key) - { - Dictionary objs = new Dictionary(); - objs.Add(key, null); - SetObjectToTLS(objs); - - } - - - /// - /// Clear the named slots for all the know keys - /// - public static void ClearAllKnownTLSKeys() - { - Dictionary objs = new Dictionary(); - - foreach (String key in TEMP_GetTraceKeys()) - { - objs.Add(key, null); - } - - SetObjectToTLS(objs); - - } - - } -} -īģŋ \ No newline at end of file diff --git a/src/Engine/ProtoCore/ProtoCore.csproj b/src/Engine/ProtoCore/ProtoCore.csproj index 8f36f8d3a79..e1802768da4 100644 --- a/src/Engine/ProtoCore/ProtoCore.csproj +++ b/src/Engine/ProtoCore/ProtoCore.csproj @@ -21,9 +21,8 @@ - + - diff --git a/src/Engine/ProtoCore/RuntimeData.cs b/src/Engine/ProtoCore/RuntimeData.cs index 39dc33b677e..df67c8a0555 100644 --- a/src/Engine/ProtoCore/RuntimeData.cs +++ b/src/Engine/ProtoCore/RuntimeData.cs @@ -348,7 +348,7 @@ private string GetAndRemoveTraceDataForNode(Guid nodeGuid, string callsiteID) } } - // For backword compatibility: old dyn file doesn't have CallSiteID + // For backward compatibility: old dyn file doesn't have CallSiteID // attribute, so the call site id will be empty string. if (callsiteTraceData == null && !string.IsNullOrEmpty(callsiteID)) { diff --git a/src/Libraries/Analysis/Analysis.csproj b/src/Libraries/Analysis/Analysis.csproj index c5f76ee8bdf..b2fa05a286e 100644 --- a/src/Libraries/Analysis/Analysis.csproj +++ b/src/Libraries/Analysis/Analysis.csproj @@ -18,7 +18,7 @@ - + {7858fa8c-475f-4b8e-b468-1f8200778cf8} DynamoCore @@ -62,7 +62,7 @@ - + \ No newline at end of file diff --git a/src/Libraries/CoreNodeModels/CoreNodeModels.csproj b/src/Libraries/CoreNodeModels/CoreNodeModels.csproj index f0f868d4b8f..a77619d159c 100644 --- a/src/Libraries/CoreNodeModels/CoreNodeModels.csproj +++ b/src/Libraries/CoreNodeModels/CoreNodeModels.csproj @@ -85,7 +85,7 @@ - + diff --git a/src/Libraries/CoreNodeModels/CoreNodeModelsImages.resx b/src/Libraries/CoreNodeModels/CoreNodeModelsImages.resx index efb40687d82..29c8053b1a5 100644 --- a/src/Libraries/CoreNodeModels/CoreNodeModelsImages.resx +++ b/src/Libraries/CoreNodeModels/CoreNodeModelsImages.resx @@ -1376,6 +1376,97 @@ f66KxdT5Mc9gSmp03qAW9gD5lfwobNUbvjVjAU0UNacLobgfWBUOJrhkXnc2pc08O3uXcsnTdV1Kw+dw IPQxh9M1WA0uyLqE0AAGIW/Key8ihlALTQmXWtgG1VZGV7BDhxVyKQowQnFEcOlzsDI4jR14HIzwmO9p 2zaJFT8arCiKovwdxnwAzk7Zcq1S2RAAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAYAAADimHc4AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + wgAADsIBFShKgAAABmhJREFUeF7tnFmMFEUYx9cDDyDeikrECxHFF8ErMTGoMNPVXT2uD2M0PhkJhBgf + TFRUYIEYFW/lUIknKEbREEUlwC7bxy4ryIqwEGVBBR5Qg0YTTbwIO/5r/IYMPbWzs9PTs7PT3y/5pZed + Pqr+9FZXddd0A8MwDMMwDMMwDMMwccGZOPGEHen0ce0p86qNQpxEv2aqwXopR3qWmOFZxvueFBksF7da + ook+ZqKkzbIuQuhdvhQHsuGTriX+wvJjWo2JgvWmeT5C3pYffKHmp7Q6U0lUe++YxjSc6b/rgz/C1SvS + 6WNoU6ZSeNJYpgm7N9d0TpgwhDZlwoK2/1SE+nUg5OLaYt1qIY6nXTBh6EinT3QtYyqC/bUg6CK6UrSo + bWk3TBhcy7oRoe4NhlyCztpEYhjthgmDI80pmoD71hYeD9gqBHpCn2hD7ts2p7HxFNoNUw6+LR7TBNsP + jQ0dyeRptDumP/jSeFwfar/93JHyDNotUwoY4T6hCTKE5qYNtybOot0zxcAFdL4+xHDiL6rTMc2z6TCM + DgT1ZDC4imqJLeruKh2OyceX5lPa0CosjrPVuyVxHh2WUaC387QurAjtUndb6fDxBmE8EwinKrpS7GiW + k0ZRMeIJ+unP6sKpirb4A4O8JavjOmL2LfM5bTDV1BLrYtkUoc1/XhvIQGib06hY8QCVfqEghIES3dL2 + 1ORzqWj1D0akL2qDGBgPOpZo8ZPJc6h4tYu6l6KG8pmGhqPUaLKcJ09odhZoQohM1zJasfwz+Pt8UReD + ile7eCnzBnVvBt22D1DolWqJ3sP01pS4nlbpE1+KhcHKR+xyddzsQx1LHECZf8v77AfUZ59vJa1s4WoZ + dNVmqmetKHRPXgX+1xaeum9Dq/YKLnKLC7aN1nfo0Fl8mRzvmsm78PtVGAU3Y3mnmxJX0se1C/roixDe + obyKFYgz6xC6k2/SJgXgzH9Jt11U+rb5Nh36CNTURvrxiJ9rljLO2qW06WEQ/sua9SLUWEaHHtygMmXd + kcw/+zzLfEW3ToQWnACDEieVNFCZrkDlStc238V1YYn2s+h8i4o/uFFTObKzkPWVrEmLXX8GHZ6duNCV + xlZdRWtRXGPeoKLXB21SjkLF+piNXDO+TsWuHxzLugI9CV9T2drSNl+jItcX2fn4lvGRttI1oi+NV6m4 + 9ccqKYf6KeN2VLQ2myH0rqio9YuayofKfggLbz0MpBhXUBHrn5ZUagTOts3aIAZANaKmosUHX4gzUfGN + ukCqqbqXREWKHy2NN5+OEDqCoVRN21xMRYkv6qtCriXatQFFqrGIisA0T5p0sifNqo0P0OwspEMzOZz0 + xOGuFK4usEqqHlvSIZkgnRgnoGlQz1m14YU2Dv38sKinSfRYTx9iODvUhZ8OxfTGP/v3j/1i6pRuTYAV + 0NykusB0KCZIJpMZDe/vOXiwu6tplibACohBIH+RQgOF/wDshplMT09m+9wmfYghVc3cpsZGbo5yIO5L + oAp/l8o+n+3z5mhDDKUt9rgpMZ2/cA2QsQr/QVgQfo4dj87TBxnOzzyZvEbNxqOixA9kOwbOgLtV0EXo + 6rz3nm80IYbxRzeVmExFiR8IteTw4Rw4EqGpW9m6MMvx71bLSFJx4gXCVOE/BL+FxdgGm+DhKd4IbkUg + yHJVL+pI0G7jA8K8FKrwv4PFKAg/B4J7Ly/IsnQtsW5N3F4zgDDHwodhKeHPhr3OrUeIy4OhlqorxU+u + bdwXq+9vIcxc+N/DYmyFKvw+B0tquqIu4BLsbreT42g39Q/CvAw+AksJfxYseaSKMJcGwu3LXxxbXEeb + 1z8IMxf+HliMr6AKfwRtWjJqCqEm6KBqIsDPraZ5LW1W/yBMFf5MWEr4ar1+h58DF9UFaNt3BkLPuRuf + taHdv5pWr38Q5uVQndF7YTG2QBV+6Ne9IGQb/xGzPWns8myxE//eCF3HNu5Wc1NptfoHYfYnfNU8Vexd + O046PdxJJUe3mOaY9TI53jGMC2LV3USY46DqxeyDxfgSql4R35+vJAj0DsjhDwQIdBhcCf+FvdEJ1UiY + 37NWaRDqxbAZ9kYufH4YEgUIdjhcAnVshuruJ4cfFQj3WHgbXAsVPbTMhc/v2IwahDwU3gTnw1fgXGhA + Dr9aIOyj4RDI79JkGIZhGIZhGIZhGIZhGIZhGIbJ0tDwH0GDC8n0ME7kAAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + wgAADsIBFShKgAAAAd1JREFUWEftlTtLw2AUhnvxAt2sqIOr4ij4AxxENGm+1oIUBx1cnN0ULziJWtRd + xd1JEMFBvDS1Hbx0kqKLk3/ASW2hNL6nnkhIQ40mjSB94KGSL995QmxSX4N/x4UQwbSQh1RF7uZD3pFP + JPyI78MSfIWDvOQN2Xg8gOgz1Ng3FXeDl70BwVnDBZDvcISX60taRNoQuzbEdQtQ4dPqw9Vn/MYQNVuE + Y3y6u6SFFMbwWnHdYkrIEm9zBwyl+K0h8p3HvPVnqCLSj2d74DImN/Eh3PZK/M4UsPIE0qNZwIxp3m4f + bFyFb5CG0a0OId6OTzvx7coMRerB372VgT8BmyYNw3TzMGc6ZuUWj/k9GHJgGmrXTR7hDAyaMQ22Y5K3 + O+c8FqMfF3q/W4Ws3OCt7pFRlABesTsWMbPrvMV9ckL4s4nxWnfiBRcZ5tPdR9O0Dq1cPnva27WK6z6m + o5EQb3EPxDvhBSSK9yvLGYs4K03xNndAsAteVtKIwyVIX8xkdVwu4U03zFudgxDFU5Cg+CIM8jI9omum + CzjKRkebedkZCFFchQTFF+BXXAdfvAmED/E5r0alVj7sDIT88BQSFJ+HVfG6gVgLfIAFOAcDvOQdiNK/ + oO9P4g0aeIfP9wFYbEj5mAMhlQAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAYAAADimHc4AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + wgAADsIBFShKgAAABiBJREFUeF7tnF1oHUUUx9Na6zdo/SraItZPREFJUaNtMrtJc2kVpErwQQX1wSdR + VLC0fnAL9qFok+zMvYaoDyIKNdU+iA1iC6WKQmuV1qTZnb2poQa1KklQUz+q7fXM5tzbTeghH72ZTMr5 + wWE39+zO/s/8d2c2D7NVDMMwDMMwDMMwDMMwDMMwDMMwDMMws4CBgYGXBgcHi2OiDdOzlllTFyXUk3ob + xAYv0GsbZOFOPHzWcDoYUPRlfAS2wxA/ekH0NWzX+UqvbMz3LsbTneU0MCA6BJ1eNEbAPm5TEehdvoof + y2aLc6tMFItzsEknmDUGGFFjRBaNeF9FTakO/wVMiGH7M8Tfqd+TGHlS4neFCh/wZeEaIQuLREvfhTNp + ClUXpt2BEpo2QAS6Q+S7zxdBdB/c+VJI3Ql3/5eiVX+fNiI5FsyC2ANPT96T4f1eEFbXqujqZa8fuggv + aQWqLky7AyV0rAF4eEJNc/859bnweqH0g2DEq3DMxxBfQBwunVMKIeNvYN7YCqYoeIoe96W+XbymL6nK + Zudic9MCVRem3YES6in9TLkjA92Mh58UM+yYO90P9Go4fj3EdghdJ/WxchtJxEOw3S1ktAUMeRPafUK0 + 9d6MzVQUqi5MuwMldDIGpGl85/B5yTzQEt/qyZ46eJJegTb2lttKhRmufBl9C0/Yp3C9djDwkeWycCk2 + dUpQdWHaHSihUzVgLDhcXbxCRVfUS70c2stBe7+W2zah9HHYHoXff4etGcY2Q6z3VJjBZiYNVRem3YES + WikDKHwZNvq5ZMj6EGK4LtD/wPZfCGPGCXOkHkrmDxjiJvNWRdWFaXeghE63AWkyzd0LhAwf9YJ4I3R2 + J8wVMcwfAykT4CmJ3hP5voV4yrhQdWHaHSihNg0YS4MKbwEjnoRrvw+xD3XsEEHPhCdsqi5MuwMldCYN + KHFTtns+TNJrRnTEIZjSgKlxoerCtDtQQtkAS1BC2QBLUELZAEtQQl0xAK691mgQKu6B/XpMjQtVF6bd + gRLqggEiu/NsuP4mo8GXek9dS1iDqXGh6sK0O1BC2QBLUELZAEtQQtkAS1BC2QBLUELZAEtQQtkAS1BC + 2QBLUELZAEtQQk2nlw0AM/Bwq7ABbMD0QwllAyxBCWUDLEEJZQMsQQllAyxBCWUDLEEJZQMsQQllAyxB + CWUDLEEJZQMsQQllAyxBCWUDLEEJZQMsQQllAyxBCXXBgGXNeonpeDbAogE1Zq2Aih6G6+6vk+GR0joz + sxiwqaPjDDxsXKi6MO0OlFBbBtzb/sO5Zl2xpwoZX+kOuN5fqeua1TLDQumtfpu+Ek+ZEFRdmHYHSuh0 + GmA63WuNbhAtofBVZJa59pWvlUQ0CNfsgf3tIoiebsx3TfrTCFRdmHYHSqhZG1zqELNmGA+fMjChzqsN + Dl5n1oX5MnoRDP78RIcn8SfEPk9FH4hW/ZzXeuAOPHVKUHVh2h0ooZUyIPNW/wIvp1dBOxtEsv4rWQX5 + X6ltuNt/Muu/wJBn/Vxca5apNjVNfKynoOrCtDtQQk/FgLs3RhckC7dV1AYduwOigKsgk/ZgYv3NC+JP + zMc+hCoIIfcvqm7feyaeXhGoujDtDpTQqRhQu6lrsSfjp+BO/wzO6093ugn4/TvYvtwgC7eJfPdCkS3O + w1MrDlUXpt2BEjoZAxpUmBFBvBNfGUet80UT3vDz4V0j34ew8wUVqi5MuwMl9KQGFItzzMp3s+pdqINL + YfwOkjG81NkyPgbDjVnt3g+x20y4jW29lyXnWoaqC9PuQAlNGyBk9JCf67kKJskV8Pc66PSvII6W8uYf + Jtj2Chl/BBPq8/DefqN568FLzAhUXZh2B0roqCcgF20xr4ewbz7YlPyWRADv70pvhsn0BdhfZZ4ObHbG + oerCtDtQQuFu7hrV2eWIh+CJ6IRYA/v3mMkUm3IKqi5MuwMlFIaYP1Idf9yX+gAE/IMUZuqb9ZKmbPd8 + bMJJqLow7Q6U0KTjzWdlAv22UNFSv7Xr8pWycNZ0f+mqUlB1YdodKKEi33ttdXuxov8c2YSqC9MMwzAM + wzAMwzAMwzAMwzAMwzAMwzDuUlX1P0yI3rYMerjIAAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + wgAADsIBFShKgAAAAXpJREFUWEftlTFLw0AYhiO66CKORV10qKCbm0ObxCJWXATFQZ39Aa4iKIibkMRS + EBER/AWCjuKkYLeC3qVaFwen+hd8Gr6AlVpTjB00Dzyk35e768sl5IyEhISvqNVqRTyyXD2ecyvd0m6b + cB0po8MkhRUCvOEzXtiuv2J6OpU5qPbIsG8J15EyOkyq4j1/XDIdnbFcf4rf23iFZTzGJdPVQzKlKeE6 + UkbnQ4Cy5egJaRszp69dlqP66U/jDpZQYRHz2YJqeFyxB2gG91PsxAJj73Be2gEdCRDC2C0e1ZqUAZ0O + sIvLUgZ0OIDa4/1YlDLgTwSov+FpabfktwI8Wp4elXZLkgD/OwBfwjRjzwkxJ62AOAI8EWBE2g3Ynh7m + /jpe4y1u2EUd+1nwYntqUNoGJ+MArtK/xBvctDw1lt1vPIRC4grA9qo8nrHVmt4h10kZ2pI4AtSwfj3B + nOn4fTIkEj8JUEDOeH/Wch96pd024TpSJiQkfMIw3gFrUwF9tuj5yAAAAABJRU5ErkJggg== \ No newline at end of file diff --git a/src/Libraries/CoreNodeModels/Logic/Gate.cs b/src/Libraries/CoreNodeModels/Logic/Gate.cs new file mode 100644 index 00000000000..c5069bb5d2b --- /dev/null +++ b/src/Libraries/CoreNodeModels/Logic/Gate.cs @@ -0,0 +1,72 @@ +using CoreNodeModels.Properties; +using Dynamo.Graph.Nodes; +using Newtonsoft.Json; +using ProtoCore.AST.AssociativeAST; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace CoreNodeModels.Logic +{ + [NodeName("Gate")] + [NodeDescription(nameof(Resources.GateDescription), typeof(Resources))] + [NodeCategory(BuiltinNodeCategories.LOGIC)] + [NodeSearchTags(nameof(Resources.GateSearchTags), typeof(Resources))] + [InPortNames(">")] + [InPortTypes("object")] + [InPortDescriptions(typeof(Resources), nameof(Resources.GateInPortToolTip))] + [OutPortNames(">")] + [OutPortTypes("object")] + [OutPortDescriptions(typeof(Resources), nameof(Resources.GateOutPortToolTip))] + [IsDesignScriptCompatible] + public class Gate : NodeModel + { + private bool value; + + [JsonProperty("InputValue")] + public virtual bool Value + { + get + { + return value; + } + set + { + if (!this.value.Equals(value)) + { + this.value = value; + ClearDirtyFlag(); + OnNodeModified(); + RaisePropertyChanged(nameof(Value)); + } + } + } + + [JsonConstructor] + private Gate(IEnumerable inPorts, IEnumerable outPorts) : base(inPorts, outPorts) + { + ShouldDisplayPreviewCore = false; + } + + public Gate() + { + Value = false; + RegisterAllPorts(); + ShouldDisplayPreviewCore = false; + } + + public override IEnumerable BuildOutputAst(List inputAstNodes) + { + // Check that node can run + if (!Value) + { + return new[] + {AstFactory.BuildAssignment(GetAstIdentifierForOutputIndex(0), AstFactory.BuildNullNode())}; + } + + return new[] { AstFactory.BuildAssignment(GetAstIdentifierForOutputIndex(0), inputAstNodes[0]) }; + } + } +} diff --git a/src/Libraries/CoreNodeModels/Properties/Resources.Designer.cs b/src/Libraries/CoreNodeModels/Properties/Resources.Designer.cs index ea596bb04a3..f5930e7988d 100644 --- a/src/Libraries/CoreNodeModels/Properties/Resources.Designer.cs +++ b/src/Libraries/CoreNodeModels/Properties/Resources.Designer.cs @@ -664,6 +664,44 @@ public static string FunctionComposeDescription { } } + /// + /// Looks up a localized string similar to Block data passing through this node to downstream nodes. Node returns the input data only if the node value is set to Open. + /// + ///In Generative Design workflows, this node should be used to control and block the behavior of nodes that will place elements in Revit. + /// + public static string GateDescription { + get { + return ResourceManager.GetString("GateDescription", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Data to pass to a downstream node with gated controls.. + /// + public static string GateInPortToolTip { + get { + return ResourceManager.GetString("GateInPortToolTip", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Data. + /// + public static string GateOutPortToolTip { + get { + return ResourceManager.GetString("GateOutPortToolTip", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to gate;stop;data. + /// + public static string GateSearchTags { + get { + return ResourceManager.GetString("GateSearchTags", resourceCulture); + } + } + /// /// Looks up a localized string similar to Conditional statement. /// @@ -1078,6 +1116,33 @@ public static string ReducePortDataSeedToolTip { } } + /// + /// Looks up a localized string similar to Store data passing through this node to the Dynamo file. Return the stored data if the input is null.. + /// + public static string RememberDescription { + get { + return ResourceManager.GetString("RememberDescription", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Data to sample and store in the file.. + /// + public static string RememberInputToolTip { + get { + return ResourceManager.GetString("RememberInputToolTip", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Data. + /// + public static string RememberOuputToolTip { + get { + return ResourceManager.GetString("RememberOuputToolTip", resourceCulture); + } + } + /// /// Looks up a localized string similar to Replaces an item with the given substitute if the original item satisfies the given condition. /// diff --git a/src/Libraries/CoreNodeModels/Properties/Resources.en-US.resx b/src/Libraries/CoreNodeModels/Properties/Resources.en-US.resx index a00f3e418b6..cb0b5becc20 100644 --- a/src/Libraries/CoreNodeModels/Properties/Resources.en-US.resx +++ b/src/Libraries/CoreNodeModels/Properties/Resources.en-US.resx @@ -641,4 +641,27 @@ Default value: {0} Nodes that query data + + Store data passing through this node to the Dynamo file. Return the stored data if the input is null. + + + Data to sample and store in the file. + + + Data + + + Block data passing through this node to downstream nodes. Node returns the input data only if the node value is set to Open. + +In Generative Design workflows, this node should be used to control and block the behavior of nodes that will place elements in Revit + + + Data to pass to a downstream node with gated controls. + + + Data + + + gate;stop;data + \ No newline at end of file diff --git a/src/Libraries/CoreNodeModels/Properties/Resources.resx b/src/Libraries/CoreNodeModels/Properties/Resources.resx index eae12ee8b4d..bbfc921277f 100644 --- a/src/Libraries/CoreNodeModels/Properties/Resources.resx +++ b/src/Libraries/CoreNodeModels/Properties/Resources.resx @@ -641,4 +641,27 @@ Default value: {0} Nodes that query data + + Store data passing through this node to the Dynamo file. Return the stored data if the input is null. + + + Data to sample and store in the file. + + + Data + + + Block data passing through this node to downstream nodes. Node returns the input data only if the node value is set to Open. + +In Generative Design workflows, this node should be used to control and block the behavior of nodes that will place elements in Revit + + + Data to pass to a downstream node with gated controls. + + + Data + + + gate;stop;data + \ No newline at end of file diff --git a/src/Libraries/CoreNodeModels/Remember.cs b/src/Libraries/CoreNodeModels/Remember.cs new file mode 100644 index 00000000000..ba4c846940d --- /dev/null +++ b/src/Libraries/CoreNodeModels/Remember.cs @@ -0,0 +1,124 @@ +using Dynamo.Graph; +using Dynamo.Graph.Nodes; +using Newtonsoft.Json; +using ProtoCore.AST.AssociativeAST; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using VMDataBridge; + +namespace CoreNodeModels +{ + [NodeName("Remember")] + [NodeDescription(nameof(Properties.Resources.RememberDescription), typeof(Properties.Resources))] + [NodeCategory("Core.Data")] + [InPortNames(">")] + [InPortTypes("var[]..[]")] + [InPortDescriptions(typeof(Properties.Resources), nameof(Properties.Resources.RememberInputToolTip))] + [OutPortNames(">")] + [OutPortTypes("var[]..[]")] + [OutPortDescriptions(typeof(Properties.Resources), nameof(Properties.Resources.RememberOuputToolTip))] + [IsDesignScriptCompatible] + public class Remember : NodeModel + { + private string cache = ""; + + public string Cache + { + get { return cache; } + set + { + var valueToSet = value == null ? "" : value; + if (valueToSet != cache) + { + cache = valueToSet; + MarkNodeAsModified(); + } + } + } + + [JsonConstructor] + private Remember(IEnumerable inPorts, IEnumerable outPorts) : base(inPorts, outPorts) + { + PropertyChanged += OnPropertyChanged; + } + + public Remember() + { + RegisterAllPorts(); + PropertyChanged += OnPropertyChanged; + } + + private void OnPropertyChanged(object sender, PropertyChangedEventArgs e) + { + switch (e.PropertyName) + { + case nameof(State): + if (State == ElementState.Warning) + { + Cache = ""; + } + break; + + default: + // Nothing to handle + break; + } + } + + protected override void OnBuilt() + { + base.OnBuilt(); + DataBridge.Instance.RegisterCallback(GUID.ToString(), DataBridgeCallback); + } + + public override void Dispose() + { + PropertyChanged -= OnPropertyChanged; + base.Dispose(); + DataBridge.Instance.UnregisterCallback(GUID.ToString()); + } + + private static readonly string BuiltinDictionaryTypeName = typeof(DesignScript.Builtin.Dictionary).FullName; + private static readonly string BuiltinDictionaryGet = nameof(DesignScript.Builtin.Dictionary.ValueAtKey); + + public override IEnumerable BuildOutputAst(List inputAstNodes) + { + var resultAst = new List(); + + var funtionInputs = new List { inputAstNodes[0], AstFactory.BuildStringNode(Cache) }; + + //First build the function call + var functionCall = AstFactory.BuildFunctionCall( + new Func>(DSCore.Data.Remember), funtionInputs); + + var functionCallIndent = AstFactory.BuildIdentifier(GUID + "_func"); + + resultAst.Add(AstFactory.BuildAssignment(functionCallIndent, functionCall)); + + //Next add the first key value pair to the output port + var getFirstKey = AstFactory.BuildFunctionCall(BuiltinDictionaryTypeName, BuiltinDictionaryGet, + new List { functionCallIndent, AstFactory.BuildStringNode(">") }); + + resultAst.Add(AstFactory.BuildAssignment(GetAstIdentifierForOutputIndex(0), getFirstKey)); + + //Second get the key value pair to pass to the databridge callback + var getSecondKey = AstFactory.BuildFunctionCall(BuiltinDictionaryTypeName, BuiltinDictionaryGet, + new List { functionCallIndent, AstFactory.BuildStringNode("Cache") }); + + resultAst.Add(AstFactory.BuildAssignment( + AstFactory.BuildIdentifier(GUID + "_db"), + DataBridge.GenerateBridgeDataAst(GUID.ToString(), getSecondKey))); + + return resultAst; + } + + private void DataBridgeCallback(object callbackObject) + { + if (DSCore.Data.CanObjectBeCached(callbackObject)) + { + Cache = callbackObject as String; + } + } + } +} diff --git a/src/Libraries/CoreNodeModelsWpf/CoreNodeModelsWpf.csproj b/src/Libraries/CoreNodeModelsWpf/CoreNodeModelsWpf.csproj index de955956b7f..73a95cb3c8b 100644 --- a/src/Libraries/CoreNodeModelsWpf/CoreNodeModelsWpf.csproj +++ b/src/Libraries/CoreNodeModelsWpf/CoreNodeModelsWpf.csproj @@ -135,7 +135,7 @@ - + diff --git a/src/Libraries/CoreNodeModelsWpf/NodeViewCustomizations/Gate.cs b/src/Libraries/CoreNodeModelsWpf/NodeViewCustomizations/Gate.cs new file mode 100644 index 00000000000..09c22ad23ed --- /dev/null +++ b/src/Libraries/CoreNodeModelsWpf/NodeViewCustomizations/Gate.cs @@ -0,0 +1,70 @@ +using CoreNodeModels; +using CoreNodeModels.Logic; +using CoreNodeModels.Properties; +using Dynamo.Controls; +using Dynamo.UI; +using Dynamo.Wpf; +using Dynamo.Wpf.Properties; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Controls.Primitives; +using System.Windows.Data; + +namespace CoreNodeModelsWpf.Nodes +{ + public class GateNodeViewCustomization : INodeViewCustomization + { + public void CustomizeView(Gate model, NodeView nodeView) + { + //add a text box to the input grid of the control + var rbTrue = new RadioButton(); + var rbFalse = new RadioButton(); + rbTrue.Style = rbFalse.Style = (Style)SharedDictionaryManager.DynamoModernDictionary["RadioButton"]; + + //use a unique name for the button group + //so other instances of this element don't get confused + string groupName = Guid.NewGuid().ToString(); + rbTrue.GroupName = groupName; + rbFalse.GroupName = groupName; + + rbTrue.Content = CoreNodeModelWpfResources.GateOpen; + rbTrue.Padding = new Thickness(0, 0, 12, 0); + rbFalse.Content = CoreNodeModelWpfResources.GateClose; + rbFalse.Padding = new Thickness(0); + var wp = new WrapPanel + { + HorizontalAlignment = HorizontalAlignment.Stretch, + VerticalAlignment = VerticalAlignment.Stretch, + Margin = new Thickness(10, 5, 10, 0), + Orientation = Orientation.Horizontal + }; + + wp.Children.Add(rbTrue); + wp.Children.Add(rbFalse); + nodeView.inputGrid.Children.Add(wp); + + rbFalse.DataContext = model; + rbTrue.DataContext = model; + + var rbTrueBinding = new Binding("Value") { Mode = BindingMode.TwoWay, }; + rbTrue.SetBinding(ToggleButton.IsCheckedProperty, rbTrueBinding); + + var rbFalseBinding = new Binding("Value") + { + Mode = BindingMode.TwoWay, + Converter = new InverseBoolDisplay() + }; + rbFalse.SetBinding(ToggleButton.IsCheckedProperty, rbFalseBinding); + } + + public void Dispose() + { + // Nothing to dispose + } + } +} diff --git a/src/Libraries/CoreNodeModelsWpf/Properties/CoreNodeModelWpfResources.Designer.cs b/src/Libraries/CoreNodeModelsWpf/Properties/CoreNodeModelWpfResources.Designer.cs index fcabe7ea18d..f02f659b981 100644 --- a/src/Libraries/CoreNodeModelsWpf/Properties/CoreNodeModelWpfResources.Designer.cs +++ b/src/Libraries/CoreNodeModelsWpf/Properties/CoreNodeModelWpfResources.Designer.cs @@ -530,6 +530,24 @@ public static string DateTimeInputToolTip { } } + /// + /// Looks up a localized string similar to Close. + /// + public static string GateClose { + get { + return ResourceManager.GetString("GateClose", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Open. + /// + public static string GateOpen { + get { + return ResourceManager.GetString("GateOpen", resourceCulture); + } + } + /// /// Looks up a localized string similar to Display. /// diff --git a/src/Libraries/CoreNodeModelsWpf/Properties/CoreNodeModelWpfResources.en-US.resx b/src/Libraries/CoreNodeModelsWpf/Properties/CoreNodeModelWpfResources.en-US.resx index 40c96277d06..677cd69669a 100644 --- a/src/Libraries/CoreNodeModelsWpf/Properties/CoreNodeModelWpfResources.en-US.resx +++ b/src/Libraries/CoreNodeModelsWpf/Properties/CoreNodeModelWpfResources.en-US.resx @@ -315,4 +315,10 @@ Dictionary<string, List<List<double>>> Drag to modify the size of the chart + + Close + + + Open + diff --git a/src/Libraries/CoreNodeModelsWpf/Properties/CoreNodeModelWpfResources.resx b/src/Libraries/CoreNodeModelsWpf/Properties/CoreNodeModelWpfResources.resx index f436f098a9b..1bed61050db 100644 --- a/src/Libraries/CoreNodeModelsWpf/Properties/CoreNodeModelWpfResources.resx +++ b/src/Libraries/CoreNodeModelsWpf/Properties/CoreNodeModelWpfResources.resx @@ -315,4 +315,10 @@ Dictionary<string, List<List<double>>> Drag to modify the size of the chart + + Close + + + Open + \ No newline at end of file diff --git a/src/Libraries/CoreNodes/CoreNodes.csproj b/src/Libraries/CoreNodes/CoreNodes.csproj index 18b0a04f7ed..c23822eea93 100644 --- a/src/Libraries/CoreNodes/CoreNodes.csproj +++ b/src/Libraries/CoreNodes/CoreNodes.csproj @@ -19,7 +19,7 @@ - + @@ -40,6 +40,11 @@ {c0d6dee5-5532-4345-9c66-4c00d7fdb8be} DesignScriptBuiltin + + {6e0a079e-85f1-45a1-ad5b-9855e4344809} + Units + False + @@ -80,7 +85,7 @@ - + diff --git a/src/Libraries/CoreNodes/Data.cs b/src/Libraries/CoreNodes/Data.cs index 7cf59f1d604..011d581df5e 100644 --- a/src/Libraries/CoreNodes/Data.cs +++ b/src/Libraries/CoreNodes/Data.cs @@ -1,16 +1,27 @@ -īģŋusing System; +using Autodesk.DesignScript.Geometry; +using System; using System.Collections.Generic; using System.Linq; using Autodesk.DesignScript.Runtime; using Newtonsoft.Json; using Newtonsoft.Json.Linq; +using System.Drawing; +using System.IO; +using System.Drawing.Imaging; +using System.Collections; +using System.Runtime.Versioning; +using Dynamo.Events; +using Dynamo.Logging; +using Dynamo.Session; +using System.Globalization; +using System.Text; namespace DSCore { public static class Data { /// - /// Parse converts an arbitrary JSON string to a value. It is the opposite of JSON.Stringify. + /// Parse converts an arbitrary JSON string to a value. It is the opposite of JSON.Stringify. /// /// A JSON string /// The result type depends on the content of the input string. The result type can be a primitive value (e.g. string, boolean, double), a List, or a Dictionary. @@ -19,18 +30,31 @@ public static object ParseJSON(string json) return ToNative(JToken.Parse(json)); } + /// + /// Parse implementation for converting JToken types to native .NET objects. + /// + /// JToken to parse to N + /// private static object ToNative(JToken token) { switch (token.Type) { case JTokenType.Object: var obj = token as JObject; + + var dynObj = DynamoJObjectToNative(obj); + if(dynObj != null) + { + return dynObj; + } + var dict = new Dictionary(); foreach (var kv in obj) { dict[kv.Key] = ToNative(kv.Value); } return dict; + case JTokenType.Array: var arr = token as JArray; return arr.Select(ToNative); @@ -51,6 +75,114 @@ private static object ToNative(JToken token) } } + /// + /// Parse implementation for converting JObject types to specific Dynamo objects (ie Geometry, Color, Images, etc) + /// + /// + /// + /// + private static object DynamoJObjectToNative(JObject jObject) + { + if (jObject.ContainsKey("$typeid")) + { + var typeid = jObject["$typeid"].ToString(); + + switch (typeid) + { + //autodesk.math to abstract ProtoGeometry types + case "autodesk.math:vector3d-1.0.0": + return Vector.FromJson(jObject.ToString()); + + case "autodesk.math:matrix44d-1.0.0": + return CoordinateSystem.FromJson(jObject.ToString()); + + //autodesk.geometry to abstract ProtoGeometry types + case "autodesk.geometry:boundingbox3d-1.0.0": + return BoundingBox.FromJson(jObject.ToString()); + + case "dynamo.geometry:mesh-1.0.0": + return Mesh.FromJson(jObject.ToString()); + + //types supported by Geometry.FromJson + case "autodesk.math:point3d-1.0.0": + case "dynamo.geometry:sab-1.0.0": + case "dynamo.geometry:tsm-1.0.0": + case "dynamo.geometry:rectangle-1.0.0": + case "dynamo.geometry:cuboid-1.0.0": + case "dynamo.geometry:solid-1.0.0": + case string geoId when geoId.Contains("autodesk.geometry"): + return Geometry.FromJson(jObject.ToString()); + + //Dynamo types + case "dynamo.graphics:color-1.0.0": + try + { + return Color.ByARGB( + (int)jObject["A"], + (int)jObject["R"], + (int)jObject["G"], + (int)jObject["B"]); + } + catch { + throw new FormatException(string.Format(Properties.Resources.Exception_Deserialize_Bad_Format, typeof(Color).FullName)); + } + +#if _WINDOWS + case "dynamo.graphics:png-1.0.0": + + jObject.TryGetValue(ImageFormat.Png.ToString(), out var value); + + if (value != null) + { + try + { + var stream = Convert.FromBase64String(value.ToString()); + + Bitmap bitmap; + using (var ms = new MemoryStream(stream)) + bitmap = new Bitmap(Bitmap.FromStream(ms)); + + return bitmap; + } + catch { + //Pass through to the next throw + } + } + + throw new FormatException(string.Format(Properties.Resources.Exception_Deserialize_Bad_Format, "dynamo.graphics:png-1.0.0")); +#else + return null; +#endif + case "dynamo.data:location-1.0.0": + try + { + return DynamoUnits.Location.ByLatitudeAndLongitude( + (double)jObject["Latitude"], + (double)jObject["Longitude"], + (string)jObject["Name"]); + } + catch + { + throw new FormatException(string.Format(Properties.Resources.Exception_Deserialize_Bad_Format, typeof(DynamoUnits.Location).FullName)); + } + + default: + return null; + } + } + + if (jObject.ContainsKey("typeid")) + { + var typeid = jObject["typeid"].ToString(); + if (typeid == "autodesk.soliddef:model-1.0.0") + { + return Geometry.FromSolidDef(jObject.ToString()); + } + } + + return null; + } + /// /// Stringify converts an arbitrary value or a list of arbitrary values to JSON. Replication can be used to apply the operation over a list, producing a list of JSON strings. /// @@ -58,9 +190,79 @@ private static object ToNative(JToken token) /// A JSON string where primitive types (e.g. double, int, boolean), Lists, and Dictionary's will be turned into the associated JSON type. public static string StringifyJSON([ArbitraryDimensionArrayImport] object values) { - return JsonConvert.SerializeObject(values, new DictConverter()); + var settings = new JsonSerializerSettings() + { + Converters = new JsonConverter[] + { + new DictConverter(), + new DesignScriptGeometryConverter(), + new ColorConveter(), + new LocationConverter(), +#if _WINDOWS + new PNGImageConverter(), +#endif + } + }; + + StringBuilder sb = new StringBuilder(256); + using (var writer = new StringWriter(sb, CultureInfo.InvariantCulture)) + { + using (var jsonWriter = new MaxDepthJsonTextWriter(writer)) + { + JsonSerializer.Create(settings).Serialize(jsonWriter, values); + } + return writer.ToString(); + } + } + + /// + /// Subclass of JsonTextWriter that limits a maximum supported object depth to prevent circular reference crashes when serializing arbitrary .NET objects types. + /// + private class MaxDepthJsonTextWriter : JsonTextWriter + { + private readonly int maxDepth = 15; + private int depth = 0; + + public MaxDepthJsonTextWriter(TextWriter writer) : base(writer) { } + + public override void WriteStartArray() + { + base.WriteStartArray(); + depth++; + CheckDepth(); + } + + public override void WriteEndArray() + { + base.WriteEndArray(); + depth--; + CheckDepth(); + } + + public override void WriteStartObject() + { + base.WriteStartObject(); + depth++; + CheckDepth(); + } + + public override void WriteEndObject() + { + base.WriteEndObject(); + depth--; + CheckDepth(); + } + + private void CheckDepth() + { + if (depth > maxDepth) + { + throw new JsonSerializationException(string.Format(Properties.Resources.Exception_Serialize_Depth_Unsupported, depth, maxDepth, Path)); + } + } } + #region Converters /// /// Ensures DesignScript.Builtin.Dictionary's, which deliberately don't implement IDictionary, are transformed into JSON objects. /// @@ -103,5 +305,230 @@ public override bool CanConvert(Type objectType) } } + private class DesignScriptGeometryConverter : JsonConverter + { + public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) + { + string serializedValue; + + switch(value) + { + case Geometry item: + var geoString = item.ToJson(); + + if (!string.IsNullOrEmpty(geoString)) + { + writer.WriteRawValue(geoString); + return; + } + break; + case BoundingBox item: + writer.WriteRawValue(item.ToJson()); + return; + case CoordinateSystem item: + writer.WriteRawValue(item.ToJson()); + return; + case Mesh item: + writer.WriteRawValue(item.ToJson()); + return; + case Vector item: + writer.WriteRawValue(item.ToJson()); + return; + } + + throw new NotSupportedException(Properties.Resources.Exception_Serialize_DesignScript_Unsupported); + } + + public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) + { + throw new NotImplementedException("Unnecessary because CanRead is false. The type will skip the converter."); + } + + public override bool CanRead + { + get { return false; } + } + + public override bool CanConvert(Type objectType) + { + return typeof(DesignScriptEntity).IsAssignableFrom(objectType); + } + } + + private class ColorConveter : JsonConverter + { + public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) + { + var jobject = JObject.FromObject(value); + jobject.Add("$typeid", "dynamo.graphics:color-1.0.0"); + + jobject.WriteTo(writer); + } + + public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) + { + throw new NotImplementedException("Unnecessary because CanRead is false. The type will skip the converter."); + } + + public override bool CanRead + { + get { return false; } + } + + public override bool CanConvert(Type objectType) + { + return typeof(DSCore.Color) == objectType; + } + } + + private class LocationConverter : JsonConverter + { + public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) + { + var jobject = JObject.FromObject(value); + jobject.Add("$typeid", "dynamo.data:location-1.0.0"); + + jobject.WriteTo(writer); + } + + public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) + { + throw new NotImplementedException("Unnecessary because CanRead is false. The type will skip the converter."); + } + + public override bool CanRead + { + get { return false; } + } + + public override bool CanConvert(Type objectType) + { + return typeof(DynamoUnits.Location) == objectType; + } + } + +#if NET6_0_OR_GREATER + [SupportedOSPlatform("windows")] +#endif + private class PNGImageConverter : JsonConverter + { + public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) + { + var image = value as Bitmap; + + string serializedValue; + var stream = new MemoryStream(); + image?.Save(stream, ImageFormat.Png); + serializedValue = Convert.ToBase64String(stream.ToArray()); + + writer.WriteStartObject(); + writer.WritePropertyName("$typeid"); + writer.WriteValue("dynamo.graphics:png-1.0.0"); + writer.WritePropertyName(ImageFormat.Png.ToString()); + writer.WriteValue(serializedValue); + writer.WriteEndObject(); + } + + public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) + { + throw new NotImplementedException("Unnecessary because CanRead is false. The type will skip the converter."); + } + + public override bool CanRead + { + get { return false; } + } + + public override bool CanConvert(Type objectType) + { + return typeof(Bitmap).IsAssignableFrom(objectType); + } + } + + #endregion + + #region Remember node functions + + /// + /// Helper function to determine if object can be cached or if it is null, "null" string, or empty list. + /// + /// Object to check + /// + [IsVisibleInDynamoLibrary(false)] + public static bool CanObjectBeCached(object inputObject) + { + if (inputObject == null + || (inputObject is string inputString && inputString == "null") + || (inputObject is ArrayList inputArray && inputArray.Count == 0)) + { + return false; + } + + return true; + } + + /// + /// Function to handle caching for the Data.Remember node + /// + /// Object to cache + /// Optional existing cache json + /// + [IsVisibleInDynamoLibrary(false)] + public static Dictionary Remember([ArbitraryDimensionArrayImport] object inputObject, string cachedJson) + { + //Handle the case where the node has no inputs or the input value is null + if (!CanObjectBeCached(inputObject)) + { + //If a previous cache exists, de-serialize and return + if (cachedJson != "") + { + object cachedObject = null; + try + { + cachedObject = ParseJSON(cachedJson); + } + catch(Exception ex) + { + dynamoLogger?.Log("Remember failed to deserialize with this exception: " + ex.Message); + throw new NotSupportedException(Properties.Resources.Exception_Deserialize_Unsupported_Cache); + } + + return new Dictionary + { + { ">", cachedObject }, + { "Cache", cachedJson } + }; + } + + //Else pass through the empty inputs and cacheJson + return new Dictionary + { + { ">", inputObject }, + { "Cache", cachedJson } + }; + } + + //Try to serialize the inputs and return + string newCachedJson; + try + { + newCachedJson = StringifyJSON(inputObject); + } + catch(Exception ex) + { + dynamoLogger?.Log("Remember failed to serialize with this exception: " + ex.Message); + throw new NotSupportedException(string.Format(Properties.Resources.Exception_Serialize_Unsupported_Type, inputObject.GetType().FullName)); + } + + return new Dictionary + { + { ">", inputObject }, + { "Cache", newCachedJson } + }; + } + + internal static DynamoLogger dynamoLogger = ExecutionEvents.ActiveSession?.GetParameterValue(ParameterKeys.Logger) as DynamoLogger; + + #endregion } } diff --git a/src/Libraries/CoreNodes/Properties/Resources.Designer.cs b/src/Libraries/CoreNodes/Properties/Resources.Designer.cs index 7237d03913a..c23e5860675 100644 --- a/src/Libraries/CoreNodes/Properties/Resources.Designer.cs +++ b/src/Libraries/CoreNodes/Properties/Resources.Designer.cs @@ -132,6 +132,51 @@ internal static string EnumDateOfWeekWednesday { } } + /// + /// Looks up a localized string similar to The json for the type {0} was not formatted correctly. + /// + internal static string Exception_Deserialize_Bad_Format { + get { + return ResourceManager.GetString("Exception_Deserialize_Bad_Format", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to The stored data can not be loaded.. + /// + internal static string Exception_Deserialize_Unsupported_Cache { + get { + return ResourceManager.GetString("Exception_Deserialize_Unsupported_Cache", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Depth {0} Exceeds MaxDepth {1} at path "{2}". + /// + internal static string Exception_Serialize_Depth_Unsupported { + get { + return ResourceManager.GetString("Exception_Serialize_Depth_Unsupported", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to This type of Geometry is not able to be serialized.. + /// + internal static string Exception_Serialize_DesignScript_Unsupported { + get { + return ResourceManager.GetString("Exception_Serialize_DesignScript_Unsupported", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Cannot store data of type {0}.. + /// + internal static string Exception_Serialize_Unsupported_Type { + get { + return ResourceManager.GetString("Exception_Serialize_Unsupported_Type", resourceCulture); + } + } + /// /// Looks up a localized string similar to Use Data.ExportCSV node instead. /// diff --git a/src/Libraries/CoreNodes/Properties/Resources.en-US.resx b/src/Libraries/CoreNodes/Properties/Resources.en-US.resx index 2782533d97e..41eca53e90b 100644 --- a/src/Libraries/CoreNodes/Properties/Resources.en-US.resx +++ b/src/Libraries/CoreNodes/Properties/Resources.en-US.resx @@ -141,6 +141,21 @@ Wednesday + + The json for the type {0} was not formatted correctly + + + The stored data can not be loaded. + + + Depth {0} Exceeds MaxDepth {1} at path "{2}" + + + This type of Geometry is not able to be serialized. + + + Cannot store data of type {0}. + Use Data.ExportCSV node instead diff --git a/src/Libraries/CoreNodes/Properties/Resources.resx b/src/Libraries/CoreNodes/Properties/Resources.resx index f1863496d6a..0da26c86af7 100644 --- a/src/Libraries/CoreNodes/Properties/Resources.resx +++ b/src/Libraries/CoreNodes/Properties/Resources.resx @@ -141,6 +141,21 @@ Wednesday + + The json for the type {0} was not formatted correctly + + + The stored data can not be loaded. + + + Depth {0} Exceeds MaxDepth {1} at path "{2}" + + + This type of Geometry is not able to be serialized. + + + Cannot store data of type {0}. + Use Data.ExportCSV node instead diff --git a/src/Libraries/DSOffice/DSOffice.csproj b/src/Libraries/DSOffice/DSOffice.csproj index c70f3437119..d01d11d7444 100644 --- a/src/Libraries/DSOffice/DSOffice.csproj +++ b/src/Libraries/DSOffice/DSOffice.csproj @@ -24,7 +24,7 @@ - + @@ -42,7 +42,7 @@ DynamoCore False - + {ef879a10-041d-4c68-83e7-3192685f1bae} DynamoServices @@ -55,7 +55,7 @@ - + diff --git a/src/Libraries/DSOfficeUtilities/DSOfficeUtilities.csproj b/src/Libraries/DSOfficeUtilities/DSOfficeUtilities.csproj index dc2bc49ee30..8a40de6fe32 100644 --- a/src/Libraries/DSOfficeUtilities/DSOfficeUtilities.csproj +++ b/src/Libraries/DSOfficeUtilities/DSOfficeUtilities.csproj @@ -12,7 +12,7 @@ MSB3539;CS1591;NUnit2005;NUnit2007;CS0618;CS0612;CS0672 - + all true @@ -22,7 +22,7 @@ tlbimp False - + {2DF8D04C-5BFA-101B-BDE5-00AA0044DE52} 2 8 @@ -31,9 +31,7 @@ False True - - - + diff --git a/src/Libraries/DesignScriptBuiltin/DesignScriptBuiltin.csproj b/src/Libraries/DesignScriptBuiltin/DesignScriptBuiltin.csproj index c3007ecb743..e671b013b01 100644 --- a/src/Libraries/DesignScriptBuiltin/DesignScriptBuiltin.csproj +++ b/src/Libraries/DesignScriptBuiltin/DesignScriptBuiltin.csproj @@ -15,7 +15,7 @@ MSB3539;CS1591;NUnit2005;NUnit2007;CS0618;CS0612;CS0672 - + @@ -49,7 +49,7 @@ - + \ No newline at end of file diff --git a/src/Libraries/DynamoUnits/UnitsCore.csproj b/src/Libraries/DynamoUnits/UnitsCore.csproj index 360f8714ec6..43309c7e8aa 100644 --- a/src/Libraries/DynamoUnits/UnitsCore.csproj +++ b/src/Libraries/DynamoUnits/UnitsCore.csproj @@ -13,16 +13,14 @@ MSB3539;CS1591;NUnit2005;NUnit2007;CS0618;CS0612;CS0672 - + - - runtime;build - + @@ -39,13 +37,14 @@ Resources.en-US.resx - + + - + diff --git a/src/Libraries/GeometryColor/GeometryColor.csproj b/src/Libraries/GeometryColor/GeometryColor.csproj index 0d604e328b1..37a39a5cf33 100644 --- a/src/Libraries/GeometryColor/GeometryColor.csproj +++ b/src/Libraries/GeometryColor/GeometryColor.csproj @@ -14,7 +14,7 @@ MSB3539;CS1591;NUnit2005;NUnit2007;CS0618;CS0612;CS0672 - + @@ -69,7 +69,7 @@ - + \ No newline at end of file diff --git a/src/Libraries/GeometryUI/GeometryUI.csproj b/src/Libraries/GeometryUI/GeometryUI.csproj index 17be441e7c6..0bedc465b8b 100644 --- a/src/Libraries/GeometryUI/GeometryUI.csproj +++ b/src/Libraries/GeometryUI/GeometryUI.csproj @@ -17,7 +17,7 @@ - + @@ -71,7 +71,7 @@ - + \ No newline at end of file diff --git a/src/Libraries/GeometryUIWpf/GeometryUIWpf.csproj b/src/Libraries/GeometryUIWpf/GeometryUIWpf.csproj index 197c61259a6..c96a3793440 100644 --- a/src/Libraries/GeometryUIWpf/GeometryUIWpf.csproj +++ b/src/Libraries/GeometryUIWpf/GeometryUIWpf.csproj @@ -21,7 +21,7 @@ - + @@ -94,7 +94,7 @@ - + \ No newline at end of file diff --git a/src/Libraries/PythonNodeModels/PythonNodeModels.csproj b/src/Libraries/PythonNodeModels/PythonNodeModels.csproj index c9ae415e763..1f72f16b716 100644 --- a/src/Libraries/PythonNodeModels/PythonNodeModels.csproj +++ b/src/Libraries/PythonNodeModels/PythonNodeModels.csproj @@ -63,7 +63,7 @@ - + \ No newline at end of file diff --git a/src/Libraries/PythonNodeModelsWpf/PythonNode.cs b/src/Libraries/PythonNodeModelsWpf/PythonNode.cs index 1130a7f6974..f2e60676e61 100644 --- a/src/Libraries/PythonNodeModelsWpf/PythonNode.cs +++ b/src/Libraries/PythonNodeModelsWpf/PythonNode.cs @@ -183,7 +183,7 @@ private void EditScriptContent(object sender, EventArgs e) { try { - using (var cmd = Dynamo.Logging.Analytics.TrackCommandEvent("PythonEdit")) + using (var cmd = Dynamo.Logging.Analytics.TrackTaskCommandEvent("PythonEdit")) { if (editWindow != null) { diff --git a/src/Libraries/Tesellation/Tessellation.csproj b/src/Libraries/Tesellation/Tessellation.csproj index cb9a313065b..a5dccde4a12 100644 --- a/src/Libraries/Tesellation/Tessellation.csproj +++ b/src/Libraries/Tesellation/Tessellation.csproj @@ -14,11 +14,9 @@ MSB3539;CS1591;NUnit2005;NUnit2007;CS0618;CS0612;CS0672 - + - - - + @@ -60,7 +58,7 @@ - + \ No newline at end of file diff --git a/src/Libraries/UnitsNodeModels/UnitsNodeModels.csproj b/src/Libraries/UnitsNodeModels/UnitsNodeModels.csproj index aafb4e6d946..91b9a6112f2 100644 --- a/src/Libraries/UnitsNodeModels/UnitsNodeModels.csproj +++ b/src/Libraries/UnitsNodeModels/UnitsNodeModels.csproj @@ -44,7 +44,7 @@ - + diff --git a/src/Libraries/Watch3DNodeModels/Watch3DNodeModels.csproj b/src/Libraries/Watch3DNodeModels/Watch3DNodeModels.csproj index ad2edc6beeb..b41c9df41c8 100644 --- a/src/Libraries/Watch3DNodeModels/Watch3DNodeModels.csproj +++ b/src/Libraries/Watch3DNodeModels/Watch3DNodeModels.csproj @@ -66,7 +66,7 @@ - + \ No newline at end of file diff --git a/src/Libraries/Watch3DNodeModelsWpf/Watch3DNodeViewCustomization.cs b/src/Libraries/Watch3DNodeModelsWpf/Watch3DNodeViewCustomization.cs index 418cc8e9f90..532c2316219 100644 --- a/src/Libraries/Watch3DNodeModelsWpf/Watch3DNodeViewCustomization.cs +++ b/src/Libraries/Watch3DNodeModelsWpf/Watch3DNodeViewCustomization.cs @@ -1,4 +1,4 @@ -īģŋusing System; +using System; using System.Collections; using System.Collections.Generic; using System.Linq; @@ -48,9 +48,6 @@ public void CustomizeView(Watch3D model, NodeView nodeView) var dynamoViewModel = nodeView.ViewModel.DynamoViewModel; watch3dModel = model; - var renderingTier = (RenderCapability.Tier >> 16); - if (renderingTier < 2) return; - var dynamoModel = dynamoViewModel.Model; var vmParams = new Watch3DViewModelStartupParams(dynamoModel); diff --git a/src/LibraryViewExtensionWebView2/LibraryViewController.cs b/src/LibraryViewExtensionWebView2/LibraryViewController.cs index 5f83c1ec363..6c4499fd368 100644 --- a/src/LibraryViewExtensionWebView2/LibraryViewController.cs +++ b/src/LibraryViewExtensionWebView2/LibraryViewController.cs @@ -322,11 +322,23 @@ internal void AddLibraryView() this.browser = view.mainGrid.Children.OfType().FirstOrDefault(); InitializeAsync(); - LibraryViewController.SetupSearchModelEventsObserver(browser, dynamoViewModel.Model.SearchModel, this, this.customization); + LibraryViewController.SetupSearchModelEventsObserver(browser, dynamoViewModel.Model.SearchModel, + this, this.customization); } async void InitializeAsync() { + try + { + var absolutePath = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), + @"runtimes\win-x64\native"); + CoreWebView2Environment.SetLoaderDllFolderPath(absolutePath); + } + catch (InvalidOperationException e) + { + LogToDynamoConsole("WebView2Loader.dll is already loaded successfully."); + } + browser.CoreWebView2InitializationCompleted += Browser_CoreWebView2InitializationCompleted; if (!string.IsNullOrEmpty(WebBrowserUserDataFolder)) diff --git a/src/LibraryViewExtensionWebView2/LibraryViewExtensionWebView2.csproj b/src/LibraryViewExtensionWebView2/LibraryViewExtensionWebView2.csproj index 428eed2ece2..10118881162 100644 --- a/src/LibraryViewExtensionWebView2/LibraryViewExtensionWebView2.csproj +++ b/src/LibraryViewExtensionWebView2/LibraryViewExtensionWebView2.csproj @@ -181,7 +181,7 @@ - ..\..\extern\Microsoft.Xaml.Behaviors\$(TargetFramework)\Dynamo.Microsoft.Xaml.Behaviors.dll + ..\..\extern\Microsoft.Xaml.Behaviors\net6.0-windows\Dynamo.Microsoft.Xaml.Behaviors.dll diff --git a/src/LibraryViewExtensionWebView2/web/library/layoutSpecs.json b/src/LibraryViewExtensionWebView2/web/library/layoutSpecs.json index 4af5af4d265..4062dfbae4a 100644 --- a/src/LibraryViewExtensionWebView2/web/library/layoutSpecs.json +++ b/src/LibraryViewExtensionWebView2/web/library/layoutSpecs.json @@ -877,6 +877,9 @@ "iconUrl": "", "elementType": "group", "include": [ + { + "path": "Core.Logic.Gate" + }, { "path": "BuiltIn.LoopWhile" }, @@ -1184,6 +1187,9 @@ }, { "path": "DSCoreNodes.DSCore.Data.StringifyJSON" + }, + { + "path": "Core.Data.Remember" } ], "childElements": [] diff --git a/src/LibraryViewExtensionWebView2/web/library/librarie.min.js b/src/LibraryViewExtensionWebView2/web/library/librarie.min.js index 8cd661f224a..bebc5b60e8a 100644 --- a/src/LibraryViewExtensionWebView2/web/library/librarie.min.js +++ b/src/LibraryViewExtensionWebView2/web/library/librarie.min.js @@ -1,3 +1,3 @@ /*! For license information please see librarie.min.js.LICENSE.txt */ -!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.LibraryEntryPoint=t():e.LibraryEntryPoint=t()}(self,(()=>(()=>{var e={4043:(e,t,__webpack_require__)=>{(t=__webpack_require__(3495)(!1)).push([e.id,":root{--rt-color-white:#fff;--rt-color-dark:#222;--rt-color-success:#8dc572;--rt-color-error:#be6464;--rt-color-warning:#f0ad4e;--rt-color-info:#337ab7;--rt-opacity:0.9}.core-styles-module_tooltip__3vRRp{left:0;opacity:0;pointer-events:none;position:absolute;top:0;transition:opacity .3s ease-out;visibility:hidden;will-change:opacity,visibility}.core-styles-module_fixed__pcSol{position:fixed}.core-styles-module_arrow__cvMwQ{background:inherit;position:absolute}.core-styles-module_noArrow__xock6{display:none}.core-styles-module_clickable__ZuTTB{pointer-events:auto}.core-styles-module_show__Nt9eE{opacity:var(--rt-opacity);visibility:visible}.styles-module_tooltip__mnnfp{border-radius:3px;font-size:90%;padding:8px 16px;width:max-content}.styles-module_arrow__K0L3T{height:8px;width:8px}[class*=react-tooltip__place-top]>.styles-module_arrow__K0L3T{transform:rotate(45deg)}[class*=react-tooltip__place-right]>.styles-module_arrow__K0L3T{transform:rotate(135deg)}[class*=react-tooltip__place-bottom]>.styles-module_arrow__K0L3T{transform:rotate(225deg)}[class*=react-tooltip__place-left]>.styles-module_arrow__K0L3T{transform:rotate(315deg)}.styles-module_dark__xNqje{background:var(--rt-color-dark);color:var(--rt-color-white)}.styles-module_light__Z6W-X{background-color:var(--rt-color-white);color:var(--rt-color-dark)}.styles-module_success__A2AKt{background-color:var(--rt-color-success);color:var(--rt-color-white)}.styles-module_warning__SCK0X{background-color:var(--rt-color-warning);color:var(--rt-color-white)}.styles-module_error__JvumD{background-color:var(--rt-color-error);color:var(--rt-color-white)}.styles-module_info__BWdHW{background-color:var(--rt-color-info);color:var(--rt-color-white)}",""]),e.exports=t},6160:(e,t,__webpack_require__)=>{var n=__webpack_require__(3495),r=__webpack_require__(490),o=__webpack_require__(5215),i=__webpack_require__(3586);t=n(!1);var a=r(o),l=r(i);t.push([e.id,'@font-face {\n\tfont-family: "Artifakt Element";\n\tsrc: url('+a+') format("woff");\n}\n\n@font-face {\n\tfont-family: "Artifakt Element";\n\tfont-weight: 700;\n\tsrc: url('+l+') format("woff");\n}\n\nhtml {\n\tfont-size: 12px;\n}\n\nbody {\n\tfont-family: "Artifakt Element", "Open Sans", sans-serif;\n\t-webkit-user-select: none;\n\tuser-select: none;\n\tcursor: default;\n\tbackground-color: #2a2a2a;\n\tcolor: #f5f5f5;\n}\n\ninput {\n\tfont-family: "Artifakt Element", "Open Sans", sans-serif;\n}\n\nbutton {\n\tfont-size: 1rem;\n}\n\n.LibraryContainer {\n\tmax-height: 100vh;\n\tdisplay: flex;\n\tflex-direction: column;\n}\n\n.LibraryItemContainer {\n\tflex-grow: 1;\n\toverflow-y: auto;\n}\n\n.LibraryItemContainerSection {\n\tdisplay: flex;\n\tflex-direction: column;\n}\n\n.LibraryItemContainerCategory {\n\tdisplay: flex;\n\tflex-direction: column;\n\tborder-bottom: solid 1px #494949;\n}\n\n.LibraryItemContainerGroup {\n\tdisplay: flex;\n\tflex-direction: column;\n}\n\n.LibraryItemContainerNone {\n\tdisplay: flex;\n\tflex-direction: column;\n\toverflow: hidden;\n}\n\n.LibrarySectionHeader {\n\tdisplay: flex;\n\tpadding-top: 1rem;\n\tpadding-left: 1.5rem;\n\tmargin-top: 0.5rem;\n\tfont-size: 1.4rem;\n\tcolor: #f5f5f5f5;\n\talign-items: center;\n\tjustify-content: space-between;\n\ttransition: 0.15s;\n}\n\n.LibrarySectionHeader .LibraryItemIcon:hover {\n\tcursor: pointer;\n}\n\n.LibrarySectionHeader .LibraryAddOnSectionIcon:hover {\n\tcursor: pointer;\n\topacity: 1;\n}\n\n.LibraryItemHeader {\n\tdisplay: flex;\n\tflex-direction: row;\n\talign-items: center;\n\ttransition: 0.15s;\n\tposition: relative;\n}\n\n.LibraryItemContainerCategory > .LibraryItemHeader {\n\tpadding-top: 1rem;\n\tpadding-bottom: 1rem;\n\tpadding-left: 1.5rem;\n}\n\n.LibraryItemContainerGroup > .LibraryItemHeader,\n.LibraryItemContainerNone > .LibraryItemHeader {\n\theight: 2.5rem;\n}\n\n.LibraryItemContainerGroup,\n.LibraryItemContainerNone {\n\tpadding-left: 0.5rem;\n\tpadding-right: 0.5rem;\n}\n\n.LibraryItemHeader:hover,\n.LibrarySectionHeader:hover {\n\t/* color: white; */\n\tbackground: rgba(255, 255, 255, 0.1);\n}\n\n.LibraryItemBodyElements {\n\twidth: 100%;\n}\n\n.LibraryItemBody {\n\tdisplay: flex;\n\tflex-direction: column;\n\talign-items: stretch;\n\t/* padding-left:12px; */\n}\n\n.LibraryItemBodyContainer {\n\tdisplay: flex;\n\talign-items: stretch;\n}\n\n.LibraryItemContainerSection .LibraryItemIcon {\n\twidth: 1.2rem;\n\theight: 1.2rem;\n\tpadding-right: 10px;\n\t-webkit-user-drag: none;\n}\n\n.LibraryItemContainerSection .LibraryAddOnSectionIcon {\n\topacity: 0.5;\n\twidth: 1.4rem;\n\theight: 1.4rem;\n\tpadding-right: 10px;\n\t-webkit-user-drag: none;\n}\n\n.LibraryItemContainerCategory .LibraryItemIcon {\n\tpadding: 7px 10px;\n\twidth: 1.2rem;\n\theight: 1.2rem;\n\t-webkit-user-drag: none;\n}\n\n.LibraryItemContainerNone .LibraryItemIcon {\n\tpadding-left: 0.5rem;\n\tpadding-right: 0.5rem;\n\twidth: 2rem;\n\theight: 2rem;\n\t-webkit-user-drag: none;\n}\n\n.Arrow + .LibraryItemIcon {\n\tpadding: 2px 8px 2px 4px;\n}\n\n.LibraryItemContainerCategory .LibraryItemText {\n\tcolor: #ade4de;\n\tfont-size: 1rem;\n\tmargin-top: 0.2rem;\n}\n\n.LibraryItemContainerNone .LibraryItemText {\n\tcolor: #c6c6c6;\n\tfont-size: 1rem;\n}\n\n.LibraryItemHeader .LibraryItemGroupText,\n.LibrarySectionHeader .LibraryItemGroupText {\n\tmargin-top: 0.5rem;\n\tmargin-bottom: 0.5rem;\n}\n\n.LibraryItemHeader .LibraryItemGroupText {\n\tcolor: #eeeeee;\n\tfont-size: 1rem;\n}\n\n.LibraryItemParameters {\n\tcolor: #888;\n\tfont-size: 1rem;\n\tmargin-left: 5px;\n\tdisplay: inline-block;\n\twhite-space: nowrap;\n}\n\n.Arrow {\n\twidth: 1rem;\n\tmin-width: 1rem;\n\theight: 1rem;\n\tmin-height: 1rem;\n\tmargin-left: 0.5rem;\n\tmargin-right: 1rem;\n}\n\n.CategoryArrow {\n\twidth: 1rem;\n\tmin-width: 1rem;\n\theight: 1rem;\n\tmin-height: 1rem;\n\tmargin-right: 0.5rem;\n\tmargin-top: auto;\n\tmargin-bottom: auto;\n}\n\n.LibraryItemBody > .LibraryItemContainerGroup > .LibraryItemHeader,\n.LibraryItemBody > .LibraryItemContainerNone > .LibraryItemHeader {\n\tborder: solid #d9d9d9 2px;\n\tborder-right: 0px;\n\tborder-top: 0px;\n\tborder-bottom: 0px;\n\tposition: relative;\n\theight: 2.5rem;\n}\n\n.LibraryItemBody > .LibraryItemContainerGroup > .LibraryItemHeader:before,\n.LibraryItemBody > .LibraryItemContainerNone > .LibraryItemHeader:before {\n\tcontent: "";\n\theight: 1rem;\n\twidth: 2rem;\n\tmin-width: 2rem;\n\tborder: solid #d9d9d9 2px;\n\tborder-right: 0px;\n\tborder-top: 0px;\n\tborder-left: 0px;\n\ttransform: translateY(-50%);\n}\n\n.LibraryItemBody\n\t> .LibraryItemContainerGroup:last-child\n\t> .LibraryItemHeader:after,\n.LibraryItemBody\n\t> .LibraryItemContainerGroup.expanded\n\t> .LibraryItemHeader:after,\n.LibraryItemBody\n\t> .LibraryItemContainerNone:last-child\n\t> .LibraryItemHeader:after,\n.LibraryItemBody\n\t> .LibraryItemContainerNone.expanded\n\t> .LibraryItemHeader:after {\n\tcontent: "";\n\theight: 50%;\n\tposition: absolute;\n\tborder-left: solid 4px #2a2a2a;\n\tbottom: 0;\n\tleft: -2px;\n}\n\n.BodyIndentation {\n\tpadding-left: 1.5rem;\n}\n\n.ClusterViewContainer {\n\tdisplay: flex;\n\tflex-direction: row;\n\tmargin-top: 1rem;\n\tmargin-bottom: 1rem;\n\tmargin-left: -1.5rem;\n}\n\n.ClusterLeftPane {\n\tdisplay: flex;\n\tpadding-left: 1.2rem;\n\tpadding-right: 0.1rem;\n\tborder-right: 2px;\n\tborder-right-style: solid;\n}\n\n.ClusterLeftPane.create {\n\tborder-color: #cfe4b3;\n}\n\n.ClusterLeftPane.action {\n\tborder-color: #fcc776;\n}\n\n.ClusterLeftPane.query {\n\tborder-color: #9bd5ef;\n}\n\n.ClusterRightPane {\n\tflex-grow: 2;\n\tpadding-left: 4px;\n}\n\n.ClusterIcon {\n\twidth: 1rem;\n\tmin-width: 1rem;\n\theight: 1rem;\n\tmin-height: 1rem;\n\tpadding-left: 0.5rem;\n\tpadding-right: 0.5rem;\n\t-webkit-user-drag: none;\n}\n\n.SearchBar {\n\tpadding-left: 1.5rem;\n\tpadding-right: 1.5rem;\n}\n\n.SearchBar.searching {\n\tmargin-bottom: 1rem;\n}\n\n.SearchInput {\n\tdisplay: flex;\n\tpadding: 5px 0px;\n\twidth: 100%;\n\tposition: relative;\n\twhite-space: nowrap;\n\tborder-bottom-color: #dadada;\n\tborder-bottom-style: solid;\n\tborder-bottom-width: 2px;\n\tfont-size: 1rem;\n\ttransition: ease-in-out 300ms;\n}\n\n.SearchInput.focus,\n.SearchInput.searching {\n\tborder-bottom-color: #38abdf;\n}\n\n.SearchInput.searching {\n\tmargin-bottom: 1rem;\n}\n\n.SearchInput:after {\n\tcontent: "";\n\tleft: 0;\n\topacity: 0;\n\tposition: absolute;\n\tbottom: -8px;\n\tborder-bottom-color: #38abdf;\n\tborder-bottom-style: solid;\n\tborder-bottom-width: 6px;\n\ttransition: ease-in-out 300ms;\n}\n\n.SearchInput.focus:after {\n\topacity: 0.5;\n\twidth: 100%;\n}\n\n.LibraryHeader {\n\tdisplay: flex;\n\tjustify-content: space-between;\n\talign-items: center;\n\tpadding-top: 1.2rem;\n\tpadding-bottom: 1.2rem;\n\tcolor: #f5f5f5f5;\n\tfont-size: 1.4rem;\n}\n\n.SearchBar .Icon {\n\twidth: 1.2rem;\n\theight: 1.2rem;\n}\n\n.SearchInp .ClearSearch {\n\theight: 0.8rem;\n}\n\n.SearchInput .SearchInputText {\n\tpadding-left: 0.8rem;\n\tpadding-right: 0.8rem;\n\tbackground: none;\n\toutline: none;\n\tborder: none;\n\twidth: 100%;\n\tcolor: #f5f5f5;\n\tfont-size: 1rem;\n}\n\n.SearchInput .SearchInputText::-webkit-input-placeholder {\n\tcolor: #dadada;\n}\n\n.SearchInput .SearchInputText:-moz-placeholder {\n\tcolor: #dadada;\n}\n\n.SearchInput .SearchInputText::-moz-placeholder {\n\tcolor: #dadada;\n}\n\n.SearchInput .SearchInputText:-ms-input-placeholder {\n\tcolor: #dadada;\n}\n\n.SearchInput .SearchInputText::-ms-input-placeholder {\n\tcolor: #dadada;\n}\n\n.SearchInput .SearchInputText::placeholder {\n\tcolor: #dadada;\n}\n\n.SearchInput .SearchInputText:focus {\n\tcolor: #38abdf;\n}\n\n.SearchInput .SearchInputText:focus::-webkit-input-placeholder {\n\topacity: 0;\n}\n\n.SearchBar .SearchOptionContainer {\n\tdisplay: flex;\n\theight: 2.5rem;\n\tjustify-content: flex-end;\n\tbackground-color: #3c3c3c;\n\tvisibility: hidden;\n\topacity: 0;\n\ttransition: ease-in-out 300ms;\n}\n\n.SearchBar.searching .SearchOptionContainer {\n\tvisibility: visible;\n\topacity: 1;\n}\n\n.SearchBar button {\n\tborder: 0;\n\toutline: none;\n\theight: 100%;\n\tbackground-color: transparent;\n\ttransition: 0.15s;\n\tcolor: #6dd2ff;\n}\n\n.SearchBar button:active:enabled,\n.SearchBar button:hover:enabled {\n\tcolor: #38abdf;\n\tbackground-color: rgba(255, 255, 255, 0.1);\n\tcursor: pointer;\n}\n\n.SearchBar button.CancelButton {\n\tbackground: transparent;\n\tborder: 0px;\n\toutline: 0px;\n}\n\n.SearchBar button.CancelButton:hover {\n\tbackground-color: transparent;\n\tcursor: pointer;\n}\n\n.SearchBar button:disabled {\n\tcursor: not-allowed;\n}\n\n.SearchFilterContainer {\n\tposition: relative;\n}\n\n.SearchFilterPanel {\n\tposition: absolute;\n\ttop: 2rem;\n\tright: 0;\n\tbackground-color: #535353;\n\tcolor: #ffffff;\n\twidth: 12rem;\n\ttext-align: left;\n\tfont-size: 1rem;\n\tbox-shadow: 0 0 1rem 0 rgba(0, 0, 0, 0.3);\n}\n\n.SearchFilterPanel > div {\n\tpadding-top: 1rem;\n\tpadding-bottom: 1rem;\n\tpadding-left: 1rem;\n\tpadding-right: 1rem;\n}\n\n.SearchFilterPanel > div:first-child {\n\tpadding-bottom: 0;\n}\n\n.SearchFilterPanel > .body {\n\tpadding-top: 0;\n\tpadding-bottom: 0;\n\tmargin-top: 1rem;\n\tmargin-bottom: 1rem;\n\tmax-height: 400px;\n\toverflow-y: auto;\n}\n\n/* Custom checkbox */\n.SearchFilterPanel label.Category {\n\tposition: relative;\n\tdisplay: block;\n\tmargin-bottom: 0.5rem;\n}\n\n.SearchFilterPanel label.Category:hover {\n\tcursor: pointer;\n}\n\n.SearchFilterPanel label.Category > * {\n\tdisplay: inline-block;\n\tvertical-align: middle;\n}\n\n.SearchFilterPanel .body input[type="checkbox"] {\n\tvisibility: hidden;\n\tcursor: pointer;\n\tposition: absolute;\n}\n\n.SearchFilterPanel .body input[type="checkbox"],\n.SearchFilterPanel .body .checkmark {\n\tmargin-right: 0.5rem;\n}\n\n.SearchFilterPanel .body .checkmark {\n\tposition: relative;\n\theight: 0.8rem;\n\twidth: 0.8rem;\n\tbackground-color: transparent;\n\tborder: solid 1px rgba(255, 255, 255, 0.5);\n}\n\n.SearchFilterPanel .body input[type="checkbox"]:checked ~ .checkmark {\n\tbackground-color: white;\n}\n\n/* Create the mark/indicator (hidden when not checked) */\n.checkmark:after {\n\tcontent: "";\n\tposition: absolute;\n\tdisplay: none;\n}\n\n/* Show the mark when checked */\n.SearchFilterPanel .body input[type="checkbox"]:checked ~ .checkmark:after {\n\tdisplay: block;\n}\n\n/* Style the mark/indicator */\n.SearchFilterPanel .body .checkmark:after {\n\tleft: 0.4rem;\n\ttop: 0;\n\twidth: 0.2rem;\n\theight: 0.6rem;\n\tborder: solid black;\n\tborder-width: 0 0.2rem 0.2rem 0;\n\ttransform: translateY(0.2rem) rotate(45deg);\n\ttransform-origin: top right;\n}\n\n.SearchFilterPanel .footer {\n\tdisplay: flex;\n\tjustify-content: flex-end;\n\talign-items: center;\n\tborder-top: solid #999999 1px;\n\tpadding-top: 0.5rem;\n\tpadding-bottom: 0.5rem;\n\tpadding-left: 0.5rem;\n\tpadding-right: 0.5rem;\n}\n\n.SearchFilterPanel .footer > * {\n\tpadding-top: 0.5rem;\n\tpadding-bottom: 0.5rem;\n\tpadding-left: 0.5rem;\n\tpadding-right: 0.5rem;\n}\n\n.SearchBar .SearchOptionsContainer {\n\tfont-size: 1rem;\n\tcolor: #fff;\n\tmargin: 0px 0px 5px 0px;\n\tbackground-color: #606060;\n\toverflow-x: hidden;\n\toverflow-y: hidden;\n\tposition: absolute;\n\ttop: 26px;\n\tright: 10px;\n\tborder: 1px solid #aaa;\n}\n\n.SearchBar .SearchOptionsHeader {\n\tpadding: 5px;\n}\n\n.SearchBar .SearchOptionsHeader span {\n\tfont-weight: 700;\n}\n\n.SearchBar .SearchOptionsHeader .SelectAllBtn {\n\tcolor: #aaa;\n\tbackground: transparent;\n\tborder: none;\n\toutline: none;\n\tfloat: right;\n}\n\n.SearchBar .SearchOptionsHeader .SelectAllBtn:hover {\n\tcursor: pointer;\n\tcolor: white;\n}\n\n.SearchBar .CategoryCheckboxContainer {\n\toverflow-x: hidden;\n}\n\n.CheckboxLabelEnabled,\n.CheckboxLabelDisabled {\n\tposition: relative;\n\twidth: 100%;\n\tdisplay: block;\n\tpadding: 4px 3px;\n\ttransition: 0.15s;\n}\n\n.CheckboxLabelDisabled {\n\tcolor: #aaa;\n}\n\n.CheckboxLabelEnabled:hover {\n\tbackground-color: #555;\n\tcursor: pointer;\n}\n\n.CheckboxLabelEnabled .CheckboxSymbol,\n.CheckboxLabelDisabled .CheckboxSymbol {\n\tposition: absolute;\n\tleft: 5px;\n}\n\n.CheckboxLabelEnabled .CheckboxLabelText,\n.CheckboxLabelDisabled .CheckboxLabelText {\n\tpadding-left: 20px;\n\tpadding-right: 40px;\n\t/* for the "only" text */\n}\n\n.CheckboxLabelEnabled .CheckboxLabelRightButton,\n.CheckboxLabelDisabled .CheckboxLabelRightButton {\n\tposition: absolute;\n\ttransform: translate(-50%, 20%);\n\ttop: 0px;\n\tright: 0px;\n\tcolor: #aaa;\n\tbackground: transparent;\n\tborder: none;\n\toutline: none;\n\tdisplay: none;\n\tmargin: 0px;\n\tpadding: 0px;\n\tfont-size: 1rem;\n}\n\n.CheckboxLabelEnabled .CheckboxLabelRightButton:hover {\n\tcolor: white;\n\tcursor: pointer;\n}\n\n.CheckboxLabelEnabled:hover .CheckboxLabelRightButton {\n\tdisplay: block;\n}\n\n.SearchResultItemContainer,\n.SearchResultItemContainerSelected {\n\tdisplay: flex;\n\tflex-direction: row;\n\talign-items: center;\n\tpadding: 3px;\n\tcolor: white;\n\ttransition: 0.15s;\n\tpadding-left: 0.8rem;\n}\n\n.SearchResultItemContainerSelected {\n\tbackground-color: #444;\n}\n\n.SearchResultItemContainer:hover,\n.SearchResultItemContainerSelected:hover {\n\tcolor: white;\n\tbackground: rgba(255, 255, 255, 0.1);\n}\n\n.SearchResultItemContainer .ItemInfo,\n.SearchResultItemContainerSelected .ItemInfo {\n\tpadding: 5px 0px 5px 0px;\n}\n\n.SearchResultItemContainer .ItemIcon,\n.SearchResultItemContainerSelected .ItemIcon {\n\tpadding: 2px 8px;\n\tmin-width: 32px;\n\twidth: 32px;\n\tmin-height: 32px;\n\theight: 32px;\n}\n\n.SearchResultItemContainer .ItemTitle,\n.SearchResultItemContainerSelected .ItemTitle {\n\tmargin-bottom: 2px;\n\tfont-size: 1.2rem;\n}\n\n.SearchResultItemContainer .ItemDescription,\n.SearchResultItemContainerSelected .ItemDescription {\n\tfont-size: 1rem;\n\tpadding: 2px 0px;\n\tcolor: #aaa;\n}\n\n.SearchResultItemContainer .ItemDetails,\n.SearchResultItemContainerSelected .ItemDetails {\n\tdisplay: flex;\n\talign-items: center;\n\tfont-size: 1rem;\n\tcolor: #aaaaaa;\n}\n\n.SearchResultItemContainer .ItemParent,\n.SearchResultItemContainerSelected .ItemParent {\n\tdisplay: inline-block;\n\tpadding-right: 5px;\n\ttransition: 0.15s;\n\ttext-decoration: underline;\n}\n\n.SearchResultItemContainer .ItemParent:hover,\n.SearchResultItemContainerSelected .ItemParent:hover {\n\tcursor: pointer;\n\tcolor: white;\n}\n\n.SearchResultItemContainer .ItemCategory,\n.SearchResultItemContainerSelected .ItemCategory {\n\tdisplay: inline-block;\n\tcolor: #ddd;\n\tpadding-left: 5px;\n}\n\n.SearchResultItemContainer .ItemTypeIcon,\n.SearchResultItemContainerSelected .ItemTypeIcon {\n\twidth: 1rem;\n\theight: 1rem;\n\tmargin-top: auto;\n\tmargin-bottom: auto;\n}\n\n.HighlightedText {\n\tfont-weight: 700;\n\tcolor: #4ac8ef;\n}\n\n.SearchResultItemContainer .ItemParent:hover .HighlightedText {\n\tcolor: white;\n}\n\n::-webkit-input-placeholder {\n\tcolor: #aaaaaa;\n}\n\n::-webkit-scrollbar {\n\twidth: 6px;\n\theight: 6px;\n\tbackground-color: #414141;\n}\n\n::-webkit-scrollbar-thumb {\n\twidth: 6px;\n\tborder-radius: 3px;\n\tbackground-color: rgba(136, 136, 136, 0.8);\n}\n\n::-webkit-scrollbar-corner {\n\tbackground-color: inherit;\n}\n\n.tooltipWrapper {\n\theight: fit-content;\n}\n\n.ClusterLeftPane .customTooltip {\n\tbackground: #d9d9d9;\n\tcolor: #2a2a2a;\n\tpadding: 5px;\n\tfont-family: "Artifakt Element", sans-serif;\n\tfont-weight: 700;\n\tz-index: 9;\n}\n',""]),e.exports=t},793:(e,t,__webpack_require__)=>{"use strict";__webpack_require__.r(t),__webpack_require__.d(t,{arrow:()=>I,autoPlacement:()=>_,autoUpdate:()=>me,computePosition:()=>ye,detectOverflow:()=>C,flip:()=>L,getOverflowAncestors:()=>te,hide:()=>N,inline:()=>R,limitShift:()=>j,offset:()=>M,platform:()=>he,shift:()=>D,size:()=>F});const n=["top","right","bottom","left"],r=["start","end"],o=n.reduce(((e,t)=>e.concat(t,t+"-"+r[0],t+"-"+r[1])),[]),i=Math.min,a=Math.max,l=Math.round,s=Math.floor,u=e=>({x:e,y:e}),c={left:"right",right:"left",bottom:"top",top:"bottom"},f={start:"end",end:"start"};function d(e,t,n){return a(e,i(t,n))}function p(e,t){return"function"==typeof e?e(t):e}function h(e){return e.split("-")[0]}function m(e){return e.split("-")[1]}function y(e){return"x"===e?"y":"x"}function v(e){return"y"===e?"height":"width"}function g(e){return["top","bottom"].includes(h(e))?"y":"x"}function b(e){return y(g(e))}function w(e,t,n){void 0===n&&(n=!1);const r=m(e),o=b(e),i=v(o);let a="x"===o?r===(n?"end":"start")?"right":"left":"start"===r?"bottom":"top";return t.reference[i]>t.floating[i]&&(a=S(a)),[a,S(a)]}function x(e){return e.replace(/start|end/g,(e=>f[e]))}function S(e){return e.replace(/left|right|bottom|top/g,(e=>c[e]))}function E(e){return"number"!=typeof e?function(e){return{top:0,right:0,bottom:0,left:0,...e}}(e):{top:e,right:e,bottom:e,left:e}}function k(e){return{...e,top:e.y,left:e.x,right:e.x+e.width,bottom:e.y+e.height}}function T(e,t,n){let{reference:r,floating:o}=e;const i=g(t),a=b(t),l=v(a),s=h(t),u="y"===i,c=r.x+r.width/2-o.width/2,f=r.y+r.height/2-o.height/2,d=r[l]/2-o[l]/2;let p;switch(s){case"top":p={x:c,y:r.y-o.height};break;case"bottom":p={x:c,y:r.y+r.height};break;case"right":p={x:r.x+r.width,y:f};break;case"left":p={x:r.x-o.width,y:f};break;default:p={x:r.x,y:r.y}}switch(m(t)){case"start":p[a]-=d*(n&&u?-1:1);break;case"end":p[a]+=d*(n&&u?-1:1)}return p}async function C(e,t){var n;void 0===t&&(t={});const{x:r,y:o,platform:i,rects:a,elements:l,strategy:s}=e,{boundary:u="clippingAncestors",rootBoundary:c="viewport",elementContext:f="floating",altBoundary:d=!1,padding:h=0}=p(t,e),m=E(h),y=l[d?"floating"===f?"reference":"floating":f],v=k(await i.getClippingRect({element:null==(n=await(null==i.isElement?void 0:i.isElement(y)))||n?y:y.contextElement||await(null==i.getDocumentElement?void 0:i.getDocumentElement(l.floating)),boundary:u,rootBoundary:c,strategy:s})),g="floating"===f?{...a.floating,x:r,y:o}:a.reference,b=await(null==i.getOffsetParent?void 0:i.getOffsetParent(l.floating)),w=await(null==i.isElement?void 0:i.isElement(b))&&await(null==i.getScale?void 0:i.getScale(b))||{x:1,y:1},x=k(i.convertOffsetParentRelativeRectToViewportRelativeRect?await i.convertOffsetParentRelativeRectToViewportRelativeRect({rect:g,offsetParent:b,strategy:s}):g);return{top:(v.top-x.top+m.top)/w.y,bottom:(x.bottom-v.bottom+m.bottom)/w.y,left:(v.left-x.left+m.left)/w.x,right:(x.right-v.right+m.right)/w.x}}const I=e=>({name:"arrow",options:e,async fn(t){const{x:n,y:r,placement:o,rects:a,platform:l,elements:s}=t,{element:u,padding:c=0}=p(e,t)||{};if(null==u)return{};const f=E(c),h={x:n,y:r},y=b(o),g=v(y),w=await l.getDimensions(u),x="y"===y,S=x?"top":"left",k=x?"bottom":"right",T=x?"clientHeight":"clientWidth",C=a.reference[g]+a.reference[y]-h[y]-a.floating[g],I=h[y]-a.reference[y],_=await(null==l.getOffsetParent?void 0:l.getOffsetParent(u));let L=_?_[T]:0;L&&await(null==l.isElement?void 0:l.isElement(_))||(L=s.floating[T]||a.floating[g]);const O=C/2-I/2,P=L/2-w[g]/2-1,N=i(f[S],P),A=i(f[k],P),R=N,M=L-w[g]-A,D=L/2-w[g]/2+O,j=d(R,D,M),F=null!=m(o)&&D!=j&&a.reference[g]/2-(Dm(t)===e)),...n.filter((t=>m(t)!==e))]:n.filter((e=>h(e)===e))).filter((n=>!e||m(n)===e||!!t&&x(n)!==n))}(d||null,v,y):y,S=await C(t,g),E=(null==(n=l.autoPlacement)?void 0:n.index)||0,k=b[E];if(null==k)return{};const T=w(k,a,await(null==u.isRTL?void 0:u.isRTL(c.floating)));if(s!==k)return{reset:{placement:b[0]}};const I=[S[h(k)],S[T[0]],S[T[1]]],_=[...(null==(r=l.autoPlacement)?void 0:r.overflows)||[],{placement:k,overflows:I}],L=b[E+1];if(L)return{data:{index:E+1,overflows:_},reset:{placement:L}};const O=_.map((e=>{const t=m(e.placement);return[e.placement,t&&f?e.overflows.slice(0,2).reduce(((e,t)=>e+t),0):e.overflows[0],e.overflows]})).sort(((e,t)=>e[1]-t[1])),P=(null==(i=O.filter((e=>e[2].slice(0,m(e[0])?2:3).every((e=>e<=0))))[0])?void 0:i[0])||O[0][0];return P!==s?{data:{index:E+1,overflows:_},reset:{placement:P}}:{}}}},L=function(e){return void 0===e&&(e={}),{name:"flip",options:e,async fn(t){var n;const{placement:r,middlewareData:o,rects:i,initialPlacement:a,platform:l,elements:s}=t,{mainAxis:u=!0,crossAxis:c=!0,fallbackPlacements:f,fallbackStrategy:d="bestFit",fallbackAxisSideDirection:y="none",flipAlignment:v=!0,...g}=p(e,t),b=h(r),E=h(a)===a,k=await(null==l.isRTL?void 0:l.isRTL(s.floating)),T=f||(E||!v?[S(a)]:function(e){const t=S(e);return[x(e),t,x(t)]}(a));f||"none"===y||T.push(...function(e,t,n,r){const o=m(e);let i=function(e,t,n){const r=["left","right"],o=["right","left"],i=["top","bottom"],a=["bottom","top"];switch(e){case"top":case"bottom":return n?t?o:r:t?r:o;case"left":case"right":return t?i:a;default:return[]}}(h(e),"start"===n,r);return o&&(i=i.map((e=>e+"-"+o)),t&&(i=i.concat(i.map(x)))),i}(a,v,y,k));const I=[a,...T],_=await C(t,g),L=[];let O=(null==(n=o.flip)?void 0:n.overflows)||[];if(u&&L.push(_[b]),c){const e=w(r,i,k);L.push(_[e[0]],_[e[1]])}if(O=[...O,{placement:r,overflows:L}],!L.every((e=>e<=0))){var P,N;const e=((null==(P=o.flip)?void 0:P.index)||0)+1,t=I[e];if(t)return{data:{index:e,overflows:O},reset:{placement:t}};let n=null==(N=O.filter((e=>e.overflows[0]<=0)).sort(((e,t)=>e.overflows[1]-t.overflows[1]))[0])?void 0:N.placement;if(!n)switch(d){case"bestFit":{var A;const e=null==(A=O.map((e=>[e.placement,e.overflows.filter((e=>e>0)).reduce(((e,t)=>e+t),0)])).sort(((e,t)=>e[1]-t[1]))[0])?void 0:A[0];e&&(n=e);break}case"initialPlacement":n=a}if(r!==n)return{reset:{placement:n}}}return{}}}};function O(e,t){return{top:e.top-t.height,right:e.right-t.width,bottom:e.bottom-t.height,left:e.left-t.width}}function P(e){return n.some((t=>e[t]>=0))}const N=function(e){return void 0===e&&(e={}),{name:"hide",options:e,async fn(t){const{rects:n}=t,{strategy:r="referenceHidden",...o}=p(e,t);switch(r){case"referenceHidden":{const e=O(await C(t,{...o,elementContext:"reference"}),n.reference);return{data:{referenceHiddenOffsets:e,referenceHidden:P(e)}}}case"escaped":{const e=O(await C(t,{...o,altBoundary:!0}),n.floating);return{data:{escapedOffsets:e,escaped:P(e)}}}default:return{}}}}};function A(e){const t=i(...e.map((e=>e.left))),n=i(...e.map((e=>e.top)));return{x:t,y:n,width:a(...e.map((e=>e.right)))-t,height:a(...e.map((e=>e.bottom)))-n}}const R=function(e){return void 0===e&&(e={}),{name:"inline",options:e,async fn(t){const{placement:n,elements:r,rects:o,platform:l,strategy:s}=t,{padding:u=2,x:c,y:f}=p(e,t),d=Array.from(await(null==l.getClientRects?void 0:l.getClientRects(r.reference))||[]),m=function(e){const t=e.slice().sort(((e,t)=>e.y-t.y)),n=[];let r=null;for(let e=0;er.height/2?n.push([o]):n[n.length-1].push(o),r=o}return n.map((e=>k(A(e))))}(d),y=k(A(d)),v=E(u);const b=await l.getElementRects({reference:{getBoundingClientRect:function(){if(2===m.length&&m[0].left>m[1].right&&null!=c&&null!=f)return m.find((e=>c>e.left-v.left&&ce.top-v.top&&f=2){if("y"===g(n)){const e=m[0],t=m[m.length-1],r="top"===h(n),o=e.top,i=t.bottom,a=r?e.left:t.left,l=r?e.right:t.right;return{top:o,bottom:i,left:a,right:l,width:l-a,height:i-o,x:a,y:o}}const e="left"===h(n),t=a(...m.map((e=>e.right))),r=i(...m.map((e=>e.left))),o=m.filter((n=>e?n.left===r:n.right===t)),l=o[0].top,s=o[o.length-1].bottom;return{top:l,bottom:s,left:r,right:t,width:t-r,height:s-l,x:r,y:l}}return y}},floating:r.floating,strategy:s});return o.reference.x!==b.reference.x||o.reference.y!==b.reference.y||o.reference.width!==b.reference.width||o.reference.height!==b.reference.height?{reset:{rects:b}}:{}}}};const M=function(e){return void 0===e&&(e=0),{name:"offset",options:e,async fn(t){const{x:n,y:r}=t,o=await async function(e,t){const{placement:n,platform:r,elements:o}=e,i=await(null==r.isRTL?void 0:r.isRTL(o.floating)),a=h(n),l=m(n),s="y"===g(n),u=["left","top"].includes(a)?-1:1,c=i&&s?-1:1,f=p(t,e);let{mainAxis:d,crossAxis:y,alignmentAxis:v}="number"==typeof f?{mainAxis:f,crossAxis:0,alignmentAxis:null}:{mainAxis:0,crossAxis:0,alignmentAxis:null,...f};return l&&"number"==typeof v&&(y="end"===l?-1*v:v),s?{x:y*c,y:d*u}:{x:d*u,y:y*c}}(t,e);return{x:n+o.x,y:r+o.y,data:o}}}},D=function(e){return void 0===e&&(e={}),{name:"shift",options:e,async fn(t){const{x:n,y:r,placement:o}=t,{mainAxis:i=!0,crossAxis:a=!1,limiter:l={fn:e=>{let{x:t,y:n}=e;return{x:t,y:n}}},...s}=p(e,t),u={x:n,y:r},c=await C(t,s),f=g(h(o)),m=y(f);let v=u[m],b=u[f];if(i){const e="y"===m?"bottom":"right";v=d(v+c["y"===m?"top":"left"],v,v-c[e])}if(a){const e="y"===f?"bottom":"right";b=d(b+c["y"===f?"top":"left"],b,b-c[e])}const w=l.fn({...t,[m]:v,[f]:b});return{...w,data:{x:w.x-n,y:w.y-r}}}}},j=function(e){return void 0===e&&(e={}),{options:e,fn(t){const{x:n,y:r,placement:o,rects:i,middlewareData:a}=t,{offset:l=0,mainAxis:s=!0,crossAxis:u=!0}=p(e,t),c={x:n,y:r},f=g(o),d=y(f);let m=c[d],v=c[f];const b=p(l,t),w="number"==typeof b?{mainAxis:b,crossAxis:0}:{mainAxis:0,crossAxis:0,...b};if(s){const e="y"===d?"height":"width",t=i.reference[d]-i.floating[e]+w.mainAxis,n=i.reference[d]+i.reference[e]-w.mainAxis;mn&&(m=n)}if(u){var x,S;const e="y"===d?"width":"height",t=["top","left"].includes(h(o)),n=i.reference[f]-i.floating[e]+(t&&(null==(x=a.offset)?void 0:x[f])||0)+(t?0:w.crossAxis),r=i.reference[f]+i.reference[e]+(t?0:(null==(S=a.offset)?void 0:S[f])||0)-(t?w.crossAxis:0);vr&&(v=r)}return{[d]:m,[f]:v}}}},F=function(e){return void 0===e&&(e={}),{name:"size",options:e,async fn(t){const{placement:n,rects:r,platform:o,elements:l}=t,{apply:s=(()=>{}),...u}=p(e,t),c=await C(t,u),f=h(n),d=m(n),y="y"===g(n),{width:v,height:b}=r.floating;let w,x;"top"===f||"bottom"===f?(w=f,x=d===(await(null==o.isRTL?void 0:o.isRTL(l.floating))?"start":"end")?"left":"right"):(x=f,w="end"===d?"top":"bottom");const S=b-c[w],E=v-c[x],k=!t.middlewareData.shift;let T=S,I=E;if(y){const e=v-c.left-c.right;I=d||k?i(E,e):e}else{const e=b-c.top-c.bottom;T=d||k?i(S,e):e}if(k&&!d){const e=a(c.left,0),t=a(c.right,0),n=a(c.top,0),r=a(c.bottom,0);y?I=v-2*(0!==e||0!==t?e+t:a(c.left,c.right)):T=b-2*(0!==n||0!==r?n+r:a(c.top,c.bottom))}await s({...t,availableWidth:I,availableHeight:T});const _=await o.getDimensions(l.floating);return v!==_.width||b!==_.height?{reset:{rects:!0}}:{}}}};function z(e){return H(e)?(e.nodeName||"").toLowerCase():"#document"}function B(e){var t;return(null==e||null==(t=e.ownerDocument)?void 0:t.defaultView)||window}function U(e){var t;return null==(t=(H(e)?e.ownerDocument:e.document)||window.document)?void 0:t.documentElement}function H(e){return e instanceof Node||e instanceof B(e).Node}function W(e){return e instanceof Element||e instanceof B(e).Element}function V(e){return e instanceof HTMLElement||e instanceof B(e).HTMLElement}function $(e){return"undefined"!=typeof ShadowRoot&&(e instanceof ShadowRoot||e instanceof B(e).ShadowRoot)}function q(e){const{overflow:t,overflowX:n,overflowY:r,display:o}=Y(e);return/auto|scroll|overlay|hidden|clip/.test(t+r+n)&&!["inline","contents"].includes(o)}function K(e){return["table","td","th"].includes(z(e))}function Q(e){const t=J(),n=Y(e);return"none"!==n.transform||"none"!==n.perspective||!!n.containerType&&"normal"!==n.containerType||!t&&!!n.backdropFilter&&"none"!==n.backdropFilter||!t&&!!n.filter&&"none"!==n.filter||["transform","perspective","filter"].some((e=>(n.willChange||"").includes(e)))||["paint","layout","strict","content"].some((e=>(n.contain||"").includes(e)))}function J(){return!("undefined"==typeof CSS||!CSS.supports)&&CSS.supports("-webkit-backdrop-filter","none")}function G(e){return["html","body","#document"].includes(z(e))}function Y(e){return B(e).getComputedStyle(e)}function X(e){return W(e)?{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}:{scrollLeft:e.pageXOffset,scrollTop:e.pageYOffset}}function Z(e){if("html"===z(e))return e;const t=e.assignedSlot||e.parentNode||$(e)&&e.host||U(e);return $(t)?t.host:t}function ee(e){const t=Z(e);return G(t)?e.ownerDocument?e.ownerDocument.body:e.body:V(t)&&q(t)?t:ee(t)}function te(e,t){var n;void 0===t&&(t=[]);const r=ee(e),o=r===(null==(n=e.ownerDocument)?void 0:n.body),i=B(r);return o?t.concat(i,i.visualViewport||[],q(r)?r:[],i.frameElement?te(i.frameElement):[]):t.concat(r,te(r))}function ne(e){const t=Y(e);let n=parseFloat(t.width)||0,r=parseFloat(t.height)||0;const o=V(e),i=o?e.offsetWidth:n,a=o?e.offsetHeight:r,s=l(n)!==i||l(r)!==a;return s&&(n=i,r=a),{width:n,height:r,$:s}}function re(e){return W(e)?e:e.contextElement}function oe(e){const t=re(e);if(!V(t))return u(1);const n=t.getBoundingClientRect(),{width:r,height:o,$:i}=ne(t);let a=(i?l(n.width):n.width)/r,s=(i?l(n.height):n.height)/o;return a&&Number.isFinite(a)||(a=1),s&&Number.isFinite(s)||(s=1),{x:a,y:s}}const ie=u(0);function ae(e){const t=B(e);return J()&&t.visualViewport?{x:t.visualViewport.offsetLeft,y:t.visualViewport.offsetTop}:ie}function le(e,t,n,r){void 0===t&&(t=!1),void 0===n&&(n=!1);const o=e.getBoundingClientRect(),i=re(e);let a=u(1);t&&(r?W(r)&&(a=oe(r)):a=oe(e));const l=function(e,t,n){return void 0===t&&(t=!1),!(!n||t&&n!==B(e))&&t}(i,n,r)?ae(i):u(0);let s=(o.left+l.x)/a.x,c=(o.top+l.y)/a.y,f=o.width/a.x,d=o.height/a.y;if(i){const e=B(i),t=r&&W(r)?B(r):r;let n=e.frameElement;for(;n&&r&&t!==e;){const e=oe(n),t=n.getBoundingClientRect(),r=Y(n),o=t.left+(n.clientLeft+parseFloat(r.paddingLeft))*e.x,i=t.top+(n.clientTop+parseFloat(r.paddingTop))*e.y;s*=e.x,c*=e.y,f*=e.x,d*=e.y,s+=o,c+=i,n=B(n).frameElement}}return k({width:f,height:d,x:s,y:c})}function se(e){return le(U(e)).left+X(e).scrollLeft}function ue(e,t,n){let r;if("viewport"===t)r=function(e,t){const n=B(e),r=U(e),o=n.visualViewport;let i=r.clientWidth,a=r.clientHeight,l=0,s=0;if(o){i=o.width,a=o.height;const e=J();(!e||e&&"fixed"===t)&&(l=o.offsetLeft,s=o.offsetTop)}return{width:i,height:a,x:l,y:s}}(e,n);else if("document"===t)r=function(e){const t=U(e),n=X(e),r=e.ownerDocument.body,o=a(t.scrollWidth,t.clientWidth,r.scrollWidth,r.clientWidth),i=a(t.scrollHeight,t.clientHeight,r.scrollHeight,r.clientHeight);let l=-n.scrollLeft+se(e);const s=-n.scrollTop;return"rtl"===Y(r).direction&&(l+=a(t.clientWidth,r.clientWidth)-o),{width:o,height:i,x:l,y:s}}(U(e));else if(W(t))r=function(e,t){const n=le(e,!0,"fixed"===t),r=n.top+e.clientTop,o=n.left+e.clientLeft,i=V(e)?oe(e):u(1);return{width:e.clientWidth*i.x,height:e.clientHeight*i.y,x:o*i.x,y:r*i.y}}(t,n);else{const n=ae(e);r={...t,x:t.x-n.x,y:t.y-n.y}}return k(r)}function ce(e,t){const n=Z(e);return!(n===t||!W(n)||G(n))&&("fixed"===Y(n).position||ce(n,t))}function fe(e,t,n){const r=V(t),o=U(t),i="fixed"===n,a=le(e,!0,i,t);let l={scrollLeft:0,scrollTop:0};const s=u(0);if(r||!r&&!i)if(("body"!==z(t)||q(o))&&(l=X(t)),r){const e=le(t,!0,i,t);s.x=e.x+t.clientLeft,s.y=e.y+t.clientTop}else o&&(s.x=se(o));return{x:a.left+l.scrollLeft-s.x,y:a.top+l.scrollTop-s.y,width:a.width,height:a.height}}function de(e,t){return V(e)&&"fixed"!==Y(e).position?t?t(e):e.offsetParent:null}function pe(e,t){const n=B(e);if(!V(e))return n;let r=de(e,t);for(;r&&K(r)&&"static"===Y(r).position;)r=de(r,t);return r&&("html"===z(r)||"body"===z(r)&&"static"===Y(r).position&&!Q(r))?n:r||function(e){let t=Z(e);for(;V(t)&&!G(t);){if(Q(t))return t;t=Z(t)}return null}(e)||n}const he={convertOffsetParentRelativeRectToViewportRelativeRect:function(e){let{rect:t,offsetParent:n,strategy:r}=e;const o=V(n),i=U(n);if(n===i)return t;let a={scrollLeft:0,scrollTop:0},l=u(1);const s=u(0);if((o||!o&&"fixed"!==r)&&(("body"!==z(n)||q(i))&&(a=X(n)),V(n))){const e=le(n);l=oe(n),s.x=e.x+n.clientLeft,s.y=e.y+n.clientTop}return{width:t.width*l.x,height:t.height*l.y,x:t.x*l.x-a.scrollLeft*l.x+s.x,y:t.y*l.y-a.scrollTop*l.y+s.y}},getDocumentElement:U,getClippingRect:function(e){let{element:t,boundary:n,rootBoundary:r,strategy:o}=e;const l=[..."clippingAncestors"===n?function(e,t){const n=t.get(e);if(n)return n;let r=te(e).filter((e=>W(e)&&"body"!==z(e))),o=null;const i="fixed"===Y(e).position;let a=i?Z(e):e;for(;W(a)&&!G(a);){const t=Y(a),n=Q(a);n||"fixed"!==t.position||(o=null),(i?!n&&!o:!n&&"static"===t.position&&o&&["absolute","fixed"].includes(o.position)||q(a)&&!n&&ce(e,a))?r=r.filter((e=>e!==a)):o=t,a=Z(a)}return t.set(e,r),r}(t,this._c):[].concat(n),r],s=l[0],u=l.reduce(((e,n)=>{const r=ue(t,n,o);return e.top=a(r.top,e.top),e.right=i(r.right,e.right),e.bottom=i(r.bottom,e.bottom),e.left=a(r.left,e.left),e}),ue(t,s,o));return{width:u.right-u.left,height:u.bottom-u.top,x:u.left,y:u.top}},getOffsetParent:pe,getElementRects:async function(e){let{reference:t,floating:n,strategy:r}=e;const o=this.getOffsetParent||pe,i=this.getDimensions;return{reference:fe(t,await o(n),r),floating:{x:0,y:0,...await i(n)}}},getClientRects:function(e){return Array.from(e.getClientRects())},getDimensions:function(e){return ne(e)},getScale:oe,isElement:W,isRTL:function(e){return"rtl"===Y(e).direction}};function me(e,t,n,r){void 0===r&&(r={});const{ancestorScroll:o=!0,ancestorResize:l=!0,elementResize:u="function"==typeof ResizeObserver,layoutShift:c="function"==typeof IntersectionObserver,animationFrame:f=!1}=r,d=re(e),p=o||l?[...d?te(d):[],...te(t)]:[];p.forEach((e=>{o&&e.addEventListener("scroll",n,{passive:!0}),l&&e.addEventListener("resize",n)}));const h=d&&c?function(e,t){let n,r=null;const o=U(e);function l(){clearTimeout(n),r&&r.disconnect(),r=null}return function u(c,f){void 0===c&&(c=!1),void 0===f&&(f=1),l();const{left:d,top:p,width:h,height:m}=e.getBoundingClientRect();if(c||t(),!h||!m)return;const y={rootMargin:-s(p)+"px "+-s(o.clientWidth-(d+h))+"px "+-s(o.clientHeight-(p+m))+"px "+-s(d)+"px",threshold:a(0,i(1,f))||1};let v=!0;function g(e){const t=e[0].intersectionRatio;if(t!==f){if(!v)return u();t?u(!1,t):n=setTimeout((()=>{u(!1,1e-7)}),100)}v=!1}try{r=new IntersectionObserver(g,{...y,root:o.ownerDocument})}catch(e){r=new IntersectionObserver(g,y)}r.observe(e)}(!0),l}(d,n):null;let m,y=-1,v=null;u&&(v=new ResizeObserver((e=>{let[r]=e;r&&r.target===d&&v&&(v.unobserve(t),cancelAnimationFrame(y),y=requestAnimationFrame((()=>{v&&v.observe(t)}))),n()})),d&&!f&&v.observe(d),v.observe(t));let g=f?le(e):null;return f&&function t(){const r=le(e);!g||r.x===g.x&&r.y===g.y&&r.width===g.width&&r.height===g.height||n();g=r,m=requestAnimationFrame(t)}(),n(),()=>{p.forEach((e=>{o&&e.removeEventListener("scroll",n),l&&e.removeEventListener("resize",n)})),h&&h(),v&&v.disconnect(),v=null,f&&cancelAnimationFrame(m)}}const ye=(e,t,n)=>{const r=new Map,o={platform:he,...n},i={...o.platform,_c:r};return(async(e,t,n)=>{const{placement:r="bottom",strategy:o="absolute",middleware:i=[],platform:a}=n,l=i.filter(Boolean),s=await(null==a.isRTL?void 0:a.isRTL(t));let u=await a.getElementRects({reference:e,floating:t,strategy:o}),{x:c,y:f}=T(u,r,s),d=r,p={},h=0;for(let n=0;n{var n;!function(){"use strict";var r={}.hasOwnProperty;function o(){for(var e=[],t=0;t{"use strict";var n=__webpack_require__(7226);__webpack_require__(3823),__webpack_require__(737),__webpack_require__(1608),__webpack_require__(3673),__webpack_require__(1019),__webpack_require__(5718),__webpack_require__(2911),__webpack_require__(5075),__webpack_require__(5914),__webpack_require__(9160),__webpack_require__(223),__webpack_require__(7757),__webpack_require__(1029),e.exports=n},2599:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(9173);e.exports=n},9473:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(1402);e.exports=n},1007:(e,t,__webpack_require__)=>{"use strict";__webpack_require__(5040),__webpack_require__(9129),__webpack_require__(517),__webpack_require__(7245),__webpack_require__(8033),__webpack_require__(3900),__webpack_require__(1388),__webpack_require__(3040),__webpack_require__(1725),__webpack_require__(8342),__webpack_require__(3143),__webpack_require__(3805),__webpack_require__(2914),__webpack_require__(7195),__webpack_require__(5036),__webpack_require__(4780),__webpack_require__(5099),__webpack_require__(6550),__webpack_require__(8490),__webpack_require__(4668),__webpack_require__(4803),__webpack_require__(5412),__webpack_require__(8960),__webpack_require__(9010),__webpack_require__(640),__webpack_require__(2590),__webpack_require__(6516),__webpack_require__(7999),__webpack_require__(2934),__webpack_require__(9024),__webpack_require__(2345),__webpack_require__(928),__webpack_require__(3115),__webpack_require__(3456),__webpack_require__(4540),__webpack_require__(9586),__webpack_require__(9238),__webpack_require__(8118),__webpack_require__(737),__webpack_require__(951);var n=__webpack_require__(3034);e.exports=n.Array},3522:(e,t,__webpack_require__)=>{"use strict";__webpack_require__(4035);var n=__webpack_require__(6917);e.exports=n("String","includes")},990:(e,t,__webpack_require__)=>{"use strict";__webpack_require__(6488);var n=__webpack_require__(6917);e.exports=n("String","startsWith")},6173:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(4028),r=__webpack_require__(4160),o=TypeError;e.exports=function(e){if(n(e))return e;throw o(r(e)+" is not a function")}},2023:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(8449),r=__webpack_require__(4160),o=TypeError;e.exports=function(e){if(n(e))return e;throw o(r(e)+" is not a constructor")}},1684:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(4028),r=String,o=TypeError;e.exports=function(e){if("object"==typeof e||n(e))return e;throw o("Can't set "+r(e)+" as a prototype")}},7512:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(191),r=__webpack_require__(3250),o=__webpack_require__(3087).f,i=n("unscopables"),a=Array.prototype;void 0===a[i]&&o(a,i,{configurable:!0,value:r(null)}),e.exports=function(e){a[i][e]=!0}},9837:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(7357),r=TypeError;e.exports=function(e,t){if(n(t,e))return e;throw r("Incorrect invocation")}},2546:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(1355),r=String,o=TypeError;e.exports=function(e){if(n(e))return e;throw o(r(e)+" is not an object")}},1843:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(7137),r=__webpack_require__(6593),o=__webpack_require__(4117),i=__webpack_require__(9850),a=Math.min;e.exports=[].copyWithin||function(e,t){var l=n(this),s=o(l),u=r(e,s),c=r(t,s),f=arguments.length>2?arguments[2]:void 0,d=a((void 0===f?s:r(f,s))-c,s-u),p=1;for(c0;)c in l?l[u]=l[c]:i(l,u),u+=p,c+=p;return l}},3750:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(7137),r=__webpack_require__(6593),o=__webpack_require__(4117);e.exports=function(e){for(var t=n(this),i=o(t),a=arguments.length,l=r(a>1?arguments[1]:void 0,i),s=a>2?arguments[2]:void 0,u=void 0===s?i:r(s,i);u>l;)t[l++]=e;return t}},3609:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(5883).forEach,r=__webpack_require__(4694)("forEach");e.exports=r?[].forEach:function(e){return n(this,e,arguments.length>1?arguments[1]:void 0)}},6570:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(391),r=__webpack_require__(9913),o=__webpack_require__(7137),i=__webpack_require__(8449),a=__webpack_require__(1179),l=__webpack_require__(2057),s=__webpack_require__(8973),u=__webpack_require__(6897),c=__webpack_require__(4040),f=__webpack_require__(3628),d=__webpack_require__(3155),p=__webpack_require__(191),h=__webpack_require__(8497),m=__webpack_require__(5961).toArray,y=p("asyncIterator"),v=r(f("Array").values),g=r(v([]).next),b=function(){return new w(this)},w=function(e){this.iterator=v(e)};w.prototype.next=function(){return g(this.iterator)},e.exports=function(e){var t=this,r=arguments.length,f=r>1?arguments[1]:void 0,p=r>2?arguments[2]:void 0;return new(d("Promise"))((function(r){var d=o(e);void 0!==f&&(f=n(f,p));var v=c(d,y),g=v?void 0:u(d)||b,w=i(t)?new t:[],x=v?a(d,v):new h(s(l(d,g)));r(m(x,f,w))}))}},4632:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(4117);e.exports=function(e,t){for(var r=0,o=n(t),i=new e(o);o>r;)i[r]=t[r++];return i}},5375:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(391),r=__webpack_require__(9425),o=__webpack_require__(7137),i=__webpack_require__(7701),a=__webpack_require__(2882),l=__webpack_require__(8449),s=__webpack_require__(4117),u=__webpack_require__(9402),c=__webpack_require__(2057),f=__webpack_require__(6897),d=Array;e.exports=function(e){var t=o(e),p=l(this),h=arguments.length,m=h>1?arguments[1]:void 0,y=void 0!==m;y&&(m=n(m,h>2?arguments[2]:void 0));var v,g,b,w,x,S,E=f(t),k=0;if(!E||this===d&&a(E))for(v=s(t),g=p?new this(v):d(v);v>k;k++)S=y?m(t[k],k):t[k],u(g,k,S);else for(x=(w=c(t,E)).next,g=p?new this:[];!(b=r(x,w)).done;k++)S=y?i(w,m,[b.value,k],!0):b.value,u(g,k,S);return g.length=k,g}},3699:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(391),r=__webpack_require__(9913),o=__webpack_require__(4032),i=__webpack_require__(7137),a=__webpack_require__(4117),l=__webpack_require__(1916),s=l.Map,u=l.get,c=l.has,f=l.set,d=r([].push);e.exports=function(e){for(var t,r,l=i(this),p=o(l),h=n(e,arguments.length>1?arguments[1]:void 0),m=new s,y=a(p),v=0;y>v;v++)t=h(r=p[v],v,l),c(m,t)?d(u(m,t),r):f(m,t,[r]);return m}},6557:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(391),r=__webpack_require__(9913),o=__webpack_require__(4032),i=__webpack_require__(7137),a=__webpack_require__(9127),l=__webpack_require__(4117),s=__webpack_require__(3250),u=__webpack_require__(4632),c=Array,f=r([].push);e.exports=function(e,t,r,d){for(var p,h,m,y=i(e),v=o(y),g=n(t,r),b=s(null),w=l(v),x=0;w>x;x++)m=v[x],(h=a(g(m,x,y)))in b?f(b[h],m):b[h]=[m];if(d&&(p=d(y))!==c)for(h in b)b[h]=u(p,b[h]);return b}},8035:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(8326),r=__webpack_require__(6593),o=__webpack_require__(4117),i=function(e){return function(t,i,a){var l,s=n(t),u=o(s),c=r(a,u);if(e&&i!=i){for(;u>c;)if((l=s[c++])!=l)return!0}else for(;u>c;c++)if((e||c in s)&&s[c]===i)return e||c||0;return!e&&-1}};e.exports={includes:i(!0),indexOf:i(!1)}},2161:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(391),r=__webpack_require__(4032),o=__webpack_require__(7137),i=__webpack_require__(4117),a=function(e){var t=1===e;return function(a,l,s){for(var u,c=o(a),f=r(c),d=n(l,s),p=i(f);p-- >0;)if(d(u=f[p],p,c))switch(e){case 0:return u;case 1:return p}return t?-1:void 0}};e.exports={findLast:a(0),findLastIndex:a(1)}},5883:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(391),r=__webpack_require__(9913),o=__webpack_require__(4032),i=__webpack_require__(7137),a=__webpack_require__(4117),l=__webpack_require__(4842),s=r([].push),u=function(e){var t=1===e,r=2===e,u=3===e,c=4===e,f=6===e,d=7===e,p=5===e||f;return function(h,m,y,v){for(var g,b,w=i(h),x=o(w),S=n(m,y),E=a(x),k=0,T=v||l,C=t?T(h,E):r||d?T(h,0):void 0;E>k;k++)if((p||k in x)&&(b=S(g=x[k],k,w),e))if(t)C[k]=b;else if(b)switch(e){case 3:return!0;case 5:return g;case 6:return k;case 2:s(C,g)}else switch(e){case 4:return!1;case 7:s(C,g)}return f?-1:u||c?c:C}};e.exports={forEach:u(0),map:u(1),filter:u(2),some:u(3),every:u(4),find:u(5),findIndex:u(6),filterReject:u(7)}},4687:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(584),r=__webpack_require__(8326),o=__webpack_require__(5982),i=__webpack_require__(4117),a=__webpack_require__(4694),l=Math.min,s=[].lastIndexOf,u=!!s&&1/[1].lastIndexOf(1,-0)<0,c=a("lastIndexOf"),f=u||!c;e.exports=f?function(e){if(u)return n(s,this,arguments)||0;var t=r(this),a=i(t),c=a-1;for(arguments.length>1&&(c=l(c,o(arguments[1]))),c<0&&(c=a+c);c>=0;c--)if(c in t&&t[c]===e)return c||0;return-1}:s},1665:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(8986),r=__webpack_require__(191),o=__webpack_require__(714),i=r("species");e.exports=function(e){return o>=51||!n((function(){var t=[];return(t.constructor={})[i]=function(){return{foo:1}},1!==t[e](Boolean).foo}))}},4694:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(8986);e.exports=function(e,t){var r=[][e];return!!r&&n((function(){r.call(null,t||function(){return 1},1)}))}},9906:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(6173),r=__webpack_require__(7137),o=__webpack_require__(4032),i=__webpack_require__(4117),a=TypeError,l=function(e){return function(t,l,s,u){n(l);var c=r(t),f=o(c),d=i(c),p=e?d-1:0,h=e?-1:1;if(s<2)for(;;){if(p in f){u=f[p],p+=h;break}if(p+=h,e?p<0:d<=p)throw a("Reduce of empty array with no initial value")}for(;e?p>=0:d>p;p+=h)p in f&&(u=l(u,f[p],p,c));return u}};e.exports={left:l(!1),right:l(!0)}},7761:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(2115),r=__webpack_require__(5351),o=TypeError,i=Object.getOwnPropertyDescriptor,a=n&&!function(){if(void 0!==this)return!0;try{Object.defineProperty([],"length",{writable:!1}).length=1}catch(e){return e instanceof TypeError}}();e.exports=a?function(e,t){if(r(e)&&!i(e,"length").writable)throw o("Cannot set read only .length");return e.length=t}:function(e,t){return e.length=t}},2893:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(6593),r=__webpack_require__(4117),o=__webpack_require__(9402),i=Array,a=Math.max;e.exports=function(e,t,l){for(var s=r(e),u=n(t,s),c=n(void 0===l?s:l,s),f=i(a(c-u,0)),d=0;u{"use strict";var n=__webpack_require__(9913);e.exports=n([].slice)},1929:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(2893),r=Math.floor,o=function(e,t){var l=e.length,s=r(l/2);return l<8?i(e,t):a(e,o(n(e,0,s),t),o(n(e,s),t),t)},i=function(e,t){for(var n,r,o=e.length,i=1;i0;)e[r]=e[--r];r!==i++&&(e[r]=n)}return e},a=function(e,t,n,r){for(var o=t.length,i=n.length,a=0,l=0;a{"use strict";var n=__webpack_require__(5351),r=__webpack_require__(8449),o=__webpack_require__(1355),i=__webpack_require__(191)("species"),a=Array;e.exports=function(e){var t;return n(e)&&(t=e.constructor,(r(t)&&(t===a||n(t.prototype))||o(t)&&null===(t=t[i]))&&(t=void 0)),void 0===t?a:t}},4842:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(8502);e.exports=function(e,t){return new(n(e))(0===t?0:t)}},1136:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(4117);e.exports=function(e,t){for(var r=n(e),o=new t(r),i=0;i{"use strict";var n=__webpack_require__(4117),r=__webpack_require__(5982),o=RangeError;e.exports=function(e,t,i,a){var l=n(e),s=r(i),u=s<0?l+s:s;if(u>=l||u<0)throw o("Incorrect index");for(var c=new t(l),f=0;f{"use strict";var n=__webpack_require__(9425),r=__webpack_require__(2546),o=__webpack_require__(3250),i=__webpack_require__(4040),a=__webpack_require__(3193),l=__webpack_require__(8045),s=__webpack_require__(3155),u=__webpack_require__(7994),c=__webpack_require__(251),f=s("Promise"),d="AsyncFromSyncIterator",p=l.set,h=l.getterFor(d),m=function(e,t,n){var r=e.done;f.resolve(e.value).then((function(e){t(c(e,r))}),n)},y=function(e){e.type=d,p(this,e)};y.prototype=a(o(u),{next:function(){var e=h(this);return new f((function(t,o){var i=r(n(e.next,e.iterator));m(i,t,o)}))},return:function(){var e=h(this).iterator;return new f((function(t,o){var a=i(e,"return");if(void 0===a)return t(c(void 0,!0));var l=r(n(a,e));m(l,t,o)}))}}),e.exports=y},114:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(9425),r=__webpack_require__(3155),o=__webpack_require__(4040);e.exports=function(e,t,i,a){try{var l=o(e,"return");if(l)return r("Promise").resolve(n(l,e)).then((function(){t(i)}),(function(e){a(e)}))}catch(e){return a(e)}t(i)}},5961:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(9425),r=__webpack_require__(6173),o=__webpack_require__(2546),i=__webpack_require__(1355),a=__webpack_require__(1912),l=__webpack_require__(3155),s=__webpack_require__(8973),u=__webpack_require__(114),c=function(e){var t=0===e,c=1===e,f=2===e,d=3===e;return function(e,p,h){o(e);var m=void 0!==p;!m&&t||r(p);var y=s(e),v=l("Promise"),g=y.iterator,b=y.next,w=0;return new v((function(e,r){var l=function(e){u(g,r,e,r)},s=function(){try{if(m)try{a(w)}catch(e){l(e)}v.resolve(o(n(b,g))).then((function(n){try{if(o(n).done)t?(h.length=w,e(h)):e(!d&&(f||void 0));else{var a=n.value;try{if(m){var y=p(a,w),b=function(n){if(c)s();else if(f)n?s():u(g,e,!1,r);else if(t)try{h[w++]=n,s()}catch(e){l(e)}else n?u(g,e,d||a,r):s()};i(y)?v.resolve(y).then(b,l):b(y)}else h[w++]=a,s()}catch(e){l(e)}}}catch(e){r(e)}}),r)}catch(e){r(e)}};s()}))}};e.exports={toArray:c(0),forEach:c(1),every:c(2),some:c(3),find:c(4)}},7994:(e,t,__webpack_require__)=>{"use strict";var n,r,o=__webpack_require__(2022),i=__webpack_require__(3349),a=__webpack_require__(4028),l=__webpack_require__(3250),s=__webpack_require__(5783),u=__webpack_require__(3068),c=__webpack_require__(191),f=__webpack_require__(8546),d="USE_FUNCTION_CONSTRUCTOR",p=c("asyncIterator"),h=o.AsyncIterator,m=i.AsyncIteratorPrototype;if(m)n=m;else if(a(h))n=h.prototype;else if(i[d]||o[d])try{r=s(s(s(Function("return async function*(){}()")()))),s(r)===Object.prototype&&(n=r)}catch(e){}n?f&&(n=l(n)):n={},a(n[p])||u(n,p,(function(){return this})),e.exports=n},7701:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(2546),r=__webpack_require__(4681);e.exports=function(e,t,o,i){try{return i?t(n(o)[0],o[1]):t(o)}catch(t){r(e,"throw",t)}}},1269:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(191)("iterator"),r=!1;try{var o=0,i={next:function(){return{done:!!o++}},return:function(){r=!0}};i[n]=function(){return this},Array.from(i,(function(){throw 2}))}catch(e){}e.exports=function(e,t){try{if(!t&&!r)return!1}catch(e){return!1}var o=!1;try{var i={};i[n]=function(){return{next:function(){return{done:o=!0}}}},e(i)}catch(e){}return o}},9523:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(9913),r=n({}.toString),o=n("".slice);e.exports=function(e){return o(r(e),8,-1)}},2814:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(7568),r=__webpack_require__(4028),o=__webpack_require__(9523),i=__webpack_require__(191)("toStringTag"),a=Object,l="Arguments"===o(function(){return arguments}());e.exports=n?o:function(e){var t,n,s;return void 0===e?"Undefined":null===e?"Null":"string"==typeof(n=function(e,t){try{return e[t]}catch(e){}}(t=a(e),i))?n:l?o(t):"Object"===(s=o(t))&&r(t.callee)?"Arguments":s}},4953:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(8511),r=__webpack_require__(1537),o=__webpack_require__(6213),i=__webpack_require__(3087);e.exports=function(e,t,a){for(var l=r(t),s=i.f,u=o.f,c=0;c{"use strict";var n=__webpack_require__(191)("match");e.exports=function(e){var t=/./;try{"/./"[e](t)}catch(r){try{return t[n]=!1,"/./"[e](t)}catch(e){}}return!1}},8538:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(8986);e.exports=!n((function(){function e(){}return e.prototype.constructor=null,Object.getPrototypeOf(new e)!==e.prototype}))},251:e=>{"use strict";e.exports=function(e,t){return{value:e,done:t}}},2775:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(2115),r=__webpack_require__(3087),o=__webpack_require__(1111);e.exports=n?function(e,t,n){return r.f(e,t,o(1,n))}:function(e,t,n){return e[t]=n,e}},1111:e=>{"use strict";e.exports=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}},9402:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(9127),r=__webpack_require__(3087),o=__webpack_require__(1111);e.exports=function(e,t,i){var a=n(t);a in e?r.f(e,a,o(0,i)):e[a]=i}},9718:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(3608),r=__webpack_require__(3087);e.exports=function(e,t,o){return o.get&&n(o.get,t,{getter:!0}),o.set&&n(o.set,t,{setter:!0}),r.f(e,t,o)}},3068:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(4028),r=__webpack_require__(3087),o=__webpack_require__(3608),i=__webpack_require__(7210);e.exports=function(e,t,a,l){l||(l={});var s=l.enumerable,u=void 0!==l.name?l.name:t;if(n(a)&&o(a,u,l),l.global)s?e[t]=a:i(t,a);else{try{l.unsafe?e[t]&&(s=!0):delete e[t]}catch(e){}s?e[t]=a:r.f(e,t,{value:a,enumerable:!1,configurable:!l.nonConfigurable,writable:!l.nonWritable})}return e}},3193:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(3068);e.exports=function(e,t,r){for(var o in t)n(e,o,t[o],r);return e}},7210:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(2022),r=Object.defineProperty;e.exports=function(e,t){try{r(n,e,{value:t,configurable:!0,writable:!0})}catch(r){n[e]=t}return t}},9850:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(4160),r=TypeError;e.exports=function(e,t){if(!delete e[t])throw r("Cannot delete property "+n(t)+" of "+n(e))}},2115:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(8986);e.exports=!n((function(){return 7!==Object.defineProperty({},1,{get:function(){return 7}})[1]}))},805:e=>{"use strict";var t="object"==typeof document&&document.all,n=void 0===t&&void 0!==t;e.exports={all:t,IS_HTMLDDA:n}},2985:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(2022),r=__webpack_require__(1355),o=n.document,i=r(o)&&r(o.createElement);e.exports=function(e){return i?o.createElement(e):{}}},1912:e=>{"use strict";var t=TypeError;e.exports=function(e){if(e>9007199254740991)throw t("Maximum allowed index exceeded");return e}},3454:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(727).match(/firefox\/(\d+)/i);e.exports=!!n&&+n[1]},5048:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(5835),r=__webpack_require__(9456);e.exports=!n&&!r&&"object"==typeof window&&"object"==typeof document},5835:e=>{"use strict";e.exports="object"==typeof Deno&&Deno&&"object"==typeof Deno.version},8633:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(727);e.exports=/MSIE|Trident/.test(n)},8525:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(727);e.exports=/ipad|iphone|ipod/i.test(n)&&"undefined"!=typeof Pebble},649:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(727);e.exports=/(?:ipad|iphone|ipod).*applewebkit/i.test(n)},9456:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(2022),r=__webpack_require__(9523);e.exports="process"===r(n.process)},2054:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(727);e.exports=/web0s(?!.*chrome)/i.test(n)},727:e=>{"use strict";e.exports="undefined"!=typeof navigator&&String(navigator.userAgent)||""},714:(e,t,__webpack_require__)=>{"use strict";var n,r,o=__webpack_require__(2022),i=__webpack_require__(727),a=o.process,l=o.Deno,s=a&&a.versions||l&&l.version,u=s&&s.v8;u&&(r=(n=u.split("."))[0]>0&&n[0]<4?1:+(n[0]+n[1])),!r&&i&&(!(n=i.match(/Edge\/(\d+)/))||n[1]>=74)&&(n=i.match(/Chrome\/(\d+)/))&&(r=+n[1]),e.exports=r},720:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(727).match(/AppleWebKit\/(\d+)\./);e.exports=!!n&&+n[1]},6917:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(2022),r=__webpack_require__(9913);e.exports=function(e,t){return r(n[e].prototype[t])}},3628:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(2022);e.exports=function(e){return n[e].prototype}},6100:e=>{"use strict";e.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]},4635:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(2022),r=__webpack_require__(6213).f,o=__webpack_require__(2775),i=__webpack_require__(3068),a=__webpack_require__(7210),l=__webpack_require__(4953),s=__webpack_require__(7987);e.exports=function(e,t){var u,c,f,d,p,h=e.target,m=e.global,y=e.stat;if(u=m?n:y?n[h]||a(h,{}):(n[h]||{}).prototype)for(c in t){if(d=t[c],f=e.dontCallGetSet?(p=r(u,c))&&p.value:u[c],!s(m?c:h+(y?".":"#")+c,e.forced)&&void 0!==f){if(typeof d==typeof f)continue;l(d,f)}(e.sham||f&&f.sham)&&o(d,"sham",!0),i(u,c,d,e)}}},8986:e=>{"use strict";e.exports=function(e){try{return!!e()}catch(e){return!0}}},7484:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(5351),r=__webpack_require__(4117),o=__webpack_require__(1912),i=__webpack_require__(391),a=function(e,t,l,s,u,c,f,d){for(var p,h,m=u,y=0,v=!!f&&i(f,d);y0&&n(p)?(h=r(p),m=a(e,t,p,h,m,c-1)-1):(o(m+1),e[m]=p),m++),y++;return m};e.exports=a},584:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(4959),r=Function.prototype,o=r.apply,i=r.call;e.exports="object"==typeof Reflect&&Reflect.apply||(n?i.bind(o):function(){return i.apply(o,arguments)})},391:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(3505),r=__webpack_require__(6173),o=__webpack_require__(4959),i=n(n.bind);e.exports=function(e,t){return r(e),void 0===t?e:o?i(e,t):function(){return e.apply(t,arguments)}}},4959:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(8986);e.exports=!n((function(){var e=function(){}.bind();return"function"!=typeof e||e.hasOwnProperty("prototype")}))},9425:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(4959),r=Function.prototype.call;e.exports=n?r.bind(r):function(){return r.apply(r,arguments)}},7765:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(2115),r=__webpack_require__(8511),o=Function.prototype,i=n&&Object.getOwnPropertyDescriptor,a=r(o,"name"),l=a&&"something"===function(){}.name,s=a&&(!n||n&&i(o,"name").configurable);e.exports={EXISTS:a,PROPER:l,CONFIGURABLE:s}},9416:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(9913),r=__webpack_require__(6173);e.exports=function(e,t,o){try{return n(r(Object.getOwnPropertyDescriptor(e,t)[o]))}catch(e){}}},3505:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(9523),r=__webpack_require__(9913);e.exports=function(e){if("Function"===n(e))return r(e)}},9913:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(4959),r=Function.prototype,o=r.call,i=n&&r.bind.bind(o,o);e.exports=n?i:function(e){return function(){return o.apply(e,arguments)}}},1179:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(9425),r=__webpack_require__(8497),o=__webpack_require__(2546),i=__webpack_require__(2057),a=__webpack_require__(8973),l=__webpack_require__(4040),s=__webpack_require__(191)("asyncIterator");e.exports=function(e,t){var u=arguments.length<2?l(e,s):t;return u?o(n(u,e)):new r(a(i(e)))}},3155:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(2022),r=__webpack_require__(4028);e.exports=function(e,t){return arguments.length<2?(o=n[e],r(o)?o:void 0):n[e]&&n[e][t];var o}},8973:e=>{"use strict";e.exports=function(e){return{iterator:e,next:e.next,done:!1}}},6897:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(2814),r=__webpack_require__(4040),o=__webpack_require__(7126),i=__webpack_require__(9953),a=__webpack_require__(191)("iterator");e.exports=function(e){if(!o(e))return r(e,a)||r(e,"@@iterator")||i[n(e)]}},2057:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(9425),r=__webpack_require__(6173),o=__webpack_require__(2546),i=__webpack_require__(4160),a=__webpack_require__(6897),l=TypeError;e.exports=function(e,t){var s=arguments.length<2?a(e):t;if(r(s))return o(n(s,e));throw l(i(e)+" is not iterable")}},4040:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(6173),r=__webpack_require__(7126);e.exports=function(e,t){var o=e[t];return r(o)?void 0:n(o)}},2022:function(e,t,__webpack_require__){"use strict";var n=function(e){return e&&e.Math===Math&&e};e.exports=n("object"==typeof globalThis&&globalThis)||n("object"==typeof window&&window)||n("object"==typeof self&&self)||n("object"==typeof __webpack_require__.g&&__webpack_require__.g)||function(){return this}()||this||Function("return this")()},8511:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(9913),r=__webpack_require__(7137),o=n({}.hasOwnProperty);e.exports=Object.hasOwn||function(e,t){return o(r(e),t)}},7307:e=>{"use strict";e.exports={}},9361:e=>{"use strict";e.exports=function(e,t){try{1===arguments.length?console.error(e):console.error(e,t)}catch(e){}}},6419:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(3155);e.exports=n("document","documentElement")},2159:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(2115),r=__webpack_require__(8986),o=__webpack_require__(2985);e.exports=!n&&!r((function(){return 7!==Object.defineProperty(o("div"),"a",{get:function(){return 7}}).a}))},4032:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(9913),r=__webpack_require__(8986),o=__webpack_require__(9523),i=Object,a=n("".split);e.exports=r((function(){return!i("z").propertyIsEnumerable(0)}))?function(e){return"String"===o(e)?a(e,""):i(e)}:i},6169:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(9913),r=__webpack_require__(4028),o=__webpack_require__(3349),i=n(Function.toString);r(o.inspectSource)||(o.inspectSource=function(e){return i(e)}),e.exports=o.inspectSource},8045:(e,t,__webpack_require__)=>{"use strict";var n,r,o,i=__webpack_require__(4112),a=__webpack_require__(2022),l=__webpack_require__(1355),s=__webpack_require__(2775),u=__webpack_require__(8511),c=__webpack_require__(3349),f=__webpack_require__(7186),d=__webpack_require__(7307),p="Object already initialized",h=a.TypeError,m=a.WeakMap;if(i||c.state){var y=c.state||(c.state=new m);y.get=y.get,y.has=y.has,y.set=y.set,n=function(e,t){if(y.has(e))throw h(p);return t.facade=e,y.set(e,t),t},r=function(e){return y.get(e)||{}},o=function(e){return y.has(e)}}else{var v=f("state");d[v]=!0,n=function(e,t){if(u(e,v))throw h(p);return t.facade=e,s(e,v,t),t},r=function(e){return u(e,v)?e[v]:{}},o=function(e){return u(e,v)}}e.exports={set:n,get:r,has:o,enforce:function(e){return o(e)?r(e):n(e,{})},getterFor:function(e){return function(t){var n;if(!l(t)||(n=r(t)).type!==e)throw h("Incompatible receiver, "+e+" required");return n}}}},2882:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(191),r=__webpack_require__(9953),o=n("iterator"),i=Array.prototype;e.exports=function(e){return void 0!==e&&(r.Array===e||i[o]===e)}},5351:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(9523);e.exports=Array.isArray||function(e){return"Array"===n(e)}},4028:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(805),r=n.all;e.exports=n.IS_HTMLDDA?function(e){return"function"==typeof e||e===r}:function(e){return"function"==typeof e}},8449:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(9913),r=__webpack_require__(8986),o=__webpack_require__(4028),i=__webpack_require__(2814),a=__webpack_require__(3155),l=__webpack_require__(6169),s=function(){},u=[],c=a("Reflect","construct"),f=/^\s*(?:class|function)\b/,d=n(f.exec),p=!f.exec(s),h=function(e){if(!o(e))return!1;try{return c(s,u,e),!0}catch(e){return!1}},m=function(e){if(!o(e))return!1;switch(i(e)){case"AsyncFunction":case"GeneratorFunction":case"AsyncGeneratorFunction":return!1}try{return p||!!d(f,l(e))}catch(e){return!0}};m.sham=!0,e.exports=!c||r((function(){var e;return h(h.call)||!h(Object)||!h((function(){e=!0}))||e}))?m:h},7987:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(8986),r=__webpack_require__(4028),o=/#|\.prototype\./,i=function(e,t){var o=l[a(e)];return o===u||o!==s&&(r(t)?n(t):!!t)},a=i.normalize=function(e){return String(e).replace(o,".").toLowerCase()},l=i.data={},s=i.NATIVE="N",u=i.POLYFILL="P";e.exports=i},7126:e=>{"use strict";e.exports=function(e){return null==e}},1355:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(4028),r=__webpack_require__(805),o=r.all;e.exports=r.IS_HTMLDDA?function(e){return"object"==typeof e?null!==e:n(e)||e===o}:function(e){return"object"==typeof e?null!==e:n(e)}},8546:e=>{"use strict";e.exports=!1},1035:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(1355),r=__webpack_require__(9523),o=__webpack_require__(191)("match");e.exports=function(e){var t;return n(e)&&(void 0!==(t=e[o])?!!t:"RegExp"===r(e))}},4505:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(3155),r=__webpack_require__(4028),o=__webpack_require__(7357),i=__webpack_require__(8590),a=Object;e.exports=i?function(e){return"symbol"==typeof e}:function(e){var t=n("Symbol");return r(t)&&o(t.prototype,a(e))}},8640:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(391),r=__webpack_require__(9425),o=__webpack_require__(2546),i=__webpack_require__(4160),a=__webpack_require__(2882),l=__webpack_require__(4117),s=__webpack_require__(7357),u=__webpack_require__(2057),c=__webpack_require__(6897),f=__webpack_require__(4681),d=TypeError,p=function(e,t){this.stopped=e,this.result=t},h=p.prototype;e.exports=function(e,t,m){var y,v,g,b,w,x,S,E=m&&m.that,k=!(!m||!m.AS_ENTRIES),T=!(!m||!m.IS_RECORD),C=!(!m||!m.IS_ITERATOR),I=!(!m||!m.INTERRUPTED),_=n(t,E),L=function(e){return y&&f(y,"normal",e),new p(!0,e)},O=function(e){return k?(o(e),I?_(e[0],e[1],L):_(e[0],e[1])):I?_(e,L):_(e)};if(T)y=e.iterator;else if(C)y=e;else{if(!(v=c(e)))throw d(i(e)+" is not iterable");if(a(v)){for(g=0,b=l(e);b>g;g++)if((w=O(e[g]))&&s(h,w))return w;return new p(!1)}y=u(e,v)}for(x=T?e.next:y.next;!(S=r(x,y)).done;){try{w=O(S.value)}catch(e){f(y,"throw",e)}if("object"==typeof w&&w&&s(h,w))return w}return new p(!1)}},4681:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(9425),r=__webpack_require__(2546),o=__webpack_require__(4040);e.exports=function(e,t,i){var a,l;r(e);try{if(!(a=o(e,"return"))){if("throw"===t)throw i;return i}a=n(a,e)}catch(e){l=!0,a=e}if("throw"===t)throw i;if(l)throw a;return r(a),i}},2480:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(798).IteratorPrototype,r=__webpack_require__(3250),o=__webpack_require__(1111),i=__webpack_require__(7747),a=__webpack_require__(9953),l=function(){return this};e.exports=function(e,t,s,u){var c=t+" Iterator";return e.prototype=r(n,{next:o(+!u,s)}),i(e,c,!1,!0),a[c]=l,e}},3338:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(4635),r=__webpack_require__(9425),o=__webpack_require__(8546),i=__webpack_require__(7765),a=__webpack_require__(4028),l=__webpack_require__(2480),s=__webpack_require__(5783),u=__webpack_require__(5466),c=__webpack_require__(7747),f=__webpack_require__(2775),d=__webpack_require__(3068),p=__webpack_require__(191),h=__webpack_require__(9953),m=__webpack_require__(798),y=i.PROPER,v=i.CONFIGURABLE,g=m.IteratorPrototype,b=m.BUGGY_SAFARI_ITERATORS,w=p("iterator"),x="keys",S="values",E="entries",k=function(){return this};e.exports=function(e,t,i,p,m,T,C){l(i,t,p);var I,_,L,O=function(e){if(e===m&&M)return M;if(!b&&e&&e in A)return A[e];switch(e){case x:case S:case E:return function(){return new i(this,e)}}return function(){return new i(this)}},P=t+" Iterator",N=!1,A=e.prototype,R=A[w]||A["@@iterator"]||m&&A[m],M=!b&&R||O(m),D="Array"===t&&A.entries||R;if(D&&(I=s(D.call(new e)))!==Object.prototype&&I.next&&(o||s(I)===g||(u?u(I,g):a(I[w])||d(I,w,k)),c(I,P,!0,!0),o&&(h[P]=k)),y&&m===S&&R&&R.name!==S&&(!o&&v?f(A,"name",S):(N=!0,M=function(){return r(R,this)})),m)if(_={values:O(S),keys:T?M:O(x),entries:O(E)},C)for(L in _)(b||N||!(L in A))&&d(A,L,_[L]);else n({target:t,proto:!0,forced:b||N},_);return o&&!C||A[w]===M||d(A,w,M,{name:m}),h[t]=M,_}},798:(e,t,__webpack_require__)=>{"use strict";var n,r,o,i=__webpack_require__(8986),a=__webpack_require__(4028),l=__webpack_require__(1355),s=__webpack_require__(3250),u=__webpack_require__(5783),c=__webpack_require__(3068),f=__webpack_require__(191),d=__webpack_require__(8546),p=f("iterator"),h=!1;[].keys&&("next"in(o=[].keys())?(r=u(u(o)))!==Object.prototype&&(n=r):h=!0),!l(n)||i((function(){var e={};return n[p].call(e)!==e}))?n={}:d&&(n=s(n)),a(n[p])||c(n,p,(function(){return this})),e.exports={IteratorPrototype:n,BUGGY_SAFARI_ITERATORS:h}},9953:e=>{"use strict";e.exports={}},4117:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(9375);e.exports=function(e){return n(e.length)}},3608:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(9913),r=__webpack_require__(8986),o=__webpack_require__(4028),i=__webpack_require__(8511),a=__webpack_require__(2115),l=__webpack_require__(7765).CONFIGURABLE,s=__webpack_require__(6169),u=__webpack_require__(8045),c=u.enforce,f=u.get,d=String,p=Object.defineProperty,h=n("".slice),m=n("".replace),y=n([].join),v=a&&!r((function(){return 8!==p((function(){}),"length",{value:8}).length})),g=String(String).split("String"),b=e.exports=function(e,t,n){"Symbol("===h(d(t),0,7)&&(t="["+m(d(t),/^Symbol\(([^)]*)\)/,"$1")+"]"),n&&n.getter&&(t="get "+t),n&&n.setter&&(t="set "+t),(!i(e,"name")||l&&e.name!==t)&&(a?p(e,"name",{value:t,configurable:!0}):e.name=t),v&&n&&i(n,"arity")&&e.length!==n.arity&&p(e,"length",{value:n.arity});try{n&&i(n,"constructor")&&n.constructor?a&&p(e,"prototype",{writable:!1}):e.prototype&&(e.prototype=void 0)}catch(e){}var r=c(e);return i(r,"source")||(r.source=y(g,"string"==typeof t?t:"")),e};Function.prototype.toString=b((function(){return o(this)&&f(this).source||s(this)}),"toString")},1916:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(9913),r=Map.prototype;e.exports={Map,set:n(r.set),get:n(r.get),has:n(r.has),remove:n(r.delete),proto:r}},9309:e=>{"use strict";var t=Math.ceil,n=Math.floor;e.exports=Math.trunc||function(e){var r=+e;return(r>0?n:t)(r)}},5328:(e,t,__webpack_require__)=>{"use strict";var n,r,o,i,a,l=__webpack_require__(2022),s=__webpack_require__(391),u=__webpack_require__(6213).f,c=__webpack_require__(6416).set,f=__webpack_require__(7278),d=__webpack_require__(649),p=__webpack_require__(8525),h=__webpack_require__(2054),m=__webpack_require__(9456),y=l.MutationObserver||l.WebKitMutationObserver,v=l.document,g=l.process,b=l.Promise,w=u(l,"queueMicrotask"),x=w&&w.value;if(!x){var S=new f,E=function(){var e,t;for(m&&(e=g.domain)&&e.exit();t=S.get();)try{t()}catch(e){throw S.head&&n(),e}e&&e.enter()};d||m||h||!y||!v?!p&&b&&b.resolve?((i=b.resolve(void 0)).constructor=b,a=s(i.then,i),n=function(){a(E)}):m?n=function(){g.nextTick(E)}:(c=s(c,l),n=function(){c(E)}):(r=!0,o=v.createTextNode(""),new y(E).observe(o,{characterData:!0}),n=function(){o.data=r=!r}),x=function(e){S.head||n(),S.add(e)}}e.exports=x},7892:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(6173),r=TypeError,o=function(e){var t,o;this.promise=new e((function(e,n){if(void 0!==t||void 0!==o)throw r("Bad Promise constructor");t=e,o=n})),this.resolve=n(t),this.reject=n(o)};e.exports.f=function(e){return new o(e)}},7911:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(1035),r=TypeError;e.exports=function(e){if(n(e))throw r("The method doesn't accept regular expressions");return e}},3250:(e,t,__webpack_require__)=>{"use strict";var n,r=__webpack_require__(2546),o=__webpack_require__(3330),i=__webpack_require__(6100),a=__webpack_require__(7307),l=__webpack_require__(6419),s=__webpack_require__(2985),u=__webpack_require__(7186),c="prototype",f="script",d=u("IE_PROTO"),p=function(){},h=function(e){return"<"+f+">"+e+""},m=function(e){e.write(h("")),e.close();var t=e.parentWindow.Object;return e=null,t},y=function(){try{n=new ActiveXObject("htmlfile")}catch(e){}var e,t,r;y="undefined"!=typeof document?document.domain&&n?m(n):(t=s("iframe"),r="java"+f+":",t.style.display="none",l.appendChild(t),t.src=String(r),(e=t.contentWindow.document).open(),e.write(h("document.F=Object")),e.close(),e.F):m(n);for(var o=i.length;o--;)delete y[c][i[o]];return y()};a[d]=!0,e.exports=Object.create||function(e,t){var n;return null!==e?(p[c]=r(e),n=new p,p[c]=null,n[d]=e):n=y(),void 0===t?n:o.f(n,t)}},3330:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(2115),r=__webpack_require__(1330),o=__webpack_require__(3087),i=__webpack_require__(2546),a=__webpack_require__(8326),l=__webpack_require__(5932);t.f=n&&!r?Object.defineProperties:function(e,t){i(e);for(var n,r=a(t),s=l(t),u=s.length,c=0;u>c;)o.f(e,n=s[c++],r[n]);return e}},3087:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(2115),r=__webpack_require__(2159),o=__webpack_require__(1330),i=__webpack_require__(2546),a=__webpack_require__(9127),l=TypeError,s=Object.defineProperty,u=Object.getOwnPropertyDescriptor,c="enumerable",f="configurable",d="writable";t.f=n?o?function(e,t,n){if(i(e),t=a(t),i(n),"function"==typeof e&&"prototype"===t&&"value"in n&&d in n&&!n[d]){var r=u(e,t);r&&r[d]&&(e[t]=n.value,n={configurable:f in n?n[f]:r[f],enumerable:c in n?n[c]:r[c],writable:!1})}return s(e,t,n)}:s:function(e,t,n){if(i(e),t=a(t),i(n),r)try{return s(e,t,n)}catch(e){}if("get"in n||"set"in n)throw l("Accessors not supported");return"value"in n&&(e[t]=n.value),e}},6213:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(2115),r=__webpack_require__(9425),o=__webpack_require__(3659),i=__webpack_require__(1111),a=__webpack_require__(8326),l=__webpack_require__(9127),s=__webpack_require__(8511),u=__webpack_require__(2159),c=Object.getOwnPropertyDescriptor;t.f=n?c:function(e,t){if(e=a(e),t=l(t),u)try{return c(e,t)}catch(e){}if(s(e,t))return i(!r(o.f,e,t),e[t])}},1662:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(7282),r=__webpack_require__(6100).concat("length","prototype");t.f=Object.getOwnPropertyNames||function(e){return n(e,r)}},1711:(e,t)=>{"use strict";t.f=Object.getOwnPropertySymbols},5783:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(8511),r=__webpack_require__(4028),o=__webpack_require__(7137),i=__webpack_require__(7186),a=__webpack_require__(8538),l=i("IE_PROTO"),s=Object,u=s.prototype;e.exports=a?s.getPrototypeOf:function(e){var t=o(e);if(n(t,l))return t[l];var i=t.constructor;return r(i)&&t instanceof i?i.prototype:t instanceof s?u:null}},7357:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(9913);e.exports=n({}.isPrototypeOf)},7282:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(9913),r=__webpack_require__(8511),o=__webpack_require__(8326),i=__webpack_require__(8035).indexOf,a=__webpack_require__(7307),l=n([].push);e.exports=function(e,t){var n,s=o(e),u=0,c=[];for(n in s)!r(a,n)&&r(s,n)&&l(c,n);for(;t.length>u;)r(s,n=t[u++])&&(~i(c,n)||l(c,n));return c}},5932:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(7282),r=__webpack_require__(6100);e.exports=Object.keys||function(e){return n(e,r)}},3659:(e,t)=>{"use strict";var n={}.propertyIsEnumerable,r=Object.getOwnPropertyDescriptor,o=r&&!n.call({1:2},1);t.f=o?function(e){var t=r(this,e);return!!t&&t.enumerable}:n},5466:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(9416),r=__webpack_require__(2546),o=__webpack_require__(1684);e.exports=Object.setPrototypeOf||("__proto__"in{}?function(){var e,t=!1,i={};try{(e=n(Object.prototype,"__proto__","set"))(i,[]),t=i instanceof Array}catch(e){}return function(n,i){return r(n),o(i),t?e(n,i):n.__proto__=i,n}}():void 0)},5954:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(7568),r=__webpack_require__(2814);e.exports=n?{}.toString:function(){return"[object "+r(this)+"]"}},3126:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(9425),r=__webpack_require__(4028),o=__webpack_require__(1355),i=TypeError;e.exports=function(e,t){var a,l;if("string"===t&&r(a=e.toString)&&!o(l=n(a,e)))return l;if(r(a=e.valueOf)&&!o(l=n(a,e)))return l;if("string"!==t&&r(a=e.toString)&&!o(l=n(a,e)))return l;throw i("Can't convert object to primitive value")}},1537:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(3155),r=__webpack_require__(9913),o=__webpack_require__(1662),i=__webpack_require__(1711),a=__webpack_require__(2546),l=r([].concat);e.exports=n("Reflect","ownKeys")||function(e){var t=o.f(a(e)),n=i.f;return n?l(t,n(e)):t}},3034:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(2022);e.exports=n},5786:e=>{"use strict";e.exports=function(e){try{return{error:!1,value:e()}}catch(e){return{error:!0,value:e}}}},3494:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(2022),r=__webpack_require__(3183),o=__webpack_require__(4028),i=__webpack_require__(7987),a=__webpack_require__(6169),l=__webpack_require__(191),s=__webpack_require__(5048),u=__webpack_require__(5835),c=__webpack_require__(8546),f=__webpack_require__(714),d=r&&r.prototype,p=l("species"),h=!1,m=o(n.PromiseRejectionEvent),y=i("Promise",(function(){var e=a(r),t=e!==String(r);if(!t&&66===f)return!0;if(c&&(!d.catch||!d.finally))return!0;if(!f||f<51||!/native code/.test(e)){var n=new r((function(e){e(1)})),o=function(e){e((function(){}),(function(){}))};if((n.constructor={})[p]=o,!(h=n.then((function(){}))instanceof o))return!0}return!t&&(s||u)&&!m}));e.exports={CONSTRUCTOR:y,REJECTION_EVENT:m,SUBCLASSING:h}},3183:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(2022);e.exports=n.Promise},9062:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(2546),r=__webpack_require__(1355),o=__webpack_require__(7892);e.exports=function(e,t){if(n(e),r(t)&&t.constructor===e)return t;var i=o.f(e);return(0,i.resolve)(t),i.promise}},2208:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(3183),r=__webpack_require__(1269),o=__webpack_require__(3494).CONSTRUCTOR;e.exports=o||!r((function(e){n.all(e).then(void 0,(function(){}))}))},7278:e=>{"use strict";var t=function(){this.head=null,this.tail=null};t.prototype={add:function(e){var t={item:e,next:null},n=this.tail;n?n.next=t:this.head=t,this.tail=t},get:function(){var e=this.head;if(e)return null===(this.head=e.next)&&(this.tail=null),e.item}},e.exports=t},1591:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(7126),r=TypeError;e.exports=function(e){if(n(e))throw r("Can't call method on "+e);return e}},2343:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(3155),r=__webpack_require__(9718),o=__webpack_require__(191),i=__webpack_require__(2115),a=o("species");e.exports=function(e){var t=n(e);i&&t&&!t[a]&&r(t,a,{configurable:!0,get:function(){return this}})}},7747:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(3087).f,r=__webpack_require__(8511),o=__webpack_require__(191)("toStringTag");e.exports=function(e,t,i){e&&!i&&(e=e.prototype),e&&!r(e,o)&&n(e,o,{configurable:!0,value:t})}},7186:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(7905),r=__webpack_require__(232),o=n("keys");e.exports=function(e){return o[e]||(o[e]=r(e))}},3349:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(2022),r=__webpack_require__(7210),o="__core-js_shared__",i=n[o]||r(o,{});e.exports=i},7905:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(8546),r=__webpack_require__(3349);(e.exports=function(e,t){return r[e]||(r[e]=void 0!==t?t:{})})("versions",[]).push({version:"3.32.2",mode:n?"pure":"global",copyright:"Š 2014-2023 Denis Pushkarev (zloirock.ru)",license:"https://github.com/zloirock/core-js/blob/v3.32.2/LICENSE",source:"https://github.com/zloirock/core-js"})},3820:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(2546),r=__webpack_require__(2023),o=__webpack_require__(7126),i=__webpack_require__(191)("species");e.exports=function(e,t){var a,l=n(e).constructor;return void 0===l||o(a=n(l)[i])?t:r(a)}},8402:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(9913),r=__webpack_require__(5982),o=__webpack_require__(4170),i=__webpack_require__(1591),a=n("".charAt),l=n("".charCodeAt),s=n("".slice),u=function(e){return function(t,n){var u,c,f=o(i(t)),d=r(n),p=f.length;return d<0||d>=p?e?"":void 0:(u=l(f,d))<55296||u>56319||d+1===p||(c=l(f,d+1))<56320||c>57343?e?a(f,d):u:e?s(f,d,d+2):c-56320+(u-55296<<10)+65536}};e.exports={codeAt:u(!1),charAt:u(!0)}},6263:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(714),r=__webpack_require__(8986),o=__webpack_require__(2022).String;e.exports=!!Object.getOwnPropertySymbols&&!r((function(){var e=Symbol("symbol detection");return!o(e)||!(Object(e)instanceof Symbol)||!Symbol.sham&&n&&n<41}))},6416:(e,t,__webpack_require__)=>{"use strict";var n,r,o,i,a=__webpack_require__(2022),l=__webpack_require__(584),s=__webpack_require__(391),u=__webpack_require__(4028),c=__webpack_require__(8511),f=__webpack_require__(8986),d=__webpack_require__(6419),p=__webpack_require__(3141),h=__webpack_require__(2985),m=__webpack_require__(4246),y=__webpack_require__(649),v=__webpack_require__(9456),g=a.setImmediate,b=a.clearImmediate,w=a.process,x=a.Dispatch,S=a.Function,E=a.MessageChannel,k=a.String,T=0,C={},I="onreadystatechange";f((function(){n=a.location}));var _=function(e){if(c(C,e)){var t=C[e];delete C[e],t()}},L=function(e){return function(){_(e)}},O=function(e){_(e.data)},P=function(e){a.postMessage(k(e),n.protocol+"//"+n.host)};g&&b||(g=function(e){m(arguments.length,1);var t=u(e)?e:S(e),n=p(arguments,1);return C[++T]=function(){l(t,void 0,n)},r(T),T},b=function(e){delete C[e]},v?r=function(e){w.nextTick(L(e))}:x&&x.now?r=function(e){x.now(L(e))}:E&&!y?(i=(o=new E).port2,o.port1.onmessage=O,r=s(i.postMessage,i)):a.addEventListener&&u(a.postMessage)&&!a.importScripts&&n&&"file:"!==n.protocol&&!f(P)?(r=P,a.addEventListener("message",O,!1)):r=I in h("script")?function(e){d.appendChild(h("script"))[I]=function(){d.removeChild(this),_(e)}}:function(e){setTimeout(L(e),0)}),e.exports={set:g,clear:b}},6593:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(5982),r=Math.max,o=Math.min;e.exports=function(e,t){var i=n(e);return i<0?r(i+t,0):o(i,t)}},8326:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(4032),r=__webpack_require__(1591);e.exports=function(e){return n(r(e))}},5982:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(9309);e.exports=function(e){var t=+e;return t!=t||0===t?0:n(t)}},9375:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(5982),r=Math.min;e.exports=function(e){return e>0?r(n(e),9007199254740991):0}},7137:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(1591),r=Object;e.exports=function(e){return r(n(e))}},675:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(9425),r=__webpack_require__(1355),o=__webpack_require__(4505),i=__webpack_require__(4040),a=__webpack_require__(3126),l=__webpack_require__(191),s=TypeError,u=l("toPrimitive");e.exports=function(e,t){if(!r(e)||o(e))return e;var l,c=i(e,u);if(c){if(void 0===t&&(t="default"),l=n(c,e,t),!r(l)||o(l))return l;throw s("Can't convert object to primitive value")}return void 0===t&&(t="number"),a(e,t)}},9127:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(675),r=__webpack_require__(4505);e.exports=function(e){var t=n(e,"string");return r(t)?t:t+""}},7568:(e,t,__webpack_require__)=>{"use strict";var n={};n[__webpack_require__(191)("toStringTag")]="z",e.exports="[object z]"===String(n)},4170:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(2814),r=String;e.exports=function(e){if("Symbol"===n(e))throw TypeError("Cannot convert a Symbol value to a string");return r(e)}},4160:e=>{"use strict";var t=String;e.exports=function(e){try{return t(e)}catch(e){return"Object"}}},232:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(9913),r=0,o=Math.random(),i=n(1..toString);e.exports=function(e){return"Symbol("+(void 0===e?"":e)+")_"+i(++r+o,36)}},8590:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(6263);e.exports=n&&!Symbol.sham&&"symbol"==typeof Symbol.iterator},1330:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(2115),r=__webpack_require__(8986);e.exports=n&&r((function(){return 42!==Object.defineProperty((function(){}),"prototype",{value:42,writable:!1}).prototype}))},4246:e=>{"use strict";var t=TypeError;e.exports=function(e,n){if(e{"use strict";var n=__webpack_require__(2022),r=__webpack_require__(4028),o=n.WeakMap;e.exports=r(o)&&/native code/.test(String(o))},191:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(2022),r=__webpack_require__(7905),o=__webpack_require__(8511),i=__webpack_require__(232),a=__webpack_require__(6263),l=__webpack_require__(8590),s=n.Symbol,u=r("wks"),c=l?s.for||s:s&&s.withoutSetter||i;e.exports=function(e){return o(u,e)||(u[e]=a&&o(s,e)?s[e]:c("Symbol."+e)),u[e]}},7245:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(4635),r=__webpack_require__(7137),o=__webpack_require__(4117),i=__webpack_require__(5982),a=__webpack_require__(7512);n({target:"Array",proto:!0},{at:function(e){var t=r(this),n=o(t),a=i(e),l=a>=0?a:n+a;return l<0||l>=n?void 0:t[l]}}),a("at")},8033:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(4635),r=__webpack_require__(8986),o=__webpack_require__(5351),i=__webpack_require__(1355),a=__webpack_require__(7137),l=__webpack_require__(4117),s=__webpack_require__(1912),u=__webpack_require__(9402),c=__webpack_require__(4842),f=__webpack_require__(1665),d=__webpack_require__(191),p=__webpack_require__(714),h=d("isConcatSpreadable"),m=p>=51||!r((function(){var e=[];return e[h]=!1,e.concat()[0]!==e})),y=function(e){if(!i(e))return!1;var t=e[h];return void 0!==t?!!t:o(e)};n({target:"Array",proto:!0,arity:1,forced:!m||!f("concat")},{concat:function(e){var t,n,r,o,i,f=a(this),d=c(f,0),p=0;for(t=-1,r=arguments.length;t{"use strict";var n=__webpack_require__(4635),r=__webpack_require__(1843),o=__webpack_require__(7512);n({target:"Array",proto:!0},{copyWithin:r}),o("copyWithin")},1388:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(4635),r=__webpack_require__(5883).every;n({target:"Array",proto:!0,forced:!__webpack_require__(4694)("every")},{every:function(e){return r(this,e,arguments.length>1?arguments[1]:void 0)}})},3040:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(4635),r=__webpack_require__(3750),o=__webpack_require__(7512);n({target:"Array",proto:!0},{fill:r}),o("fill")},1725:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(4635),r=__webpack_require__(5883).filter;n({target:"Array",proto:!0,forced:!__webpack_require__(1665)("filter")},{filter:function(e){return r(this,e,arguments.length>1?arguments[1]:void 0)}})},3143:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(4635),r=__webpack_require__(5883).findIndex,o=__webpack_require__(7512),i="findIndex",a=!0;i in[]&&Array(1)[i]((function(){a=!1})),n({target:"Array",proto:!0,forced:a},{findIndex:function(e){return r(this,e,arguments.length>1?arguments[1]:void 0)}}),o(i)},2914:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(4635),r=__webpack_require__(2161).findLastIndex,o=__webpack_require__(7512);n({target:"Array",proto:!0},{findLastIndex:function(e){return r(this,e,arguments.length>1?arguments[1]:void 0)}}),o("findLastIndex")},3805:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(4635),r=__webpack_require__(2161).findLast,o=__webpack_require__(7512);n({target:"Array",proto:!0},{findLast:function(e){return r(this,e,arguments.length>1?arguments[1]:void 0)}}),o("findLast")},8342:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(4635),r=__webpack_require__(5883).find,o=__webpack_require__(7512),i="find",a=!0;i in[]&&Array(1)[i]((function(){a=!1})),n({target:"Array",proto:!0,forced:a},{find:function(e){return r(this,e,arguments.length>1?arguments[1]:void 0)}}),o(i)},5036:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(4635),r=__webpack_require__(7484),o=__webpack_require__(6173),i=__webpack_require__(7137),a=__webpack_require__(4117),l=__webpack_require__(4842);n({target:"Array",proto:!0},{flatMap:function(e){var t,n=i(this),s=a(n);return o(e),(t=l(n,0)).length=r(t,n,n,s,0,1,e,arguments.length>1?arguments[1]:void 0),t}})},7195:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(4635),r=__webpack_require__(7484),o=__webpack_require__(7137),i=__webpack_require__(4117),a=__webpack_require__(5982),l=__webpack_require__(4842);n({target:"Array",proto:!0},{flat:function(){var e=arguments.length?arguments[0]:void 0,t=o(this),n=i(t),s=l(t,0);return s.length=r(s,t,t,n,0,void 0===e?1:a(e)),s}})},4780:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(4635),r=__webpack_require__(3609);n({target:"Array",proto:!0,forced:[].forEach!==r},{forEach:r})},5040:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(4635),r=__webpack_require__(5375);n({target:"Array",stat:!0,forced:!__webpack_require__(1269)((function(e){Array.from(e)}))},{from:r})},5099:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(4635),r=__webpack_require__(8035).includes,o=__webpack_require__(8986),i=__webpack_require__(7512);n({target:"Array",proto:!0,forced:o((function(){return!Array(1).includes()}))},{includes:function(e){return r(this,e,arguments.length>1?arguments[1]:void 0)}}),i("includes")},6550:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(4635),r=__webpack_require__(3505),o=__webpack_require__(8035).indexOf,i=__webpack_require__(4694),a=r([].indexOf),l=!!a&&1/a([1],1,-0)<0;n({target:"Array",proto:!0,forced:l||!i("indexOf")},{indexOf:function(e){var t=arguments.length>1?arguments[1]:void 0;return l?a(this,e,t)||0:o(this,e,t)}})},9129:(e,t,__webpack_require__)=>{"use strict";__webpack_require__(4635)({target:"Array",stat:!0},{isArray:__webpack_require__(5351)})},8490:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(8326),r=__webpack_require__(7512),o=__webpack_require__(9953),i=__webpack_require__(8045),a=__webpack_require__(3087).f,l=__webpack_require__(3338),s=__webpack_require__(251),u=__webpack_require__(8546),c=__webpack_require__(2115),f="Array Iterator",d=i.set,p=i.getterFor(f);e.exports=l(Array,"Array",(function(e,t){d(this,{type:f,target:n(e),index:0,kind:t})}),(function(){var e=p(this),t=e.target,n=e.kind,r=e.index++;if(!t||r>=t.length)return e.target=void 0,s(void 0,!0);switch(n){case"keys":return s(r,!1);case"values":return s(t[r],!1)}return s([r,t[r]],!1)}),"values");var h=o.Arguments=o.Array;if(r("keys"),r("values"),r("entries"),!u&&c&&"values"!==h.name)try{a(h,"name",{value:"values"})}catch(e){}},4668:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(4635),r=__webpack_require__(9913),o=__webpack_require__(4032),i=__webpack_require__(8326),a=__webpack_require__(4694),l=r([].join);n({target:"Array",proto:!0,forced:o!==Object||!a("join",",")},{join:function(e){return l(i(this),void 0===e?",":e)}})},4803:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(4635),r=__webpack_require__(4687);n({target:"Array",proto:!0,forced:r!==[].lastIndexOf},{lastIndexOf:r})},5412:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(4635),r=__webpack_require__(5883).map;n({target:"Array",proto:!0,forced:!__webpack_require__(1665)("map")},{map:function(e){return r(this,e,arguments.length>1?arguments[1]:void 0)}})},517:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(4635),r=__webpack_require__(8986),o=__webpack_require__(8449),i=__webpack_require__(9402),a=Array;n({target:"Array",stat:!0,forced:r((function(){function e(){}return!(a.of.call(e)instanceof e)}))},{of:function(){for(var e=0,t=arguments.length,n=new(o(this)?this:a)(t);t>e;)i(n,e,arguments[e++]);return n.length=t,n}})},8960:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(4635),r=__webpack_require__(7137),o=__webpack_require__(4117),i=__webpack_require__(7761),a=__webpack_require__(1912);n({target:"Array",proto:!0,arity:1,forced:__webpack_require__(8986)((function(){return 4294967297!==[].push.call({length:4294967296},1)}))||!function(){try{Object.defineProperty([],"length",{writable:!1}).push()}catch(e){return e instanceof TypeError}}()},{push:function(e){var t=r(this),n=o(t),l=arguments.length;a(n+l);for(var s=0;s{"use strict";var n=__webpack_require__(4635),r=__webpack_require__(9906).right,o=__webpack_require__(4694),i=__webpack_require__(714);n({target:"Array",proto:!0,forced:!__webpack_require__(9456)&&i>79&&i<83||!o("reduceRight")},{reduceRight:function(e){return r(this,e,arguments.length,arguments.length>1?arguments[1]:void 0)}})},9010:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(4635),r=__webpack_require__(9906).left,o=__webpack_require__(4694),i=__webpack_require__(714);n({target:"Array",proto:!0,forced:!__webpack_require__(9456)&&i>79&&i<83||!o("reduce")},{reduce:function(e){var t=arguments.length;return r(this,e,t,t>1?arguments[1]:void 0)}})},2590:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(4635),r=__webpack_require__(9913),o=__webpack_require__(5351),i=r([].reverse),a=[1,2];n({target:"Array",proto:!0,forced:String(a)===String(a.reverse())},{reverse:function(){return o(this)&&(this.length=this.length),i(this)}})},6516:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(4635),r=__webpack_require__(5351),o=__webpack_require__(8449),i=__webpack_require__(1355),a=__webpack_require__(6593),l=__webpack_require__(4117),s=__webpack_require__(8326),u=__webpack_require__(9402),c=__webpack_require__(191),f=__webpack_require__(1665),d=__webpack_require__(3141),p=f("slice"),h=c("species"),m=Array,y=Math.max;n({target:"Array",proto:!0,forced:!p},{slice:function(e,t){var n,c,f,p=s(this),v=l(p),g=a(e,v),b=a(void 0===t?v:t,v);if(r(p)&&(n=p.constructor,(o(n)&&(n===m||r(n.prototype))||i(n)&&null===(n=n[h]))&&(n=void 0),n===m||void 0===n))return d(p,g,b);for(c=new(void 0===n?m:n)(y(b-g,0)),f=0;g{"use strict";var n=__webpack_require__(4635),r=__webpack_require__(5883).some;n({target:"Array",proto:!0,forced:!__webpack_require__(4694)("some")},{some:function(e){return r(this,e,arguments.length>1?arguments[1]:void 0)}})},2934:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(4635),r=__webpack_require__(9913),o=__webpack_require__(6173),i=__webpack_require__(7137),a=__webpack_require__(4117),l=__webpack_require__(9850),s=__webpack_require__(4170),u=__webpack_require__(8986),c=__webpack_require__(1929),f=__webpack_require__(4694),d=__webpack_require__(3454),p=__webpack_require__(8633),h=__webpack_require__(714),m=__webpack_require__(720),y=[],v=r(y.sort),g=r(y.push),b=u((function(){y.sort(void 0)})),w=u((function(){y.sort(null)})),x=f("sort"),S=!u((function(){if(h)return h<70;if(!(d&&d>3)){if(p)return!0;if(m)return m<603;var e,t,n,r,o="";for(e=65;e<76;e++){switch(t=String.fromCharCode(e),e){case 66:case 69:case 70:case 72:n=3;break;case 68:case 71:n=4;break;default:n=2}for(r=0;r<47;r++)y.push({k:t+r,v:n})}for(y.sort((function(e,t){return t.v-e.v})),r=0;rs(n)?1:-1}}(e)),n=a(u),r=0;r{"use strict";__webpack_require__(2343)("Array")},2345:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(4635),r=__webpack_require__(7137),o=__webpack_require__(6593),i=__webpack_require__(5982),a=__webpack_require__(4117),l=__webpack_require__(7761),s=__webpack_require__(1912),u=__webpack_require__(4842),c=__webpack_require__(9402),f=__webpack_require__(9850),d=__webpack_require__(1665)("splice"),p=Math.max,h=Math.min;n({target:"Array",proto:!0,forced:!d},{splice:function(e,t){var n,d,m,y,v,g,b=r(this),w=a(b),x=o(e,w),S=arguments.length;for(0===S?n=d=0:1===S?(n=0,d=w-x):(n=S-2,d=h(p(i(t),0),w-x)),s(w+n-d),m=u(b,d),y=0;yw-d+n;y--)f(b,y-1)}else if(n>d)for(y=w-d;y>x;y--)g=y+n-1,(v=y+d-1)in b?b[g]=b[v]:f(b,g);for(y=0;y{"use strict";var n=__webpack_require__(4635),r=__webpack_require__(1136),o=__webpack_require__(8326),i=__webpack_require__(7512),a=Array;n({target:"Array",proto:!0},{toReversed:function(){return r(o(this),a)}}),i("toReversed")},3115:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(4635),r=__webpack_require__(9913),o=__webpack_require__(6173),i=__webpack_require__(8326),a=__webpack_require__(4632),l=__webpack_require__(3628),s=__webpack_require__(7512),u=Array,c=r(l("Array").sort);n({target:"Array",proto:!0},{toSorted:function(e){void 0!==e&&o(e);var t=i(this),n=a(u,t);return c(n,e)}}),s("toSorted")},3456:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(4635),r=__webpack_require__(7512),o=__webpack_require__(1912),i=__webpack_require__(4117),a=__webpack_require__(6593),l=__webpack_require__(8326),s=__webpack_require__(5982),u=Array,c=Math.max,f=Math.min;n({target:"Array",proto:!0},{toSpliced:function(e,t){var n,r,d,p,h=l(this),m=i(h),y=a(e,m),v=arguments.length,g=0;for(0===v?n=r=0:1===v?(n=0,r=m-y):(n=v-2,r=f(c(s(t),0),m-y)),d=o(m+n-r),p=u(d);g{"use strict";__webpack_require__(7512)("flatMap")},4540:(e,t,__webpack_require__)=>{"use strict";__webpack_require__(7512)("flat")},9238:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(4635),r=__webpack_require__(7137),o=__webpack_require__(4117),i=__webpack_require__(7761),a=__webpack_require__(9850),l=__webpack_require__(1912);n({target:"Array",proto:!0,arity:1,forced:1!==[].unshift(0)||!function(){try{Object.defineProperty([],"length",{writable:!1}).unshift()}catch(e){return e instanceof TypeError}}()},{unshift:function(e){var t=r(this),n=o(t),s=arguments.length;if(s){l(n+s);for(var u=n;u--;){var c=u+s;u in t?t[c]=t[u]:a(t,c)}for(var f=0;f{"use strict";var n=__webpack_require__(4635),r=__webpack_require__(3033),o=__webpack_require__(8326),i=Array;n({target:"Array",proto:!0},{with:function(e,t){return r(o(this),i,e,t)}})},737:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(7568),r=__webpack_require__(3068),o=__webpack_require__(5954);n||r(Object.prototype,"toString",o,{unsafe:!0})},7197:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(4635),r=__webpack_require__(9425),o=__webpack_require__(6173),i=__webpack_require__(7892),a=__webpack_require__(5786),l=__webpack_require__(8640);n({target:"Promise",stat:!0,forced:__webpack_require__(2208)},{all:function(e){var t=this,n=i.f(t),s=n.resolve,u=n.reject,c=a((function(){var n=o(t.resolve),i=[],a=0,c=1;l(e,(function(e){var o=a++,l=!1;c++,r(n,t,e).then((function(e){l||(l=!0,i[o]=e,--c||s(i))}),u)})),--c||s(i)}));return c.error&&u(c.value),n.promise}})},1395:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(4635),r=__webpack_require__(8546),o=__webpack_require__(3494).CONSTRUCTOR,i=__webpack_require__(3183),a=__webpack_require__(3155),l=__webpack_require__(4028),s=__webpack_require__(3068),u=i&&i.prototype;if(n({target:"Promise",proto:!0,forced:o,real:!0},{catch:function(e){return this.then(void 0,e)}}),!r&&l(i)){var c=a("Promise").prototype.catch;u.catch!==c&&s(u,"catch",c,{unsafe:!0})}},9761:(e,t,__webpack_require__)=>{"use strict";var n,r,o,i=__webpack_require__(4635),a=__webpack_require__(8546),l=__webpack_require__(9456),s=__webpack_require__(2022),u=__webpack_require__(9425),c=__webpack_require__(3068),f=__webpack_require__(5466),d=__webpack_require__(7747),p=__webpack_require__(2343),h=__webpack_require__(6173),m=__webpack_require__(4028),y=__webpack_require__(1355),v=__webpack_require__(9837),g=__webpack_require__(3820),b=__webpack_require__(6416).set,w=__webpack_require__(5328),x=__webpack_require__(9361),S=__webpack_require__(5786),E=__webpack_require__(7278),k=__webpack_require__(8045),T=__webpack_require__(3183),C=__webpack_require__(3494),I=__webpack_require__(7892),_="Promise",L=C.CONSTRUCTOR,O=C.REJECTION_EVENT,P=C.SUBCLASSING,N=k.getterFor(_),A=k.set,R=T&&T.prototype,M=T,D=R,j=s.TypeError,F=s.document,z=s.process,B=I.f,U=B,H=!!(F&&F.createEvent&&s.dispatchEvent),W="unhandledrejection",V=function(e){var t;return!(!y(e)||!m(t=e.then))&&t},$=function(e,t){var n,r,o,i=t.value,a=1===t.state,l=a?e.ok:e.fail,s=e.resolve,c=e.reject,f=e.domain;try{l?(a||(2===t.rejection&&G(t),t.rejection=1),!0===l?n=i:(f&&f.enter(),n=l(i),f&&(f.exit(),o=!0)),n===e.promise?c(j("Promise-chain cycle")):(r=V(n))?u(r,n,s,c):s(n)):c(i)}catch(e){f&&!o&&f.exit(),c(e)}},q=function(e,t){e.notified||(e.notified=!0,w((function(){for(var n,r=e.reactions;n=r.get();)$(n,e);e.notified=!1,t&&!e.rejection&&Q(e)})))},K=function(e,t,n){var r,o;H?((r=F.createEvent("Event")).promise=t,r.reason=n,r.initEvent(e,!1,!0),s.dispatchEvent(r)):r={promise:t,reason:n},!O&&(o=s["on"+e])?o(r):e===W&&x("Unhandled promise rejection",n)},Q=function(e){u(b,s,(function(){var t,n=e.facade,r=e.value;if(J(e)&&(t=S((function(){l?z.emit("unhandledRejection",r,n):K(W,n,r)})),e.rejection=l||J(e)?2:1,t.error))throw t.value}))},J=function(e){return 1!==e.rejection&&!e.parent},G=function(e){u(b,s,(function(){var t=e.facade;l?z.emit("rejectionHandled",t):K("rejectionhandled",t,e.value)}))},Y=function(e,t,n){return function(r){e(t,r,n)}},X=function(e,t,n){e.done||(e.done=!0,n&&(e=n),e.value=t,e.state=2,q(e,!0))},Z=function(e,t,n){if(!e.done){e.done=!0,n&&(e=n);try{if(e.facade===t)throw j("Promise can't be resolved itself");var r=V(t);r?w((function(){var n={done:!1};try{u(r,t,Y(Z,n,e),Y(X,n,e))}catch(t){X(n,t,e)}})):(e.value=t,e.state=1,q(e,!1))}catch(t){X({done:!1},t,e)}}};if(L&&(D=(M=function(e){v(this,D),h(e),u(n,this);var t=N(this);try{e(Y(Z,t),Y(X,t))}catch(e){X(t,e)}}).prototype,(n=function(e){A(this,{type:_,done:!1,notified:!1,parent:!1,reactions:new E,rejection:!1,state:0,value:void 0})}).prototype=c(D,"then",(function(e,t){var n=N(this),r=B(g(this,M));return n.parent=!0,r.ok=!m(e)||e,r.fail=m(t)&&t,r.domain=l?z.domain:void 0,0===n.state?n.reactions.add(r):w((function(){$(r,n)})),r.promise})),r=function(){var e=new n,t=N(e);this.promise=e,this.resolve=Y(Z,t),this.reject=Y(X,t)},I.f=B=function(e){return e===M||undefined===e?new r(e):U(e)},!a&&m(T)&&R!==Object.prototype)){o=R.then,P||c(R,"then",(function(e,t){var n=this;return new M((function(e,t){u(o,n,e,t)})).then(e,t)}),{unsafe:!0});try{delete R.constructor}catch(e){}f&&f(R,D)}i({global:!0,constructor:!0,wrap:!0,forced:L},{Promise:M}),d(M,_,!1,!0),p(_)},3823:(e,t,__webpack_require__)=>{"use strict";__webpack_require__(9761),__webpack_require__(7197),__webpack_require__(1395),__webpack_require__(9790),__webpack_require__(8777),__webpack_require__(9244)},9790:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(4635),r=__webpack_require__(9425),o=__webpack_require__(6173),i=__webpack_require__(7892),a=__webpack_require__(5786),l=__webpack_require__(8640);n({target:"Promise",stat:!0,forced:__webpack_require__(2208)},{race:function(e){var t=this,n=i.f(t),s=n.reject,u=a((function(){var i=o(t.resolve);l(e,(function(e){r(i,t,e).then(n.resolve,s)}))}));return u.error&&s(u.value),n.promise}})},8777:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(4635),r=__webpack_require__(9425),o=__webpack_require__(7892);n({target:"Promise",stat:!0,forced:__webpack_require__(3494).CONSTRUCTOR},{reject:function(e){var t=o.f(this);return r(t.reject,void 0,e),t.promise}})},9244:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(4635),r=__webpack_require__(3155),o=__webpack_require__(8546),i=__webpack_require__(3183),a=__webpack_require__(3494).CONSTRUCTOR,l=__webpack_require__(9062),s=r("Promise"),u=o&&!a;n({target:"Promise",stat:!0,forced:o||a},{resolve:function(e){return l(u&&this===s?i:this,e)}})},4035:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(4635),r=__webpack_require__(9913),o=__webpack_require__(7911),i=__webpack_require__(1591),a=__webpack_require__(4170),l=__webpack_require__(1813),s=r("".indexOf);n({target:"String",proto:!0,forced:!l("includes")},{includes:function(e){return!!~s(a(i(this)),a(o(e)),arguments.length>1?arguments[1]:void 0)}})},951:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(8402).charAt,r=__webpack_require__(4170),o=__webpack_require__(8045),i=__webpack_require__(3338),a=__webpack_require__(251),l="String Iterator",s=o.set,u=o.getterFor(l);i(String,"String",(function(e){s(this,{type:l,string:r(e),index:0})}),(function(){var e,t=u(this),r=t.string,o=t.index;return o>=r.length?a(void 0,!0):(e=n(r,o),t.index+=e.length,a(e,!1))}))},6488:(e,t,__webpack_require__)=>{"use strict";var n,r=__webpack_require__(4635),o=__webpack_require__(3505),i=__webpack_require__(6213).f,a=__webpack_require__(9375),l=__webpack_require__(4170),s=__webpack_require__(7911),u=__webpack_require__(1591),c=__webpack_require__(1813),f=__webpack_require__(8546),d=o("".startsWith),p=o("".slice),h=Math.min,m=c("startsWith");r({target:"String",proto:!0,forced:!!(f||m||(n=i(String.prototype,"startsWith"),!n||n.writable))&&!m},{startsWith:function(e){var t=l(u(this));s(e);var n=a(h(arguments.length>1?arguments[1]:void 0,t.length)),r=l(e);return d?d(t,r,n):p(t,n,n+r.length)===r}})},2911:(e,t,__webpack_require__)=>{"use strict";__webpack_require__(2914)},5718:(e,t,__webpack_require__)=>{"use strict";__webpack_require__(3805)},1608:(e,t,__webpack_require__)=>{"use strict";__webpack_require__(4635)({target:"Array",stat:!0},{fromAsync:__webpack_require__(6570)})},5914:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(4635),r=__webpack_require__(4694),o=__webpack_require__(7512),i=__webpack_require__(3699);n({target:"Array",proto:!0,name:"groupToMap",forced:__webpack_require__(8546)||!r("groupByToMap")},{groupByToMap:i}),o("groupByToMap")},5075:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(4635),r=__webpack_require__(6557),o=__webpack_require__(4694),i=__webpack_require__(7512);n({target:"Array",proto:!0,forced:!o("groupBy")},{groupBy:function(e){return r(this,e,arguments.length>1?arguments[1]:void 0)}}),i("groupBy")},1019:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(4635),r=__webpack_require__(7512),o=__webpack_require__(3699);n({target:"Array",proto:!0,forced:__webpack_require__(8546)},{groupToMap:o}),r("groupToMap")},3673:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(4635),r=__webpack_require__(6557),o=__webpack_require__(7512);n({target:"Array",proto:!0},{group:function(e){return r(this,e,arguments.length>1?arguments[1]:void 0)}}),o("group")},9160:(e,t,__webpack_require__)=>{"use strict";__webpack_require__(928)},223:(e,t,__webpack_require__)=>{"use strict";__webpack_require__(3115)},7757:(e,t,__webpack_require__)=>{"use strict";__webpack_require__(3456)},1029:(e,t,__webpack_require__)=>{"use strict";__webpack_require__(8118)},7226:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(1007);e.exports=n},9173:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(3522);e.exports=n},1402:(e,t,__webpack_require__)=>{"use strict";var n=__webpack_require__(990);e.exports=n},3495:e=>{"use strict";e.exports=function(e){var t=[];return t.toString=function(){return this.map((function(t){var n=function(e,t){var n=e[1]||"",r=e[3];if(!r)return n;if(t&&"function"==typeof btoa){var o=(a=r,l=btoa(unescape(encodeURIComponent(JSON.stringify(a)))),s="sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(l),"/*# ".concat(s," */")),i=r.sources.map((function(e){return"/*# sourceURL=".concat(r.sourceRoot||"").concat(e," */")}));return[n].concat(i).concat([o]).join("\n")}var a,l,s;return[n].join("\n")}(t,e);return t[2]?"@media ".concat(t[2]," {").concat(n,"}"):n})).join("")},t.i=function(e,n,r){"string"==typeof e&&(e=[[null,e,""]]);var o={};if(r)for(var i=0;i{"use strict";e.exports=function(e,t){return t||(t={}),"string"!=typeof(e=e&&e.__esModule?e.default:e)?e:(/^['"].*['"]$/.test(e)&&(e=e.slice(1,-1)),t.hash&&(e+=t.hash),/["'() \t\n]/.test(e)||t.needQuotes?'"'.concat(e.replace(/"/g,'\\"').replace(/\n/g,"\\n"),'"'):e)}},7428:e=>{"use strict";var t=Object.getOwnPropertySymbols,n=Object.prototype.hasOwnProperty,r=Object.prototype.propertyIsEnumerable;e.exports=function(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},n=0;n<10;n++)t["_"+String.fromCharCode(n)]=n;if("0123456789"!==Object.getOwnPropertyNames(t).map((function(e){return t[e]})).join(""))return!1;var r={};return"abcdefghijklmnopqrst".split("").forEach((function(e){r[e]=e})),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},r)).join("")}catch(e){return!1}}()?Object.assign:function(e,o){for(var i,a,l=function(e){if(null==e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}(e),s=1;s{"use strict";var n=__webpack_require__(6255),r=__webpack_require__(7428),o=__webpack_require__(9164);function i(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n + /// Event category + /// Timed varaible name + /// Event description + /// A metric value associated with the event + /// Task defined by an IDisposable event + public static Task CreateTaskTimedEvent(Categories category, string variable, string description = "", int? value = null) + { + if (client == null) + { + return Task.FromResult(new Dummy() as IDisposable); + } + + return client.CreateTaskTimedEvent(category, variable, description, value); + } + /// /// Creates a new command event of the given name. Start of the /// command is tracked. When the event is disposed, it's completion is tracked. @@ -160,7 +178,7 @@ public static IDisposable CreateTimedEvent(Categories category, string variable, /// Command name /// Event description /// A metric value associated with the event - /// Event as IDisposable + /// Task defined by an IDisposable event public static IDisposable TrackCommandEvent(string name, string description = "", int? value = null) { if (client == null) return new Dummy(); @@ -168,6 +186,29 @@ public static IDisposable TrackCommandEvent(string name, string description = "" return client.CreateCommandEvent(name, description, value); } + /// + /// Creates a new command event task of the given name. Start of the + /// command is tracked. When the task is completed and the event is disposed, it's completion is tracked. + /// + /// Command name + /// Event description + /// A metric value associated with the event + /// Task defined by an IDisposable event + public static Task TrackTaskCommandEvent(string name, string description = "", int? value = null) + { + if (client == null) + { + return Task.FromResult(new Dummy() as IDisposable); + } + + return client.CreateTaskCommandEvent(name, description, value); + } + + public static void EndTaskCommandEvent(Task taskEvent) + { + client?.EndEventTask(taskEvent); + } + /// /// Creates a new file operation event and tracks the start of the event. /// Disposing the returned event will record its completion. @@ -184,6 +225,25 @@ public static IDisposable TrackFileOperationEvent(string filepath, Actions opera return client.TrackFileOperationEvent(filepath, operation, size, description); } + /// + /// Creates a new task file operation event and tracks the start of the event. + /// After the task is completed, disposing the returned event will record its completion. + /// + /// File path + /// File operation + /// Size parameter + /// Event description + /// Task defined by an IDisposable event + public static Task TrackTaskFileOperationEvent(string filepath, Actions operation, int size, string description = "") + { + if (client == null) + { + return Task.FromResult(new Dummy() as IDisposable); + } + + return client.TrackTaskFileOperationEvent(filepath, operation, size, description); + } + /// /// Logs usage data /// diff --git a/src/NodeServices/IAnalyticsClient.cs b/src/NodeServices/IAnalyticsClient.cs index ff9591f40df..b0fbeb0d529 100644 --- a/src/NodeServices/IAnalyticsClient.cs +++ b/src/NodeServices/IAnalyticsClient.cs @@ -1,4 +1,5 @@ using System; +using System.Threading.Tasks; namespace Dynamo.Logging { @@ -516,6 +517,17 @@ public interface IAnalyticsClient /// Event as IDisposable IDisposable CreateTimedEvent(Categories category, string variable, string description, int? value); + /// + /// Creates a new task timed event with start state and tracks its start. + /// After task is compoleted, disposing the returnd event will record the event completion. + /// + /// Event category + /// Timed varaible name + /// Event description + /// A metric value associated with the event + /// Event as IDisposable + Task CreateTaskTimedEvent(Categories category, string variable, string description, int? value); + /// /// Creates a new command event of the given name. Start of the /// command is tracked. When the event is disposed, it's completion is tracked. @@ -526,6 +538,22 @@ public interface IAnalyticsClient /// Event as IDisposable IDisposable CreateCommandEvent(string name, string description, int? value); + /// + /// Creates a new task command event of the given name. Start of the + /// command is tracked. When the task is completed and the event is disposed, it's completion is tracked. + /// + /// Command name + /// Event description + /// A metric value associated with the event + /// Event as IDisposable + Task CreateTaskCommandEvent(string name, string description, int? value); + + /// + /// Waits for the given task to end so that it can dispose the event and + /// complete the tracking. + /// + void EndEventTask(Task taskToEnd); + /// /// Creates a new file operation event and tracks the start of the event. /// Disposing the returned event will record its completion. @@ -537,6 +565,17 @@ public interface IAnalyticsClient /// Event as IDisposable IDisposable TrackFileOperationEvent(string filepath, Actions operation, int size, string description); + /// + /// Creates a new file operation task event and tracks the start of the event. + /// After the task is completed, disposing the returned event will record its completion. + /// + /// File path + /// File operation + /// Size parameter + /// Event description + /// Event as IDisposable + Task TrackTaskFileOperationEvent(string filepath, Actions operation, int size, string description); + /// /// Logs usage data /// diff --git a/src/NodeServices/MessageEvents.cs b/src/NodeServices/MessageEvents.cs index 02dbc1afc9c..cc517341886 100644 --- a/src/NodeServices/MessageEvents.cs +++ b/src/NodeServices/MessageEvents.cs @@ -58,4 +58,17 @@ internal static void OnLoadLibraryFailure(string failureMessage, string messageB LoadLibraryFailure?.Invoke(failureMessage, messageBoxTitle); } } + /// + /// Used to log to the dynamo console from places where we do not have a reference + /// to the Dynamo console. + /// + internal static class DynamoConsoleLogger + { + public static event Action LogMessageToDynamoConsole; + + public static void OnLogMessageToDynamoConsole(string message) + { + LogMessageToDynamoConsole?.Invoke(message); + } + } } diff --git a/src/NodeServices/TraceSupport.cs b/src/NodeServices/TraceSupport.cs index 6ec5291b606..ff9e170f70f 100644 --- a/src/NodeServices/TraceSupport.cs +++ b/src/NodeServices/TraceSupport.cs @@ -1,4 +1,4 @@ -īģŋusing System; +using System; using System.Collections.Generic; using System.Runtime.Serialization; @@ -20,13 +20,13 @@ public static class TraceUtils internal const string __TEMP_REVIT_TRACE_ID = "{0459D869-0C72-447F-96D8-08A7FB92214B}-REVIT"; // ReSharper restore InconsistentNaming - [ThreadStatic] private static Dictionary _localStorageSlot; //= new Dictionary(); + [ThreadStatic] private static Dictionary _localStorageSlot; - internal static Dictionary LocalStorageSlot + internal static Dictionary LocalStorageSlot { get { - return _localStorageSlot ?? (_localStorageSlot = new Dictionary()); + return _localStorageSlot ?? (_localStorageSlot = new Dictionary()); } set { @@ -68,9 +68,9 @@ internal static void ClearAllKnownTLSKeys() /// /// /// - public static ISerializable GetTraceData(string key) + public static string GetTraceData(string key) { - ISerializable data; + string data; if (!LocalStorageSlot.TryGetValue(key, out data)) { return null; @@ -86,7 +86,7 @@ public static ISerializable GetTraceData(string key) /// /// /// - public static void SetTraceData(string key, ISerializable value) + public static void SetTraceData(string key, string value) { if (LocalStorageSlot.ContainsKey(key)) { diff --git a/src/NodeServices/Validity.cs b/src/NodeServices/Validity.cs index 153f2a470c6..aa34b815ea8 100644 --- a/src/NodeServices/Validity.cs +++ b/src/NodeServices/Validity.cs @@ -1,4 +1,4 @@ -īģŋusing System; +using System; using System.Runtime.Serialization; using System.IO; @@ -41,12 +41,6 @@ public NodeInternalException(string message) : base(message) public NodeInternalException(string message, Exception inner) : base(message, inner) { } - - protected NodeInternalException( - SerializationInfo info, - StreamingContext context) : base(info, context) - { - } } /// diff --git a/src/NodeServices/WorkspaceEvents.cs b/src/NodeServices/WorkspaceEvents.cs index 703df2eda7f..2159ac818ce 100644 --- a/src/NodeServices/WorkspaceEvents.cs +++ b/src/NodeServices/WorkspaceEvents.cs @@ -1,4 +1,4 @@ -īģŋusing System; +using System; namespace Dynamo.Events { @@ -76,6 +76,20 @@ internal static void OnWorkspaceSettingsChanged(double scaleFactor) handler(new WorkspacesSettingsChangedEventArgs(scaleFactor)); } } + + /// + /// An event raised when workspace EnableLegacyPolyCurveBehavior setting is changed. + /// + // TODO: Remove in Dynamo 4.0. + internal static event WorkspaceSettingsChangedEventHandler WorkspaceEnableLegacyPolyCurveSettingChanged; + internal static void OnWorkspaceSettingsChanged(bool enableLegacyPolyCurveBehavior) + { + var handler = WorkspaceEnableLegacyPolyCurveSettingChanged; + if (handler != null) + { + handler(new WorkspacesSettingsChangedEventArgs(enableLegacyPolyCurveBehavior)); + } + } } public class WorkspacesModificationEventArgs : EventArgs @@ -96,9 +110,23 @@ public class WorkspacesSettingsChangedEventArgs : EventArgs { public double ScaleFactor { get; private set; } + /// + /// PolyCurve normal and direction behavior has been made predictable in Dynamo 3.0 and has therefore changed. + /// This reflects whether legacy (pre-3.0) PolyCurve behavior is selected either in preference settings or in the workspace. + /// A workspace setting if exists, overrides the default preference setting. + /// + // TODO: Remove in Dynamo 4.0. + internal bool EnableLegacyPolyCurveBehavior { get; private set; } + public WorkspacesSettingsChangedEventArgs(double scaleFactor) { ScaleFactor = scaleFactor; } + + // TODO: Remove in Dynamo 4.0. + internal WorkspacesSettingsChangedEventArgs(bool enableLegacyPolyCurveBehavior) + { + EnableLegacyPolyCurveBehavior = enableLegacyPolyCurveBehavior; + } } } diff --git a/src/Notifications/NotificationCenterController.cs b/src/Notifications/NotificationCenterController.cs index b5dfeeaf65f..7a8a1dd687c 100644 --- a/src/Notifications/NotificationCenterController.cs +++ b/src/Notifications/NotificationCenterController.cs @@ -17,6 +17,7 @@ using Newtonsoft.Json; using Microsoft.Web.WebView2.Wpf; using Dynamo.Utilities; +using Dynamo.Configuration; namespace Dynamo.Notifications { @@ -161,9 +162,10 @@ private void AddNotifications(List notifications) private void RequestNotifications() { - var uri = DynamoUtilities.PathHelper.getServiceBackendAddress(this, "notificationAddress"); + var uri = DynamoUtilities.PathHelper.GetServiceBackendAddress(this, "notificationAddress"); HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri); request.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate; + request.Timeout = Configurations.NotificationsDefaultTimeOut; using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) using (Stream stream = response.GetResponseStream()) @@ -310,7 +312,7 @@ public void RefreshNotifications(string url="") { InvokeJS(@"window.RequestNotifications('" + url + "');"); } else { - InvokeJS(@"window.RequestNotifications('" + DynamoUtilities.PathHelper.getServiceBackendAddress(this, "notificationAddress") + "');"); + InvokeJS(@"window.RequestNotifications('" + DynamoUtilities.PathHelper.GetServiceBackendAddress(this, "notificationAddress") + "');"); } } } diff --git a/src/PackageDetailsViewExtension/PackageDetailsViewExtension.csproj b/src/PackageDetailsViewExtension/PackageDetailsViewExtension.csproj index e28629ad5f1..a31568f7fd5 100644 --- a/src/PackageDetailsViewExtension/PackageDetailsViewExtension.csproj +++ b/src/PackageDetailsViewExtension/PackageDetailsViewExtension.csproj @@ -14,9 +14,9 @@ false - + - + diff --git a/src/Tools/DynamoInstallDetective/DynamoInstallDetective.csproj b/src/Tools/DynamoInstallDetective/DynamoInstallDetective.csproj index dcf7be77ddc..ada6d546476 100644 --- a/src/Tools/DynamoInstallDetective/DynamoInstallDetective.csproj +++ b/src/Tools/DynamoInstallDetective/DynamoInstallDetective.csproj @@ -9,7 +9,7 @@ DynamoInstallDetective DynamoInstallDetective - + diff --git a/src/Tools/DynamoShapeManager/DynamoShapeManager.csproj b/src/Tools/DynamoShapeManager/DynamoShapeManager.csproj index e74a8741034..7c375a0d8ab 100644 --- a/src/Tools/DynamoShapeManager/DynamoShapeManager.csproj +++ b/src/Tools/DynamoShapeManager/DynamoShapeManager.csproj @@ -10,7 +10,7 @@ DynamoShapeManager true - + \ No newline at end of file diff --git a/src/Tools/Md2Html/Md2Html.csproj b/src/Tools/Md2Html/Md2Html.csproj index b75f8a2c210..da8b3cf2bd3 100644 --- a/src/Tools/Md2Html/Md2Html.csproj +++ b/src/Tools/Md2Html/Md2Html.csproj @@ -10,8 +10,6 @@ Md2Html $(OutputPath)\Md2Html\ bin\$(Platform)\$(Configuration)\ - - true false @@ -26,11 +24,11 @@ 0.22.0 - + - - - + + + - \ No newline at end of file + diff --git a/src/Tools/NodeDocumentationMarkdownGenerator/NodeDocumentationMarkdownGenerator.csproj b/src/Tools/NodeDocumentationMarkdownGenerator/NodeDocumentationMarkdownGenerator.csproj index 943e03a88cd..09c6da26df5 100644 --- a/src/Tools/NodeDocumentationMarkdownGenerator/NodeDocumentationMarkdownGenerator.csproj +++ b/src/Tools/NodeDocumentationMarkdownGenerator/NodeDocumentationMarkdownGenerator.csproj @@ -12,13 +12,13 @@ - - + + - - + + diff --git a/src/Tools/SignDynamo/App.config b/src/Tools/SignDynamo/App.config deleted file mode 100644 index 4bfa0056185..00000000000 --- a/src/Tools/SignDynamo/App.config +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/src/Tools/SignDynamo/Program.cs b/src/Tools/SignDynamo/Program.cs deleted file mode 100644 index 32b83ca42e1..00000000000 --- a/src/Tools/SignDynamo/Program.cs +++ /dev/null @@ -1,129 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Security.Cryptography.X509Certificates; -using CommandLine; -using CommandLine.Text; -using DynamoCrypto; - -namespace SignDynamo -{ - internal class CMDLineOptions - { - [Option('i', "installer", Required = false, HelpText = "The path to the installer to sign.")] - public string Installer { get; set; } = String.Empty; - - [Option('h', "help", Required = false, HelpText = "Show this message and exit.")] - public bool ShowHelp { get; set; } - } - - class Program - { - private static byte[] privateBlob = null; - private static string installerPath; - private const string keyContainerName = "Dynamo"; - - static void Main(string[] args) - { - if (!ParseArguments(args)) - { - Console.WriteLine("Could not parse the input arguments."); - Console.WriteLine("Press any key to quit."); - Console.ReadKey(); - return; - } - - //First try at LocalMachine store location, if certificate is not installed check at CurrentUser - //store location. - var cert = Utils.FindCertificateForCurrentUser(keyContainerName, StoreLocation.LocalMachine); - if (cert == null) - { - cert = Utils.FindCertificateForCurrentUser(keyContainerName, StoreLocation.CurrentUser); - if (null == cert) - return; - } - - privateBlob = Utils.GetPrivateKeyFromCertificate(cert); - if (privateBlob == null) - { - return; - } - - var sigPath = Path.Combine(Path.GetDirectoryName(installerPath), - Path.GetFileNameWithoutExtension(installerPath) + ".sig"); - - Utils.SignFile(installerPath, sigPath, privateBlob); - - Console.WriteLine("Signature generation complete."); - } - - private static bool ParseArguments(IEnumerable args) - { - var showHelp = false; - var parser = new Parser(options => - { - options.IgnoreUnknownArguments = true; options.HelpWriter = Console.Out; - options.CaseSensitive = false; - }); - var notParsed = new List(); - - const string helpMessage = "Try 'SignDynamo --help' for more information."; - - ParserResult parserResult; - var lineOptions = new CMDLineOptions(); - var errors = new List(); - - try - { - parserResult = Parser.Default.ParseArguments(args) - .WithParsed(o => lineOptions = o) - .WithNotParsed(e => errors = (List)e); - - errors.ForEach(x => notParsed.Add(x.ToString())); - installerPath = lineOptions.Installer; - showHelp = lineOptions.ShowHelp; - } - catch (AggregateException e) - { - Console.WriteLine(e.Message); - Console.WriteLine(helpMessage); - return false; - } - - if (notParsed.Count > 0) - { - Console.WriteLine(String.Join(" ", notParsed.ToArray())); - return false; - } - - if (showHelp) - { - ShowHelp(parserResult); - return false; - } - - if (string.IsNullOrEmpty(installerPath)) - { - Console.WriteLine("You must specify a path to an installer to be signed when using the -s flag."); - return false; - } - - if (!File.Exists(installerPath)) - { - Console.Write("The specified installer path does not exist."); - return false; - } - - return true; - } - - private static void ShowHelp(ParserResult results) - { - Console.WriteLine("Usage: SignDynamo [OPTIONS]"); - Console.WriteLine("Generate a signature file for a dynamo installer."); - Console.WriteLine(); - Console.WriteLine("Options:"); - Console.WriteLine(HelpText.AutoBuild(results, null, null).ToString()); - } - } -} diff --git a/src/Tools/SignDynamo/Properties/AssemblyInfo.cs b/src/Tools/SignDynamo/Properties/AssemblyInfo.cs deleted file mode 100644 index 16077b933ab..00000000000 --- a/src/Tools/SignDynamo/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,10 +0,0 @@ -īģŋusing System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("SignDynamo")] -[assembly: AssemblyCulture("")] -[assembly: Guid("bbe6abc4-a097-49a4-a687-b86dd2de7408")] diff --git a/src/Tools/SignDynamo/SignDynamo.csproj b/src/Tools/SignDynamo/SignDynamo.csproj deleted file mode 100644 index 4c8559aa961..00000000000 --- a/src/Tools/SignDynamo/SignDynamo.csproj +++ /dev/null @@ -1,23 +0,0 @@ -īģŋ - - - - - {A84E15A2-6735-4575-A1DA-7C64AF7582B1} - Exe - Properties - SignDynamo - SignDynamo - bin\$(Configuration)\ - - - - - - - {96643e77-c786-498c-aaa9-80e449854ce9} - DynamoCrypto - True - - - diff --git a/src/Tools/SignDynamo/SignDynamo.sln b/src/Tools/SignDynamo/SignDynamo.sln deleted file mode 100644 index 1a7af7e5bf1..00000000000 --- a/src/Tools/SignDynamo/SignDynamo.sln +++ /dev/null @@ -1,20 +0,0 @@ -īģŋ -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 2012 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SignDynamo", "SignDynamo.csproj", "{A84E15A2-6735-4575-A1DA-7C64AF7582B1}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {A84E15A2-6735-4575-A1DA-7C64AF7582B1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A84E15A2-6735-4575-A1DA-7C64AF7582B1}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A84E15A2-6735-4575-A1DA-7C64AF7582B1}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A84E15A2-6735-4575-A1DA-7C64AF7582B1}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/src/build.xml b/src/build.xml index 3c864ffe5bc..b2df74100c7 100644 --- a/src/build.xml +++ b/src/build.xml @@ -5,13 +5,14 @@ Dynamo.All.sln Any CPU - win10-x64 + net6.0 + win-x64 $(MSBuildProjectDirectory)\..\tools\Nuget\NuGet.exe - Configuration=Release;Platform=$(Platform) + Configuration=Release;Platform=$(Platform);DotNet=$(DotNet) @@ -21,7 +22,7 @@ - + diff --git a/test/Directory.Build.props b/test/Directory.Build.props new file mode 100644 index 00000000000..5f7e4762f68 --- /dev/null +++ b/test/Directory.Build.props @@ -0,0 +1,5 @@ + + + true + + diff --git a/test/DynamoCoreTests/AnalyticsTests.cs b/test/DynamoCoreTests/AnalyticsTests.cs index c733b200ad7..4c19c6282e6 100644 --- a/test/DynamoCoreTests/AnalyticsTests.cs +++ b/test/DynamoCoreTests/AnalyticsTests.cs @@ -133,7 +133,7 @@ public DynamoAnalyticsTests() protected override Mock MockClient() { - var client = new Mock(CurrentDynamoModel) { CallBase = true }; + var client = new Mock(DynamoModel.HostAnalyticsInfo) { CallBase = true }; var session = MockAnalyticsSession(); client.Setup(c => c.Session).Returns(session); return client.As(); @@ -144,7 +144,7 @@ private IAnalyticsSession MockAnalyticsSession() var session = new Mock(); session.Setup(s => s.UserId).Returns("DynamoTestUser"); session.Setup(s => s.SessionId).Returns("UniqueSession"); - session.Setup(s => s.Start(It.IsAny())).Callback(SetupServices); + session.Setup(s => s.Start()).Callback(SetupServices); return session.Object; } diff --git a/test/DynamoCoreTests/CallsiteTests.cs b/test/DynamoCoreTests/CallsiteTests.cs index cdbf8ab173e..e01c3e3a3b7 100644 --- a/test/DynamoCoreTests/CallsiteTests.cs +++ b/test/DynamoCoreTests/CallsiteTests.cs @@ -6,13 +6,16 @@ using System.Reflection; using System.Runtime.Serialization; using CoreNodeModels.Input; +using DSCore; using Dynamo.Engine; using Dynamo.Graph.Nodes; using Dynamo.Graph.Nodes.CustomNodes; using Dynamo.Graph.Nodes.ZeroTouch; using Dynamo.Graph.Workspaces; +using Dynamo.Models; using FFITarget; using NUnit.Framework; +using ProtoCore; using static ProtoCore.CallSite; namespace Dynamo.Tests @@ -26,7 +29,7 @@ public TestTraceReconciliationProcessor(int expectedOrphanCount) ExpectedOrphanCount = expectedOrphanCount; } - public void PostTraceReconciliation(Dictionary> orphanedSerializables) + public void PostTraceReconciliation(Dictionary> orphanedSerializables) { Assert.AreEqual(orphanedSerializables.SelectMany(kvp=>kvp.Value).Count(), ExpectedOrphanCount); } @@ -67,9 +70,7 @@ protected override string GetUserUserDataRootFolder() [Test] public void Callsite_MultiDimensionDecreaseDimensionOnOpenAndRun_OrphanCountCorrect() { - CurrentDynamoModel.LibraryServices.ImportLibrary(Path.Combine(TestDirectory, "pkgs", "Dynamo Samples", "bin", "SampleLibraryZeroTouch.dll")); - - OpenChangeAndCheckOrphans("RebindingMultiDimension.dyn", "0..1", 3); + OpenChangeAndCheckOrphans("RebindingMultiDimension.dyn", "0..1", 3); } [Test] @@ -89,8 +90,6 @@ public void CallSite_MultiDimensionIncreaseDimensionOnOpenAndRun() [Test] public void Callsite_SingleDimensionDecreaseDimensionOnOpenAndRun() { - CurrentDynamoModel.LibraryServices.ImportLibrary(Path.Combine(TestDirectory, "pkgs", "Dynamo Samples", "bin", "SampleLibraryZeroTouch.dll")); - OpenChangeAndCheckOrphans("RebindingSingleDimension.dyn", "0..1", 1); } @@ -117,14 +116,12 @@ private void OpenChangeAndCheckOrphans(string testFileName, string numNodeValue, [Test] public void Callsite_DeleteNodeBeforeRun() { - //load required assembly for test - CurrentDynamoModel.LibraryServices.ImportLibrary(Path.Combine(TestDirectory, "pkgs", "Dynamo Samples", "bin", "SampleLibraryZeroTouch.dll")); var ws = Open(TestDirectory, callsiteDir, "RebindingSingleDimension.dyn"); CurrentDynamoModel.TraceReconciliationProcessor = new TestTraceReconciliationProcessor(3); - var traceNode = ws.Nodes.Where(n => n is DSFunction).FirstOrDefault(f => f.Name == "TraceExampleWrapper.ByString"); + var traceNode = ws.Nodes.Where(n => n is DSFunction).FirstOrDefault(f => f.Name == "WrapperObject.WrapperObject"); Assert.NotNull(traceNode); ws.RemoveAndDisposeNode(traceNode); @@ -154,7 +151,7 @@ public void Callsite_RunWithTraceDataFromUnresolvedNodes_DoesNotCrash() public void Callsite_ElementBinding() { // This graph has 2 "WrapperObject" creation nodes that is defined in FFITarget. - // The node wraps a static ISerializable ID that increments each time you create a new node. + // The node wraps a static string ID that increments each time you create a new node. // One of the nodes in the graph is created the 2nd time and the other the 3rd time // in the same session. Therefore the ID of the first is 2 and the second is 3 and the graph // stores the trace data for each node. This test tests that on reopening the graph the ID's @@ -181,9 +178,9 @@ public void Callsite_ElementBinding_CustomNodes() Assert.IsFalse(ws.Nodes.OfType().First().IsInErrorState); BeginRun(); - AssertPreviewValue("da39dbe5f59649b18c2fb6ca54acba7b", 1234567899); - AssertPreviewValue("2366239164a9441a8c4dcd981d9cf542", 2); - AssertPreviewValue("342f96575f8942c890867d88495fb0db", 3); + AssertPreviewValue("da39dbe5f59649b18c2fb6ca54acba7b", 5); + AssertPreviewValue("2366239164a9441a8c4dcd981d9cf542", 4); + AssertPreviewValue("342f96575f8942c890867d88495fb0db",1); } @@ -201,10 +198,10 @@ public void Callsite_ElementBinding_CustomNodes_multiple() Assert.IsFalse(ws.Nodes.OfType().First().IsInErrorState); BeginRun(); - AssertPreviewValue("da39dbe5f59649b18c2fb6ca54acba7b", 111111); - AssertPreviewValue("2366239164a9441a8c4dcd981d9cf542", 222222); - AssertPreviewValue("8cfce012280342f3bd688520d68a7f66", 333333); - AssertPreviewValue("08448232ee094aad8280e9a99ed44f46", 444444); + AssertPreviewValue("da39dbe5f59649b18c2fb6ca54acba7b", 6); + AssertPreviewValue("2366239164a9441a8c4dcd981d9cf542", 7); + AssertPreviewValue("8cfce012280342f3bd688520d68a7f66", 10); + AssertPreviewValue("08448232ee094aad8280e9a99ed44f46", 11); } [Test] @@ -323,42 +320,77 @@ public void Callsite_ElementBinding_Timing() //This graph loads trace data for 1500 "WrapperObjects" in Manual run mode. var ws = Open(TestDirectory, callsiteDir, "element_binding_large.dyn"); var sw = new Stopwatch(); - sw.Start(); + sw.Start(); BeginRun(); sw.Stop(); Assert.Less(sw.Elapsed.Milliseconds, 20000); Console.WriteLine(sw.Elapsed); - AssertPreviewValue("056d9c584f3b42acabec727e64188fae", Enumerable.Range(6,1501).ToList()); + AssertPreviewValue("056d9c584f3b42acabec727e64188fae", Enumerable.Range(1502,1500).ToList()); } [Test] - public void TraceBinderReturnsCorrectType_WithMatchingVersionAssembly() + public void CanDetectLegacyTraceFormat() { - var binder = new TraceBinder(); - var assembly = AppDomain.CurrentDomain.GetAssemblies().FirstOrDefault(x => x.GetName().Name == "FFITarget"); - Assert.IsNotNull(assembly); - var typeName = "FFITarget.IDHolder"; - var type = binder.BindToType(assembly.FullName, typeName); - Assert.IsNotNull(type); - Assert.AreEqual(typeName, type.FullName); + var legacyTraceData = + "PFNPQVAtRU5WOkVudmVsb3BlIHhtbG5zOnhzaT0iaHR0cDovL3d3dyY2hlbWFzLm1pY3Jvc29mdC5jb20vc29hcC9lbmNvZGluZy"; + Assert.True(CheckIfTraceDataIsLegacySOAPFormat(legacyTraceData)); } [Test] - public void TraceBinderReturnsCorrectType_WithDifferentVersionAssembly() + public void CanWarnAboutLegacyTraceData() { - var binder = new TraceBinder(); + DynamoModel.IsTestMode = false; + var counter = 99; + CurrentDynamoModel.RequestNotification += (_, _) => { counter++; }; - var fakeAssembly = new AssemblyName(); - fakeAssembly.Name = "FFITarget"; - fakeAssembly.Version = new Version(100,100,100); + // Dyn file contains SOAP formatted trace data. + var ws = Open(TestDirectory, callsiteDir, + "element_binding_customNodes_modified_multiple_pre3.0.dyn"); + DynamoModel.IsTestMode = true; + Assert.AreEqual(100, counter); + } - var typeName = "FFITarget.IDHolder"; - var type = binder.BindToType(fakeAssembly.FullName, typeName); - Assert.IsNotNull(type); - Assert.AreEqual(typeName, type.FullName); - Assert.AreNotEqual(fakeAssembly.Version, type.Assembly.GetName().Version); + [Test] + public void JsonTraceSerializationTest() + { + // Contains trace data in old SOAP format + var filePath = Path.Combine(TestDirectory, + @"core\callsite\element_binding_customNodes_modified_multiple_pre3.0.dyn"); + + OpenModel(filePath); + var model = CurrentDynamoModel; + + if (((HomeWorkspaceModel)model.CurrentWorkspace).RunSettings.RunType == Dynamo.Models.RunType.Manual) + { + RunCurrentModel(); + } + var json = model.CurrentWorkspace.ToJson(model.EngineController); + Assert.That(json, Is.Not.Null.Or.Empty); + + var obj = Data.ParseJSON(json) as Dictionary; + var bindings = obj["Bindings"]; + + var list = (bindings as IEnumerable).ToList(); + Assert.AreEqual(3, list.Count); + int i = 0; + foreach (var elem in list) + { + var traces = ((elem as Dictionary)["Binding"] as Dictionary).Values; + if (i == 0 || i == 2) + { + Assert.AreEqual(2, traces.Count); + } + else Assert.AreEqual(1, traces.Count); + + foreach (var trace in traces) + { + // Assert that new bindings are not in SOAP format. + Assert.False(CallSite.CheckIfTraceDataIsLegacySOAPFormat(trace as string)); + } + ++i; + } } } } diff --git a/test/DynamoCoreTests/Configuration/PreferenceSettingsTests.cs b/test/DynamoCoreTests/Configuration/PreferenceSettingsTests.cs index 9545df367c1..7c23143c70a 100644 --- a/test/DynamoCoreTests/Configuration/PreferenceSettingsTests.cs +++ b/test/DynamoCoreTests/Configuration/PreferenceSettingsTests.cs @@ -70,6 +70,7 @@ public void TestSettingsSerialization() Assert.AreEqual(settings.ViewExtensionSettings.Count, 0); Assert.AreEqual(settings.DefaultRunType, RunType.Automatic); Assert.AreEqual(settings.DynamoPlayerFolderGroups.Count, 0); + Assert.AreEqual(settings.EnableDynamoPlayerRenamedWatchAsOutput, false); Assert.AreEqual(settings.Locale, "Default"); // Save @@ -89,6 +90,7 @@ public void TestSettingsSerialization() Assert.AreEqual(settings.ViewExtensionSettings.Count, 0); Assert.AreEqual(settings.DefaultRunType, RunType.Automatic); Assert.AreEqual(settings.DynamoPlayerFolderGroups.Count, 0); + Assert.AreEqual(settings.EnableDynamoPlayerRenamedWatchAsOutput, false); Assert.AreEqual(settings.Locale, "Default"); // Change setting values @@ -136,6 +138,7 @@ public void TestSettingsSerialization() } } }); + settings.EnableDynamoPlayerRenamedWatchAsOutput = true; settings.Locale = "zh-CN"; @@ -173,6 +176,7 @@ public void TestSettingsSerialization() Assert.AreEqual(styleItemsList.HexColorString, "000000"); Assert.AreEqual(settings.DynamoPlayerFolderGroups.Count, 1); Assert.AreEqual(settings.DynamoPlayerFolderGroups[0].Folders.Count, 1); + Assert.AreEqual(settings.EnableDynamoPlayerRenamedWatchAsOutput, true); Assert.AreEqual(settings.Locale, "zh-CN"); } @@ -354,6 +358,18 @@ PreferencesComparison comparePrefenceSettings(PreferenceSettings defaultSettings propertiesWithDifferentValue.Add(destinationPi.Name); } } + else if (destinationPi.PropertyType == typeof(List)) + { + if (((List)sourcePi.GetValue(newGeneralSettings, null)).Count == + ((List)destinationPi.GetValue(defaultSettings, null)).Count) + { + propertiesWithSameValue.Add(destinationPi.Name); + } + else + { + propertiesWithDifferentValue.Add(destinationPi.Name); + } + } else { if (newValue?.ToString() == oldValue?.ToString()) @@ -391,10 +407,14 @@ public void TestImportCopySettings() var checkDifference = comparePrefenceSettings(defaultSettings, newSettings); int diffProps = checkDifference.DifferentPropertyValues.Count; int totProps = checkDifference.Properties.Count; - string firstPropertyWithSameValue = checkDifference.Properties.Except(checkDifference.DifferentPropertyValues).ToList().FirstOrDefault(); + string firstPropertyWithSameOrNewValue = checkDifference.Properties.Except(checkDifference.DifferentPropertyValues).ToList().FirstOrDefault(); string defSettNumberFormat = defaultSettings.NumberFormat; string newSettNumberFormat = newSettings.NumberFormat; - string failMessage = $"The file {newSettingslFilePath} exist: {newSettingsExist.ToString()} | DiffProps: {diffProps.ToString()} | TotProps: {totProps.ToString()} | Default Sett NumberFormat: {defSettNumberFormat} | New Sett NumberFormat: {newSettNumberFormat} | First Property with the same value {firstPropertyWithSameValue}"; + string failMessage = $"The file {newSettingslFilePath} exist: {newSettingsExist.ToString()} " + + $"| DiffProps: {diffProps.ToString()} " + + $"| TotProps: {totProps.ToString()} | Default Sett NumberFormat: {defSettNumberFormat} " + + $"| New Sett NumberFormat: {newSettNumberFormat} " + + $"| First Property with the same value {firstPropertyWithSameOrNewValue}"; // checking if the new Setting are completely different from the Default Assert.IsTrue(checkDifference.DifferentPropertyValues.Count == checkDifference.Properties.Count, failMessage); diff --git a/test/DynamoCoreTests/DSCoreDataTests.cs b/test/DynamoCoreTests/DSCoreDataTests.cs index 250e899cbc9..4ee3955e9df 100644 --- a/test/DynamoCoreTests/DSCoreDataTests.cs +++ b/test/DynamoCoreTests/DSCoreDataTests.cs @@ -1,8 +1,13 @@ -īģŋusing System; +using System; +using System.Collections; using System.Collections.Generic; +using System.Drawing; using System.IO; using System.Linq; +using System.Text; using Dynamo.Graph.Nodes; +using Dynamo.Graph.Nodes.ZeroTouch; +using DynamoUnits; using Newtonsoft.Json.Linq; using NUnit.Framework; @@ -13,6 +18,7 @@ internal class DSCoreDataTests : DynamoModelTestBase // Preload required libraries protected override void GetLibrariesToPreload(List libraries) { + libraries.Add("ProtoGeometry.dll"); libraries.Add("VMDataBridge.dll"); libraries.Add("DesignScriptBuiltin.dll"); libraries.Add("DSCoreNodes.dll"); @@ -186,5 +192,386 @@ public void ParsingJSONInPythonReturnsSameResult() // Verify values match when parsing JSON via Python AssertPreviewValue("cdad5bf1-f5f7-47f4-a119-ad42e5084cfa", true); } + + [Test] + [Category("UnitTests")] + public void SerializingObjectOverMaximumDepthFailes() + { + // Load test graph + string path = Path.Combine(TestDirectory, @"core\json\JSON_Serialization_Depth_Fail.dyn"); + OpenModel(path); + + var node = CurrentDynamoModel.CurrentWorkspace.NodeFromWorkspace( + Guid.Parse("cc45bec3172e40dab4d967e9dd81cbdd")); + + var expectedWarning = "Exceeds MaxDepth"; + + Assert.AreEqual(node.State, ElementState.Warning); + AssertPreviewValue("cc45bec3172e40dab4d967e9dd81cbdd", null); + Assert.AreEqual(node.Infos.Count, 1); + Assert.IsTrue(node.Infos.Any(x => x.Message.Contains(expectedWarning) && x.State == ElementState.Warning)); + } + + [Test] + [Category("UnitTests")] + public void RoundTripForBoundingBoxReturnsSameResult() + { + // Load test graph + string path = Path.Combine(TestDirectory, @"core\json\Abstract_BoundingBox_JSONParsing.dyn"); + OpenModel(path); + + // Verify objects match when serializing / de-serializing geometry type + AssertPreviewValue("abb39e07-db08-45cf-9438-478defffbf68", true); + + // Currently we do not support oriented BB. + // This test will verify current unsupported cases + AssertPreviewValue("9d611e10bea84fbc93648516e9f677f7", true); + } + + [Test] + [Category("UnitTests")] + public void RoundTripForCoordinateSystemReturnsSameResult() + { + // Load test graph + string path = Path.Combine(TestDirectory, @"core\json\Abstract_CoordinateSystem_JSONParsing.dyn"); + OpenModel(path); + + // Verify objects match when serializing / de-serializing geometry type + AssertPreviewValue("07366adaf0954529b1ed39b240192c96", true); + } + + [Test] + [Category("UnitTests")] + public void RoundTripForPlaneReturnsSameResult() + { + // Load test graph + string path = Path.Combine(TestDirectory, @"core\json\Abstract_Plane_JSONParsing.dyn"); + OpenModel(path); + + // Verify objects match when serializing / de-serializing geometry type + AssertPreviewValue("9754cbd66d4842419a6899f372a80aee", true); + } + + [Test] + [Category("UnitTests")] + public void RoundTripForVectorReturnsSameResult() + { + // Load test graph + string path = Path.Combine(TestDirectory, @"core\json\Abstract_Vector_JSONParsing.dyn"); + OpenModel(path); + + // Verify objects match when serializing / de-serializing geometry type + AssertPreviewValue("71efc8c5c0c74189901707c30e6d5903", true); + } + + [Test] + [Category("UnitTests")] + public void RoundTripForArcReturnsSameResult() + { + // Load test graph + string path = Path.Combine(TestDirectory, @"core\json\Curve_Arc_JSONParsing.dyn"); + OpenModel(path); + + // Verify objects match when serializing / de-serializing geometry type + AssertPreviewValue("71efc8c5c0c74189901707c30e6d5903", true); + + // A known issue is that Arcs do not deserialize with the same start angle value. + // It is always zero although the curve topology is identical. + // This will verify the current known edge case. + AssertPreviewValue("82304dd5025948f8a5644a84a32d58d4", true); + } + + [Test] + [Category("UnitTests")] + public void RoundTripForCircleReturnsSameResult() + { + // Load test graph + string path = Path.Combine(TestDirectory, @"core\json\Curve_Circle_JSONParsing.dyn"); + OpenModel(path); + + // Verify objects match when serializing / de-serializing geometry type + AssertPreviewValue("54d56712f1fa41948a5262aaf4eba5ba", true); + } + + [Test] + [Category("UnitTests")] + public void RoundTripForEllipseReturnsSameResult() + { + // Load test graph + string path = Path.Combine(TestDirectory, @"core\json\Curve_Ellipse_JSONParsing.dyn"); + OpenModel(path); + + // Verify objects match when serializing / de-serializing geometry type + AssertPreviewValue("a29aa179c7ae4069a6d9c6d2055ab845", true); + } + + [Test] + [Category("UnitTests")] + public void RoundTripForEllipseArcReturnsSameResult() + { + // Load test graph + string path = Path.Combine(TestDirectory, @"core\json\Curve_EllipseArc_JSONParsing.dyn"); + OpenModel(path); + + // Verify objects match when serializing / de-serializing geometry type + AssertPreviewValue("a29aa179c7ae4069a6d9c6d2055ab845", true); + + // A known issue is that EllipseArcs do not deserialize with the same start angle value. + // It is always zero although the curve topology is identical. + // This will verify the current known edge case. + AssertPreviewValue("a73925f57d2c44d7994a2c4d77bf8581", true); + } + + [Test] + [Category("UnitTests")] + public void RoundTripForHelixReturnsSameResult() + { + // Load test graph + string path = Path.Combine(TestDirectory, @"core\json\Curve_Helix_JSONParsing.dyn"); + OpenModel(path); + + // Verify objects match when serializing / de-serializing geometry type + AssertPreviewValue("b6a4919b3dd94eb79a7f0435d941d235", true); + + // A known issue is that Helix do not deserialize with the same type. + // It is always converted to nurbscurve (Same as SAB serialization). + // When the spiral GeoemtrySchema type is finalized we use it to support helix. + // This will verify the current known unsupported case. + AssertPreviewValue("1bbd147b429c43ab8fe46a00d691a024", true); + } + + [Test] + [Category("UnitTests")] + public void RoundTripForLineReturnsSameResult() + { + // Load test graph + string path = Path.Combine(TestDirectory, @"core\json\Curve_Line_JSONParsing.dyn"); + OpenModel(path); + + // Verify objects match when serializing / de-serializing geometry type + AssertPreviewValue("71efc8c5c0c74189901707c30e6d5903", true); + } + + [Test] + [Category("UnitTests")] + public void RoundTripForNurbsCurveReturnsSameResult() + { + // Load test graph + string path = Path.Combine(TestDirectory, @"core\json\Curve_NurbsCurve_JSONParsing.dyn"); + OpenModel(path); + + // Verify objects match when serializing / de-serializing geometry type + AssertPreviewValue("423356e2c8f84e00aa6c50e9bdb72c98", true); + } + + [Test] + [Category("UnitTests")] + public void RoundTripForPolyCurveReturnsSameResult() + { + // Load test graph + string path = Path.Combine(TestDirectory, @"core\json\Curve_PolyCurve_JSONParsing.dyn"); + OpenModel(path); + + // Verify objects match when serializing / de-serializing geometry type + AssertPreviewValue("423356e2c8f84e00aa6c50e9bdb72c98", true); + } + + [Test] + [Category("UnitTests")] + public void RoundTripForPolygonReturnsSameResult() + { + // Load test graph + string path = Path.Combine(TestDirectory, @"core\json\Curve_Polygon_JSONParsing.dyn"); + OpenModel(path); + + // Verify objects match when serializing / de-serializing geometry type + AssertPreviewValue("015f80f917374031b345b46b5a8d54ca", true); + } + + [Test] + [Category("UnitTests")] + public void RoundTripForRectangleReturnsSameResult() + { + // Load test graph + string path = Path.Combine(TestDirectory, @"core\json\Curve_Rectangle_JSONParsing.dyn"); + OpenModel(path); + + // Verify objects match when serializing / de-serializing geometry type + AssertPreviewValue("9754cbd66d4842419a6899f372a80aee", true); + } + + [Test] + [Category("UnitTests")] + public void RoundTripForPointReturnsSameResult() + { + // Load test graph + string path = Path.Combine(TestDirectory, @"core\json\Point_JSONParsing.dyn"); + OpenModel(path); + + // Verify objects match when serializing / de-serializing geometry type + AssertPreviewValue("71efc8c5c0c74189901707c30e6d5903", true); + } + + [Test] + [Category("UnitTests")] + public void RoundTripForCylinderReturnsSameResult() + { + // Load test graph + string path = Path.Combine(TestDirectory, @"core\json\Solid_Cylinder_JSONParsing.dyn"); + OpenModel(path); + + // Verify objects match when serializing / de-serializing geometry type + AssertPreviewValue("07366adaf0954529b1ed39b240192c96", true); + } + + [Test] + [Category("UnitTests")] + public void RoundTripForColorReturnsSameResult() + { + var color = DSCore.Color.ByARGB(25, 30, 35, 40); + var json = DSCore.Data.StringifyJSON(color); + var color2 = (DSCore.Color)DSCore.Data.ParseJSON(json); + + Assert.AreEqual(color.Red, color2.Red); + Assert.AreEqual(color.Green, color2.Green); + Assert.AreEqual(color.Blue, color2.Blue); + Assert.AreEqual(color.Alpha, color2.Alpha); + } + + [Test] + [Category("UnitTests")] + public void RoundTripForLocationReturnsSameResult() + { + var location = DynamoUnits.Location.ByLatitudeAndLongitude(43.6606, 73.0357, "Dynamo"); + var json = DSCore.Data.StringifyJSON(location); + var location2 = (DynamoUnits.Location)DSCore.Data.ParseJSON(json); + + Assert.AreEqual(location.Latitude, location2.Latitude); + Assert.AreEqual(location.Longitude, location2.Longitude); + Assert.AreEqual(location.Name, location2.Name); + } + + [Test] + [Category("UnitTests")] + public void RoundTripForImageReturnsSameResult() + { + string path = Path.Combine(TestDirectory, @"core\json\TestColor.bmp"); + Bitmap bitmap1 = new Bitmap(path); + var json = DSCore.Data.StringifyJSON(bitmap1); + var bitmap2 = (Bitmap)DSCore.Data.ParseJSON(json); + + Assert.AreEqual(bitmap1.Width, bitmap2.Width); + Assert.AreEqual(bitmap1.Height, bitmap2.Height); + Assert.AreEqual(bitmap1.GetPixel(5, 5), bitmap2.GetPixel(5, 5)); + Assert.AreEqual(bitmap1.GetPixel(195, 5), bitmap2.GetPixel(195, 5)); + Assert.AreEqual(bitmap1.GetPixel(195, 95), bitmap2.GetPixel(195, 95)); + Assert.AreEqual(bitmap1.GetPixel(5, 95), bitmap2.GetPixel(5, 95)); + } + + [Test] + [Category("UnitTests")] + public void CanObjectBeCachedRejectsNull() + { + var canCacheNull = DSCore.Data.CanObjectBeCached(null); + Assert.IsFalse(canCacheNull); + } + + [Test] + [Category("UnitTests")] + public void CanObjectBeCachedRejectsNullString() + { + var canCacheStringNull = DSCore.Data.CanObjectBeCached("null"); + Assert.IsFalse(canCacheStringNull); + } + + [Test] + [Category("UnitTests")] + public void CanObjectBeCachedRejectsEmptyString() + { + var canCacheEmptyList = DSCore.Data.CanObjectBeCached(new ArrayList() { }); + Assert.IsFalse(canCacheEmptyList); + } + + [Test] + [Category("UnitTests")] + public void RememberRestoresFromCacheWhenPassedUnsupportedInputAndValidCacheJson() + { + var validCachedJson = "2"; + object unsupportedInput = null; + var dict = DSCore.Data.Remember(unsupportedInput, validCachedJson); + + var returnObject = dict[">"]; + var returnCacheJson = dict["Cache"]; + + Assert.AreEqual(2, returnObject); + Assert.AreEqual(validCachedJson, returnCacheJson); + } + + [Test] + [Category("UnitTests")] + public void RememberReturnUnsupportedInputWhenPassedUnsupportedInputAndEmptyCacheJson() + { + var emptyCachedJson = ""; + object unsupportedInput = null; + var dict = DSCore.Data.Remember(unsupportedInput, emptyCachedJson); + + var returnObject = dict[">"]; + var returnCacheJson = dict["Cache"]; + + Assert.AreEqual(unsupportedInput, returnObject); + Assert.AreEqual("", returnCacheJson); + } + + [Test] + [Category("UnitTests")] + public void RememberWillUpdateCacheWhenPassedSupportedInputAndValidCacheJson() + { + var validCachedJson = "2"; + var newInputObject = true; + var dict = DSCore.Data.Remember(newInputObject, validCachedJson); + + var returnObject = dict[">"]; + var returnCacheJson = dict["Cache"]; + + Assert.AreEqual(returnObject.GetType(), typeof(Boolean)); + Assert.AreEqual(newInputObject, returnObject); + Assert.AreEqual("true", returnCacheJson); + } + + [Test] + [Category("UnitTests")] + public void RememberWillUpdateCacheWhenPassedSupportedInputAndEmptyCacheJson() + { + var emptyCachedJson = ""; + var newInputObject = true; + var dict = DSCore.Data.Remember(newInputObject, emptyCachedJson); + + var returnObject = dict[">"]; + var returnCacheJson = dict["Cache"]; + + Assert.AreEqual(returnObject.GetType(), typeof(Boolean)); + Assert.AreEqual(newInputObject, returnObject); + Assert.AreEqual("true", returnCacheJson); + } + + [Test] + [Category("UnitTests")] + public void ThrowsWhenPassedUnsupportedInputAndInvalidCacheJson() + { + var invalidCachedJson = "{\"one: 2}"; + object unsupportedInput = null; + + Assert.That(() => DSCore.Data.Remember(unsupportedInput, invalidCachedJson), Throws.Exception); + } + + [Test] + [Category("UnitTests")] + public void ThrowsWhenPassedAnObjectThatCanNotSerialize() + { + var validCachedJson = ""; + object unsupportedInput = new FileInfo(Path.Combine(TestDirectory, @"core\json\Solid_Cylinder_JSONParsing.dyn")); + + Assert.That(() => DSCore.Data.Remember(unsupportedInput, validCachedJson), Throws.Exception); + } } } diff --git a/test/DynamoCoreTests/DynamoCoreTests.csproj b/test/DynamoCoreTests/DynamoCoreTests.csproj index 219eed1e37c..a90b794d12f 100644 --- a/test/DynamoCoreTests/DynamoCoreTests.csproj +++ b/test/DynamoCoreTests/DynamoCoreTests.csproj @@ -18,20 +18,20 @@ - + - + all compile; build; native; contentfiles; analyzers; buildtransitive - + all compile; build; native; contentfiles; analyzers; buildtransitive @@ -42,7 +42,7 @@ - + all compile; build; native; contentfiles; analyzers; buildtransitive @@ -136,7 +136,7 @@ - + diff --git a/test/DynamoCoreTests/Logging/FeatureFlagTests.cs b/test/DynamoCoreTests/Logging/FeatureFlagTests.cs index 968d6b712a2..2200c56ecc8 100644 --- a/test/DynamoCoreTests/Logging/FeatureFlagTests.cs +++ b/test/DynamoCoreTests/Logging/FeatureFlagTests.cs @@ -1,7 +1,9 @@ using Dynamo.Utilities; using NUnit.Framework; +using NUnit.Framework.Internal; using System; using System.Diagnostics; +using System.Text.RegularExpressions; using System.Threading; namespace Dynamo.Tests.Logging @@ -69,6 +71,42 @@ public void FeatureFlagsShouldMessageLoggedShouldContainAllLogs() StringAssert.EndsWith("<<<<>>>>", log); } + //TODO(DYN-6464) Revisit this and log more when the logger is not easily overwhelmed. + [Test] + public void FeatureFlagsShouldMessageLoggedShouldOnlyContainNullFlagErrorOnce() + { + var testflagsManager = new DynamoUtilities.DynamoFeatureFlagsManager("testkey", new SynchronizationContext(), true); + testflagsManager.MessageLogged += TestflagsManager_MessageLogged; + testflagsManager.CheckFeatureFlag("TestFlag2", "na"); + testflagsManager.CheckFeatureFlag("TestFlag2", "na"); + testflagsManager.CheckFeatureFlag("TestFlag2", "na"); + testflagsManager.MessageLogged -= TestflagsManager_MessageLogged; + var matches = Regex.Matches(log, "wait longer for the cache").Count; + Assert.AreEqual(1,matches); + } + //TODO(DYN-6464) Revisit this and log more when the logger is not easily overwhelmed. + [Test] + public void FeatureFlagsShouldMessageLoggedShouldOnlyContainMissingFlagErrorOnce() + { + var testflagsManager = new DynamoUtilities.DynamoFeatureFlagsManager("testkey", new SynchronizationContext(), true); + testflagsManager.MessageLogged += TestflagsManager_MessageLogged; + testflagsManager.CacheAllFlags(); + testflagsManager.CheckFeatureFlag("MissingFlag", "na"); + testflagsManager.CheckFeatureFlag("MissingFlag", "na"); + testflagsManager.CheckFeatureFlag("MissingFlag", "na"); + testflagsManager.MessageLogged -= TestflagsManager_MessageLogged; + var matches = Regex.Matches(log, "failed to get value").Count; + Assert.AreEqual(1, matches); + } + [Test] + public void FeatureFlagsThrowsIfCheckIngNonSupportedType() + { + var testflagsManager = new DynamoUtilities.DynamoFeatureFlagsManager("testkey", new SynchronizationContext(), true); + Assert.Throws(() => + { + testflagsManager.CheckFeatureFlag("NumericTypeNotSupported", 10); + }); + } private void DynamoFeatureFlagsManager_FlagsRetrieved() { diff --git a/test/DynamoCoreTests/Models/NodeModelWarnings.cs b/test/DynamoCoreTests/Models/NodeModelWarnings.cs index fdb23f7682f..57e1c8b0b2b 100644 --- a/test/DynamoCoreTests/Models/NodeModelWarnings.cs +++ b/test/DynamoCoreTests/Models/NodeModelWarnings.cs @@ -1,5 +1,7 @@ -īģŋusing System; +using System; using System.Collections.Generic; +using System.IO; +using CoreNodeModels; using Dynamo.Graph.Nodes; using Dynamo.Models; using NUnit.Framework; @@ -10,6 +12,17 @@ namespace Dynamo.Tests.Models [TestFixture] class NodeModelWarningsTest : DynamoModelTestBase { + // Preload required libraries + protected override void GetLibrariesToPreload(List libraries) + { + libraries.Add("ProtoGeometry.dll"); + libraries.Add("VMDataBridge.dll"); + libraries.Add("DesignScriptBuiltin.dll"); + libraries.Add("DSCoreNodes.dll"); + libraries.Add("DSCPython.dll"); + base.GetLibrariesToPreload(libraries); + } + /// /// This test case will test adding and removing persistent and transient warnings on a node model /// @@ -137,5 +150,30 @@ public void KeepTransitionBetweenWarningTypes() Assert.AreEqual(ElementState.Active, cbn.State); Assert.AreEqual(0, cbn.Infos.Count); } + + [Test] + [Category("UnitTests")] + public void CombinedBuildAndRuntimeWarnings() + { + // Load test graph + string path = Path.Combine(TestDirectory, @"core\warning\CombinedBuildAndRuntimeWarning.dyn"); + OpenModel(path); + + var guid = "68d59d31924a4bd9ad8bedf6ad3d6ba8"; + var remember = CurrentDynamoModel.CurrentWorkspace.NodeFromWorkspace( + Guid.Parse(guid)); + + CurrentDynamoModel.ExecuteCommand(new DynamoModel.MakeConnectionCommand("fa0a1055b0404964bfb03c0f1b63b03c", 0, PortType.Output, + DynamoModel.MakeConnectionCommand.Mode.Begin)); + CurrentDynamoModel.ExecuteCommand(new DynamoModel.MakeConnectionCommand(guid, 0, PortType.Input, + DynamoModel.MakeConnectionCommand.Mode.End)); + + RunCurrentModel(); + + Assert.IsTrue(remember.Infos.Count == 1); + + Assert.IsTrue(remember.Infos.Any(x => x.Message.Contains("Dereferencing a non-pointer"))); + Assert.IsTrue(remember.Infos.Any(x => x.Message.Contains("Data.Remember operation failed"))); + } } -} \ No newline at end of file +} diff --git a/test/DynamoCoreTests/SerializationTests.cs b/test/DynamoCoreTests/SerializationTests.cs index 82e361a1af4..21faa8ee02c 100644 --- a/test/DynamoCoreTests/SerializationTests.cs +++ b/test/DynamoCoreTests/SerializationTests.cs @@ -277,14 +277,24 @@ public static void CompareWorkspaceModels(serializationTestUtils.WorkspaceCompar { var valueA = kvp.Value; var valueB = b.NodeDataMap[kvp.Key]; + var valANodeName = a.NodeTypeMap[kvp.Key].FullName; // Ignore IntegerSlider nodes as they are being read as IntegerSlider64Bit JSON nodes. // TODO: Remove this filter once we deprecate IntegerSlider nodes in a future Dynamo version. - if (a.NodeTypeMap[kvp.Key].FullName == "CoreNodeModels.Input.IntegerSlider") + if (valANodeName == "CoreNodeModels.Input.IntegerSlider") { Assert.AreEqual("CoreNodeModels.Input.IntegerSlider64Bit", b.NodeTypeMap[kvp.Key].FullName); continue; } + //ignore file name/object nodes - the result is dependent on where the graph was run. + //which is modified during this test. + + if (valANodeName.ToLower() == "corenodemodels.input.filename" || + valANodeName.ToLower()== "corenodemodels.input.fileobject"|| + valANodeName.ToLower() == "corenodemodels.input.directory") + { + continue; + } Assert.AreEqual(a.NodeTypeMap[kvp.Key], b.NodeTypeMap[kvp.Key]); @@ -389,15 +399,26 @@ public static void CompareWorkspacesDifferentGuids(serializationTestUtils.Worksp //convert the old guid to the new guid var newGuid = GuidUtility.Create(GuidUtility.UrlNamespace, modelGuidsToIDmap[kvp.Key]); var valueB = b.NodeDataMap[newGuid]; + var valANodeName = a.NodeTypeMap[kvp.Key].FullName; // Ignore IntegerSlider nodes as they are being read as IntegerSlider64Bit JSON nodes. // TODO: Remove this filter once we deprecate IntegerSlider nodes in a future Dynamo version. - if (a.NodeTypeMap[kvp.Key].FullName == "CoreNodeModels.Input.IntegerSlider") + if (valANodeName == "CoreNodeModels.Input.IntegerSlider") { Assert.AreEqual("CoreNodeModels.Input.IntegerSlider64Bit", b.NodeTypeMap[newGuid].FullName); continue; } + //ignore file name/object nodes - the result is dependent on where the graph was run. + //which is modified during this test. + + if (valANodeName.ToLower() == "corenodemodels.input.filename" || + valANodeName.ToLower() == "corenodemodels.input.fileobject" || + valANodeName.ToLower() == "corenodemodels.input.directory") + { + continue; + } + Assert.AreEqual(a.NodeTypeMap[kvp.Key], b.NodeTypeMap[newGuid]); try diff --git a/test/DynamoCoreTests/UtilityTests.cs b/test/DynamoCoreTests/UtilityTests.cs index 23a8a0c1f94..a65f43b2ddc 100644 --- a/test/DynamoCoreTests/UtilityTests.cs +++ b/test/DynamoCoreTests/UtilityTests.cs @@ -300,14 +300,14 @@ public void LoadTraceDataFromXmlDocument00() Assert.Throws(() => { // Test method call without a valid XmlDocument. - Graph.Nodes.Utilities.LoadTraceDataFromXmlDocument(null); + Graph.Nodes.Utilities.LoadTraceDataFromXmlDocument(null, out _); }); Assert.Throws(() => { // Test XmlDocument without a document element. XmlDocument document = new XmlDocument(); - Graph.Nodes.Utilities.LoadTraceDataFromXmlDocument(document); + Graph.Nodes.Utilities.LoadTraceDataFromXmlDocument(document, out _); }); } @@ -321,7 +321,7 @@ public void LoadTraceDataFromXmlDocument01() { XmlDocument document = new XmlDocument(); document.AppendChild(document.CreateElement("RootElement")); - outputs = Graph.Nodes.Utilities.LoadTraceDataFromXmlDocument(document); + outputs = Graph.Nodes.Utilities.LoadTraceDataFromXmlDocument(document, out _); }); Assert.IsNotNull(outputs); diff --git a/test/DynamoCoreWpfTests/CrashReportingTests.cs b/test/DynamoCoreWpfTests/CrashReportingTests.cs index ec061cd4db9..44578c0296e 100644 --- a/test/DynamoCoreWpfTests/CrashReportingTests.cs +++ b/test/DynamoCoreWpfTests/CrashReportingTests.cs @@ -196,17 +196,13 @@ public void TestCERTool() public void TestAppNameSentToCER() { CurrentDynamoModel.HostName = null; - var name = CrashReportTool.GetHostAppName(CurrentDynamoModel); + var name = CrashReportTool.GetHostAppName(); //if both hostname and hostinfo.hostname are null, then use proc name. Assert.True(name.Contains("testhost") || name.Contains("nunit-agent")); - CurrentDynamoModel.HostName = "dynamotestmock"; - name = CrashReportTool.GetHostAppName(CurrentDynamoModel); - //use hostname over proc name - Assert.AreEqual(CurrentDynamoModel.HostName, name); - CurrentDynamoModel.HostAnalyticsInfo = new HostAnalyticsInfo(){HostName = "123"}; - name = CrashReportTool.GetHostAppName(CurrentDynamoModel); + DynamoModel.HostAnalyticsInfo = new HostAnalyticsInfo(){HostName = "123"}; + name = CrashReportTool.GetHostAppName(); //prefer hostinfo.hostname over others. - Assert.AreEqual(CurrentDynamoModel.HostAnalyticsInfo.HostName, name); + Assert.AreEqual(DynamoModel.HostAnalyticsInfo.HostName, name); } } } diff --git a/test/DynamoCoreWpfTests/DynamoCoreWpfTests.csproj b/test/DynamoCoreWpfTests/DynamoCoreWpfTests.csproj index beb3024c022..f25cbd500dd 100644 --- a/test/DynamoCoreWpfTests/DynamoCoreWpfTests.csproj +++ b/test/DynamoCoreWpfTests/DynamoCoreWpfTests.csproj @@ -26,13 +26,13 @@ - + all compile; build; native; contentfiles; analyzers; buildtransitive - + all compile; build; native; contentfiles; analyzers; buildtransitive diff --git a/test/DynamoCoreWpfTests/DynamoViewTests.cs b/test/DynamoCoreWpfTests/DynamoViewTests.cs index 0de1fcf4698..79294e37f2f 100644 --- a/test/DynamoCoreWpfTests/DynamoViewTests.cs +++ b/test/DynamoCoreWpfTests/DynamoViewTests.cs @@ -40,26 +40,11 @@ protected override void GetLibrariesToPreload(List libraries) libraries.Add("FFITarget.dll"); } - public override void Open(string path) - { - base.Open(path); - - DispatcherUtil.DoEvents(); - } - - public override void Run() - { - base.Run(); - - DispatcherUtil.DoEvents(); - } - [Test] public void FooterNotificationControlTest() { // Arrange Open(@"UI\ZoomNodeColorStates.dyn"); - var workspace = ViewModel.Model.CurrentWorkspace as HomeWorkspaceModel; Debug.Assert(workspace != null, nameof(workspace) + " != null"); workspace.Run(); @@ -116,7 +101,6 @@ public void OpeningWorkspaceWithTclsrustWarning() // Open workspace with test mode as false, to verify trust warning. DynamoModel.IsTestMode = false; Open(@"core\CustomNodes\TestAdd.dyn"); - Assert.IsTrue(ViewModel.FileTrustViewModel.ShowWarningPopup); // Close workspace @@ -138,7 +122,7 @@ public void ElementBinding_SaveAs() var filePath = Path.Combine(GetTestDirectory(ExecutingDirectory), pathInTestsDir); // Always start with a fresh workspace with no binding data for this test. - File.Copy(prebindingPath, filePath); + File.Copy(prebindingPath, filePath,true); OpenAndRun(pathInTestsDir); // Assert that the node doesn't have trace data the first time it's run. @@ -176,7 +160,6 @@ public void TestToastNotificationClosingBehavior() { var preferencesWindow = new PreferencesView(View); preferencesWindow.Show(); - DispatcherUtil.DoEvents(); string selectedLanguage = (string)((ComboBox)preferencesWindow.FindName("LanguageCmb")).SelectedItem; var english = Configurations.SupportedLocaleDic.FirstOrDefault(x => x.Value == "en-US").Key; var spanish = Configurations.SupportedLocaleDic.FirstOrDefault(x => x.Value == "es-ES").Key; diff --git a/test/DynamoCoreWpfTests/GateTests.cs b/test/DynamoCoreWpfTests/GateTests.cs new file mode 100644 index 00000000000..a5d4fee74aa --- /dev/null +++ b/test/DynamoCoreWpfTests/GateTests.cs @@ -0,0 +1,75 @@ +using CoreNodeModels.Input; +using CoreNodeModels.Logic; +using Dynamo; +using Dynamo.Graph.Workspaces; +using Dynamo.Tests; +using DynamoCoreWpfTests.Utility; +using NUnit.Framework; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using SystemTestServices; + +namespace DynamoCoreWpfTests +{ + internal class GateTests : DynamoModelTestBase + { + protected override void GetLibrariesToPreload(List libraries) + { + libraries.Add("FunctionObject.ds"); + libraries.Add("DesignScriptBuiltin.dll"); + libraries.Add("BuiltIn.ds"); + libraries.Add("DSCPython.dll"); + libraries.Add("FFITarget.dll"); + } + + [Test] + public void SettingNodeAsOpenPassesData() + { + string openPath = Path.Combine(TestDirectory, @"UI\UIGateNode.dyn"); + RunModel(openPath); + + Guid gateNodeGuid = Guid.Parse("0a4e291d93a84260bd9f37fde3158d83"); + var gateNode = CurrentDynamoModel.CurrentWorkspace.NodeFromWorkspace(gateNodeGuid) as Gate; + + Assert.AreEqual(false, gateNode.Value); + + //Test that the downstream connected node IsNull is true + AssertPreviewValue("448ad21ed4af42b4ae71c45961a173ff", true); + + //Open the gate node + gateNode.Value = true; + + BeginRun(); + + //Test that the downstream connected node IsNull is now not null + AssertPreviewValue("448ad21ed4af42b4ae71c45961a173ff", false); + } + + [Test] + public void SettingNodeAsClosedBlocksData() + { + string openPath = Path.Combine(TestDirectory, @"UI\UIGateNode.dyn"); + RunModel(openPath); + + Guid gateNodeGuid = Guid.Parse("e323a525bab546199c3635ce33c8c46b"); + var gateNode = CurrentDynamoModel.CurrentWorkspace.NodeFromWorkspace(gateNodeGuid) as Gate; + + Assert.AreEqual(true, gateNode.Value); + + //Test that the downstream connected node IsNull is false + AssertPreviewValue("414438cdd24f4d74b08e462e0b17ddff", false); + + //Open the gate node + gateNode.Value = false; + + BeginRun(); + + //Test that the downstream connected node IsNull is now not null + AssertPreviewValue("414438cdd24f4d74b08e462e0b17ddff", true); + } + } +} diff --git a/test/DynamoCoreWpfTests/NodeViewCustomizationTests.cs b/test/DynamoCoreWpfTests/NodeViewCustomizationTests.cs index 652d08ad48e..7d3ceabbba1 100644 --- a/test/DynamoCoreWpfTests/NodeViewCustomizationTests.cs +++ b/test/DynamoCoreWpfTests/NodeViewCustomizationTests.cs @@ -1,4 +1,4 @@ -īģŋusing System; +using System; using System.Collections.Generic; using System.Globalization; using System.IO; @@ -51,12 +51,6 @@ public void Watch3DHasViewer() var path = Environment.GetEnvironmentVariable("Path", EnvironmentVariableTarget.Process) + ";" + Model.PathManager.DynamoCoreDirectory; Environment.SetEnvironmentVariable("Path", path, EnvironmentVariableTarget.Process); - var renderingTier = (System.Windows.Media.RenderCapability.Tier >> 16); - if (renderingTier < 2) - { - Assert.Inconclusive("Hardware rendering is not available. Watch3D is not created."); - } - Open(@"UI\CoreUINodes.dyn"); var nodeView = NodeViewWithGuid("6869c998-b819-4686-8849-6f36162c4182"); // NodeViewOf(); var watchView = nodeView.ChildrenOfType().FirstOrDefault(); diff --git a/test/DynamoCoreWpfTests/PackageManager/PackageManagerSearchElementViewModelTests.cs b/test/DynamoCoreWpfTests/PackageManager/PackageManagerSearchElementViewModelTests.cs index 708913b8876..de40c1eaf04 100644 --- a/test/DynamoCoreWpfTests/PackageManager/PackageManagerSearchElementViewModelTests.cs +++ b/test/DynamoCoreWpfTests/PackageManager/PackageManagerSearchElementViewModelTests.cs @@ -242,7 +242,7 @@ public void PackageSearchDialogSearchIntersectAgainstHostFilters() packageManagerSearchViewModel.LastSync = new List(); foreach (var result in packageManagerSearchViewModel.SearchResults) { - packageManagerSearchViewModel.LastSync.Add(result.Model); + packageManagerSearchViewModel.LastSync.Add(result.SearchElementModel); } //Validate the total added packages match @@ -370,7 +370,7 @@ public void PackageSearchDialogSearchTestStatusFilters() packageManagerSearchViewModel.LastSync = new List(); foreach (var result in packageManagerSearchViewModel.SearchResults) { - packageManagerSearchViewModel.LastSync.Add(result.Model); + packageManagerSearchViewModel.LastSync.Add(result.SearchElementModel); } //Validate the total added packages match @@ -510,7 +510,7 @@ public void PackageSearchDialogSearchTestDependencyFilters() packageManagerSearchViewModel.LastSync = new List(); foreach (var result in packageManagerSearchViewModel.SearchResults) { - packageManagerSearchViewModel.LastSync.Add(result.Model); + packageManagerSearchViewModel.LastSync.Add(result.SearchElementModel); } //Validate the total added packages match @@ -586,7 +586,7 @@ public void PackageSearchDialogSearchDifferentLanguage() foreach (var package in packageManagerSearchViewModel.SearchResults) { var iDoc = packageManagerSearchViewModel.LuceneUtility.InitializeIndexDocumentForPackages(); - packageManagerSearchViewModel.AddPackageToSearchIndex(package.Model, iDoc); + packageManagerSearchViewModel.AddPackageToSearchIndex(package.SearchElementModel, iDoc); } packageManagerSearchViewModel.LuceneUtility.CommitWriterChanges(); diff --git a/test/DynamoCoreWpfTests/PackageManager/PackageManagerUITests.cs b/test/DynamoCoreWpfTests/PackageManager/PackageManagerUITests.cs index 0cb77a60a7a..b24af6612a0 100644 --- a/test/DynamoCoreWpfTests/PackageManager/PackageManagerUITests.cs +++ b/test/DynamoCoreWpfTests/PackageManager/PackageManagerUITests.cs @@ -1,12 +1,3 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using System.Windows; -using System.Windows.Controls; -using System.Windows.Controls.Primitives; using Dynamo.Core; using Dynamo.Extensions; using Dynamo.PackageManager; @@ -22,6 +13,15 @@ using Greg.Responses; using Moq; using NUnit.Framework; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Controls.Primitives; using SystemTestServices; namespace DynamoCoreWpfTests.PackageManager @@ -104,10 +104,10 @@ public void CanOpenPackagePublishDialogAndWindowIsOwned() var l = new PublishPackageViewModel(ViewModel); ViewModel.OnRequestPackagePublishDialog(l); - AssertWindowOwnedByDynamoView(); + AssertWindowOwnedByDynamoView(); } - [Test, Ignore("Unknown reason")] + [Test] public void CannotCreateDuplicatePackagePublishDialogs() { var l = new PublishPackageViewModel(ViewModel); @@ -116,7 +116,7 @@ public void CannotCreateDuplicatePackagePublishDialogs() ViewModel.OnRequestPackagePublishDialog(l); } - AssertWindowOwnedByDynamoView(); + AssertWindowOwnedByDynamoView(); } [Test] @@ -125,9 +125,138 @@ public void PackagePublishWindowClosesWithDynamo() var l = new PublishPackageViewModel(ViewModel); ViewModel.OnRequestPackagePublishDialog(l); - AssertWindowOwnedByDynamoView(); - AssertWindowClosedWithDynamoView(); + AssertWindowOwnedByDynamoView(); + AssertWindowClosedWithDynamoView(); + + } + + [Test] + public void PackagePublishKeywordPropertyAllowsSpaces() + { + // Arrange + var singleSpace = " "; + var doubleSpace = " "; + var singleWord = "support"; + var doubleWord = "support mep"; + var doubleWordMultipleSpaces = "support mep"; + var commaDelimetedWords = "support,mep"; + + var l = new PublishPackageViewModel(ViewModel); + + // Act/Assert + l.Keywords = singleSpace; + Assert.AreEqual(singleSpace, l.Keywords); + Assert.AreEqual(0, l.KeywordList.Count()); + + l.Keywords = doubleSpace; + Assert.AreEqual(singleSpace, l.Keywords); + Assert.AreEqual(0, l.KeywordList.Count()); + + l.Keywords = singleWord; + Assert.AreEqual(singleWord, l.Keywords); + Assert.AreEqual(1, l.KeywordList.Count()); + + l.Keywords = doubleWord; + Assert.AreEqual(doubleWord, l.Keywords); + Assert.AreEqual(2, l.KeywordList.Count()); + + l.Keywords = doubleWordMultipleSpaces; + Assert.AreEqual(doubleWord, l.Keywords); + Assert.AreEqual(2, l.KeywordList.Count()); + + l.Keywords = commaDelimetedWords; + Assert.AreEqual(commaDelimetedWords.Replace(',', ' '), l.Keywords); + Assert.AreEqual(2, l.KeywordList.Count()); + } + + [Test] + public void PackagePublishNumericUpDownAllowsOnlyPositiveIntegerValues() + { + // Arrange + var updownControl = new NumericUpDownControl(); + + // Assert negavie + var isValidOutput = updownControl.IsValidInput("l"); + Assert.IsFalse(isValidOutput, "Should not allow letters in numeric input."); + + isValidOutput = updownControl.IsValidInput("-1"); + Assert.IsFalse(isValidOutput, "Should not allow negative integers in numeric input."); + + isValidOutput = updownControl.IsValidInput("1.0"); + Assert.IsFalse(isValidOutput, "Should not allow fractional input."); + + isValidOutput = updownControl.IsValidInput(" "); + Assert.IsFalse(isValidOutput, "Should not allow space input values."); + + isValidOutput = updownControl.IsValidInput(" 1"); + Assert.IsFalse(isValidOutput, "Should not allow space input values."); + + // Assert positive + isValidOutput = updownControl.IsValidInput("0"); + Assert.IsTrue(isValidOutput, "Should allow 0 in numeric input."); + + isValidOutput = updownControl.IsValidInput("1"); + Assert.IsTrue(isValidOutput, "Should allow positive integers in numeric input."); + } + + [Test] + public void TestAscendingSpinnerClickEvent() + { + // Arrange + var updownControl = new NumericUpDownControl(); + var up = updownControl.spinnerUp; + var down = updownControl.spinnerDown; + var inputField = updownControl.inputField; + var watermark = updownControl.Watermark; + + // Act + watermark = "0"; + up.RaiseEvent(new RoutedEventArgs(ButtonBase.ClickEvent)); + + // Assert + Assert.AreEqual(inputField.Text, "1"); + + up.RaiseEvent(new RoutedEventArgs(ButtonBase.ClickEvent)); + Assert.AreEqual(inputField.Text, "2"); + + down.RaiseEvent(new RoutedEventArgs(ButtonBase.ClickEvent)); + Assert.AreEqual(inputField.Text, "1"); + down.RaiseEvent(new RoutedEventArgs(ButtonBase.ClickEvent)); + Assert.AreEqual(inputField.Text, "0"); + + down.RaiseEvent(new RoutedEventArgs(ButtonBase.ClickEvent)); + Assert.AreEqual(inputField.Text, "0"); + } + + [Test] + public void TestDescendingSpinnerClickEvent() + { + // Arrange + var updownControl = new NumericUpDownControl(); + var up = updownControl.spinnerUp; + var down = updownControl.spinnerDown; + var inputField = updownControl.inputField; + var watermark = updownControl.Watermark; + + // Act + watermark = "1"; + down.RaiseEvent(new RoutedEventArgs(ButtonBase.ClickEvent)); + + // Assert + Assert.AreEqual(inputField.Text, "0"); + + down.RaiseEvent(new RoutedEventArgs(ButtonBase.ClickEvent)); + Assert.AreEqual(inputField.Text, "0"); + + up.RaiseEvent(new RoutedEventArgs(ButtonBase.ClickEvent)); + Assert.AreEqual(inputField.Text, "1"); + + up.RaiseEvent(new RoutedEventArgs(ButtonBase.ClickEvent)); + Assert.AreEqual(inputField.Text, "2"); + + down.RaiseEvent(new RoutedEventArgs(ButtonBase.ClickEvent)); + Assert.AreEqual(inputField.Text, "1"); } #endregion @@ -1279,7 +1408,7 @@ public void InstallsPackagesEvenIfSomeFailToDownloadShouldNotThrow() } - [Test, Category("Failure")] + [Test] [Description("User tries to download packages that might conflict with an unloaded builtIn package")] public void PackageManagerConflictsUnloadedWithBltInPackage() { @@ -1294,7 +1423,7 @@ public void PackageManagerConflictsUnloadedWithBltInPackage() var bltInPackage = pkgLoader.LocalPackages.Where(x => x.Name == "SignedPackage").FirstOrDefault(); Assert.IsNotNull(bltInPackage); - string expectedDownloadPath = "download/" + bltInPackage.Name + "/" + bltInPackage.VersionName; + string expectedDownloadPath = "download/" + bltInPackage.ID + "/" + bltInPackage.VersionName; // Simulate the user downloading the same package from PM var mockGreg = new Mock(); mockGreg.Setup(x => x.Execute(It.IsAny())).Callback((Request x) => @@ -1314,8 +1443,7 @@ public void PackageManagerConflictsUnloadedWithBltInPackage() // 1. User downloads the exact version of a builtIn package // { - var id = "test-123"; - var deps = new List() { new Dependency() { _id = id, name = bltInPackage.Name } }; + var deps = new List() { new Dependency() { _id = bltInPackage.ID, name = bltInPackage.Name } }; var depVers = new List() { bltInPackage.VersionName }; mockGreg.Setup(m => m.ExecuteAndDeserializeWithContent(It.IsAny())) @@ -1326,7 +1454,7 @@ public void PackageManagerConflictsUnloadedWithBltInPackage() version = bltInPackage.VersionName, engine_version = bltInPackage.EngineVersion, name = bltInPackage.Name, - id = id, + id = bltInPackage.ID, full_dependency_ids = deps, full_dependency_versions = depVers }, @@ -1614,6 +1742,33 @@ public void PackageManagerClosesWithDynamo() AssertWindowClosedWithDynamoView(); } + [Test] + public void SearchBoxInactiveOnWindowOpened() + { + ViewModel.OnRequestPackageManagerDialog(null, null); + + var windows = GetWindowEnumerable(View.OwnedWindows); + var packageManagerView = windows.First(x => x is PackageManagerView) as PackageManagerView; + + Assert.IsNotNull(packageManagerView); + + var searchBox = LogicalTreeHelper.FindLogicalNode(packageManagerView, "SearchBox") as UserControl; + Assert.IsNotNull(searchBox); + Assert.IsFalse(searchBox.IsEnabled); + + packageManagerView.PackageManagerViewModel.PackageSearchViewModel.InitialResultsLoaded = true; + Assert.IsTrue(searchBox.IsEnabled); + } + + [Test] + public void PackageManagerDialogDoesNotThrowExceptions() + { + Assert.DoesNotThrow(() => ViewModel.OnRequestPackageManagerDialog(null, null), "Package Manager View did not open without exceptions"); + + AssertWindowOwnedByDynamoView(); + } + + /// /// Asserts that the filter context menu will stay open while the user interacts with it /// @@ -1643,5 +1798,524 @@ public void FiltersContextMenuStaysOpen() #endregion + #region PackageViewModel Interaction + + [Test] + public void AddsFilesAndFoldersFromFilePathsCorrectly() + { + string nodePath = Path.Combine(TestDirectory, "core", "docbrowser\\pkgs\\PackageWithNodeDocumentation"); + var allFiles = Directory.GetFiles(nodePath, "*", SearchOption.AllDirectories).ToList(); + var allFolders = Directory.GetDirectories(nodePath, "*", SearchOption.AllDirectories).ToList(); + + // Arrange + var vm = new PublishPackageViewModel(this.ViewModel); + vm.AddAllFilesAfterSelection(allFiles); + + var assemblies = vm.Assemblies; + var additionalFiles = vm.AdditionalFiles; + + // Assert number of files PackageContents items is the one we expect + Assert.AreEqual(assemblies.Count, allFiles.Count(f => f.EndsWith(".dll"))); + Assert.AreEqual(additionalFiles.Count, allFiles.Count(f => !f.EndsWith(".dll"))); + + var packageContents = vm.PackageContents; + Assert.AreEqual(packageContents.Count, 1); // We expect only 1 root item here + + // Assert that the PackageContents contains the correct number of items + var allFilesAndFoldres = PackageItemRootViewModel.GetFiles(packageContents.First()); + Assert.AreEqual(allFilesAndFoldres.Count, allFiles.Count + allFolders.Count + 1); + Assert.AreEqual(allFilesAndFoldres.Count(i => i.DependencyType.Equals(DependencyType.Assembly)), assemblies.Count); + Assert.AreEqual(allFilesAndFoldres.Count(i => i.DependencyType.Equals(DependencyType.File)), additionalFiles.Count); + Assert.AreEqual(allFilesAndFoldres.Count(i => i.DependencyType.Equals(DependencyType.Folder)), allFolders.Count + 1); + + // Arrange - try to add the same files again + var dlgMock = new Mock(); + dlgMock.Setup(m => m.Show(It.IsAny(), It.IsAny(), It.IsAny(), + It.Is(x => x == MessageBoxButton.OKCancel || x == MessageBoxButton.OK), It.IsAny())) + .Returns(MessageBoxResult.OK); + MessageBoxService.OverrideMessageBoxDuringTests(dlgMock.Object); + + vm.AddAllFilesAfterSelection(allFiles); + packageContents = vm.PackageContents; + + // Assert that the PackageContents still contains the correct number of items + allFilesAndFoldres = PackageItemRootViewModel.GetFiles(packageContents.First()); + Assert.AreEqual(allFilesAndFoldres.Count, allFiles.Count + allFolders.Count + 1); + Assert.AreEqual(allFilesAndFoldres.Count(i => i.DependencyType.Equals(DependencyType.Assembly)), assemblies.Count); + Assert.AreEqual(allFilesAndFoldres.Count(i => i.DependencyType.Equals(DependencyType.File)), additionalFiles.Count); + Assert.AreEqual(allFilesAndFoldres.Count(i => i.DependencyType.Equals(DependencyType.Folder)), allFolders.Count + 1); + } + + [Test] + public void RemoveMultipleRootItemsCorrectly() + { + string nodePath = Path.Combine(TestDirectory, "core", "docbrowser\\pkgs\\RootPackageFolder\\PackageWithNodeDocumentation"); + string duplicateNodePath = Path.Combine(TestDirectory, "core", "docbrowser\\pkgs\\RootPackageFolder\\DuplicatePackageWithNodeDocumentation"); + var allFiles = Directory.GetFiles(nodePath, "*", SearchOption.AllDirectories).ToList(); + var allDuplicateFiles = Directory.GetFiles(duplicateNodePath, "*", SearchOption.AllDirectories).ToList(); + + // Arrange + var dlgMock = new Mock(); + dlgMock.Setup(m => m.Show(It.IsAny(), It.IsAny(), It.IsAny(), + It.Is(x => x == MessageBoxButton.OKCancel || x == MessageBoxButton.OK), It.IsAny())) + .Returns(MessageBoxResult.OK); + MessageBoxService.OverrideMessageBoxDuringTests(dlgMock.Object); + + var vm = new PublishPackageViewModel(this.ViewModel); + vm.AddAllFilesAfterSelection(allFiles); + vm.AddAllFilesAfterSelection(allDuplicateFiles); + + var packageContents = vm.PackageContents; + Assert.AreEqual(packageContents.Count, 2); // We expect 2 separate root item here + + Assert.DoesNotThrow(() => vm.RemoveItemCommand.Execute(packageContents.First())); + } + + + [Test] + public void AddsFilesAndFoldersFromMultipleFilePathsCorrectly() + { + string nodePath = Path.Combine(TestDirectory, "core", "docbrowser\\pkgs\\RootPackageFolder\\PackageWithNodeDocumentation"); + string duplicateNodePath = Path.Combine(TestDirectory, "core", "docbrowser\\pkgs\\RootPackageFolder\\DuplicatePackageWithNodeDocumentation"); + var allFiles = Directory.GetFiles(nodePath, "*", SearchOption.AllDirectories).ToList(); + var allFolders = Directory.GetDirectories(nodePath, "*", SearchOption.AllDirectories).ToList(); + var allDuplicateFiles = Directory.GetFiles(duplicateNodePath, "*", SearchOption.AllDirectories).ToList(); + var allDuplicateFolders = Directory.GetDirectories(duplicateNodePath, "*", SearchOption.AllDirectories).ToList(); + + // Arrange + var dlgMock = new Mock(); + dlgMock.Setup(m => m.Show(It.IsAny(), It.IsAny(), It.IsAny(), + It.Is(x => x == MessageBoxButton.OKCancel || x == MessageBoxButton.OK), It.IsAny())) + .Returns(MessageBoxResult.OK); + MessageBoxService.OverrideMessageBoxDuringTests(dlgMock.Object); + + var vm = new PublishPackageViewModel(this.ViewModel); + vm.AddAllFilesAfterSelection(allFiles); + vm.AddAllFilesAfterSelection(allDuplicateFiles); + + var additionalFiles = vm.AdditionalFiles; + + var packageContents = vm.PackageContents; + Assert.AreEqual(packageContents.Count, 2); // We expect 2 separate root item here + + // Assert + // that the PackageContents contains the correct number of items + var allFilesAndFoldres = PackageItemRootViewModel.GetFiles(packageContents.ToList()); + + // add 2 root folders + Assert.AreEqual(allFilesAndFoldres.Count, allFiles.Count + allFolders.Count + (allDuplicateFiles.Count) + (allDuplicateFolders.Count) + 2); + Assert.AreEqual(allFilesAndFoldres.Count(i => i.DependencyType.Equals(DependencyType.File)), additionalFiles.Count); + + // add 2 root folders + Assert.AreEqual(allFilesAndFoldres.Count(i => i.DependencyType.Equals(DependencyType.Folder)), allFolders.Count + (allDuplicateFolders.Count) + 2); + + // Arrange + // try to add the folder one level above the two root folders + string commonRootPath = Path.Combine(TestDirectory, "core", "docbrowser\\pkgs\\RootPackageFolder"); + var commonRootFiles = Directory.GetFiles(commonRootPath, "*", SearchOption.AllDirectories).ToList(); + var commonRootFolders = Directory.GetDirectories(commonRootPath, "*", SearchOption.AllDirectories).ToList(); + + vm.AddAllFilesAfterSelection(commonRootFiles, commonRootPath); + packageContents = vm.PackageContents; + + Assert.AreEqual(packageContents.Count, 1); // We expect only 1 common root item now + + // Assert + // that the PackageContents still contains the correct number of items + allFilesAndFoldres = PackageItemRootViewModel.GetFiles(packageContents.First()); + + // add 1 root folder + Assert.AreEqual(allFilesAndFoldres.Count, (commonRootFiles.Count) + (commonRootFolders.Count) + 1); + Assert.AreEqual(allFilesAndFoldres.Count(i => i.DependencyType.Equals(DependencyType.File)), additionalFiles.Count); + + // add 1 root folder1 + Assert.AreEqual(allFilesAndFoldres.Count(i => i.DependencyType.Equals(DependencyType.Folder)), (commonRootFolders.Count) + 1); + } + + + [Test] + public void GetAllFilesReturnsEqualsPackageContents() + { + string nodePath = Path.Combine(TestDirectory, "core", "docbrowser\\pkgs\\RootPackageFolder\\PackageWithNodeDocumentation"); + var allFiles = Directory.GetFiles(nodePath, "*", SearchOption.AllDirectories).ToList(); + var vm = new PublishPackageViewModel(this.ViewModel); + + ViewModel.OnRequestPackagePublishDialog(vm); + + vm.AddAllFilesAfterSelection(allFiles); + + int packageContentsCount = 0; + + foreach (var rootItem in vm.PackageContents) + { + var items = PackageItemRootViewModel.GetFiles(rootItem).Where(x => !x.DependencyType.Equals(DependencyType.Folder)).ToList(); + packageContentsCount += items.Count; + } + + var files = vm.GetAllFiles(); + + // check if GetAllFiles return the same number of files as stored inside the PackageContents + Assert.AreEqual(packageContentsCount, files.Count()); + } + + [Test] + public void AssertGetPreBuildRootItemViewModelReturnsCorrectItem() + { + string nodePath = Path.Combine(TestDirectory, "core", "docbrowser\\pkgs\\RootPackageFolder\\PackageWithNodeDocumentation"); + var allFiles = Directory.GetFiles(nodePath, "*", SearchOption.AllDirectories).ToList(); + var vm = new PublishPackageViewModel(this.ViewModel); + + ViewModel.OnRequestPackagePublishDialog(vm); + + vm.AddAllFilesAfterSelection(allFiles); + + var testPath = Path.Combine(TestDirectory, "core", "docbrowser\\pkgs\\RootPackageFolder\\", "TestPath"); + var testPkgName = @"Test Package"; + + var rootItemPreview = vm.GetPreBuildRootItemViewModel(testPath, testPkgName, allFiles); + var allRootItems = PackageItemRootViewModel.GetFiles(rootItemPreview); + + var folders = allRootItems.Count(x => x.DependencyType.Equals(DependencyType.Folder)); + var files = allRootItems.Count(x => !x.DependencyType.Equals(DependencyType.Folder)); + + Assert.AreEqual(5, folders); + Assert.AreEqual(4, files); + } + + + [Test] + public void AssertGetExistingRootItemViewModelReturnsCorrectItem() + { + string nodePath = Path.Combine(TestDirectory, "core", "docbrowser\\pkgs\\RootPackageFolder\\PackageWithNodeDocumentation"); + var allFiles = Directory.GetFiles(nodePath, "*", SearchOption.AllDirectories).ToList(); + var vm = new PublishPackageViewModel(this.ViewModel); + + ViewModel.OnRequestPackagePublishDialog(vm); + + vm.AddAllFilesAfterSelection(allFiles); + + var testPath = Path.Combine(TestDirectory, "core", "docbrowser\\pkgs\\RootPackageFolder\\", "TestPath"); + var testPkgName = @"Test Package"; + + // We expect a single root item for this test + var rootItem = vm.PackageContents.First(); + var allRootItems = PackageItemRootViewModel.GetFiles(vm.PackageContents.First()); + + var rootItemPreview = vm.GetExistingRootItemViewModel(testPath, testPkgName); + var testRootItems = PackageItemRootViewModel.GetFiles(rootItemPreview); + + + Assert.AreNotEqual(testPkgName, rootItem.DisplayName); + Assert.AreEqual(testPkgName, rootItemPreview.DisplayName); + + var foldersCount = allRootItems.Count(x => x.DependencyType.Equals(DependencyType.Folder)); + var filesCount = allRootItems.Count(x => !x.DependencyType.Equals(DependencyType.Folder)); + + var testFoldersCount = testRootItems.Count(x => x.DependencyType.Equals(DependencyType.Folder)); + var testFilesCount = testRootItems.Count(x => !x.DependencyType.Equals(DependencyType.Folder)); + + Assert.AreEqual(foldersCount, testFoldersCount); + Assert.AreEqual(filesCount, testFilesCount); + } + + + [Test] + public void RemoveFilesUpdatesPerviewContentItem() + { + // Arrange + string nodePath = Path.Combine(TestDirectory, "core", "docbrowser\\pkgs\\RootPackageFolder\\PackageWithNodeDocumentation"); + var allFiles = Directory.GetFiles(nodePath, "*", SearchOption.AllDirectories).ToList(); + var vm = new PublishPackageViewModel(this.ViewModel); + + ViewModel.OnRequestPackagePublishDialog(vm); + + vm.AddAllFilesAfterSelection(allFiles); + + // Act + Assert.AreEqual(1, vm.PackageContents.Count); + Assert.AreEqual(1, vm.PreviewPackageContents.Count); + var rootItem = vm.PackageContents.First(); + + + // Assert + vm.RemoveItemCommand.Execute(rootItem); + Assert.AreEqual(0, vm.PackageContents.Count); + Assert.AreEqual(0, vm.PreviewPackageContents.Count); + } + + + [Test] + public void RemoveAllChildrenFilesUpdatesContentItem() + { + // Arrange + string nodePath = Path.Combine(TestDirectory, "core", "docbrowser\\pkgs\\RootPackageFolder\\PackageWithNodeDocumentation"); + var allFiles = Directory.GetFiles(nodePath, "*", SearchOption.AllDirectories).ToList(); + var vm = new PublishPackageViewModel(this.ViewModel); + + ViewModel.OnRequestPackagePublishDialog(vm); + + vm.AddAllFilesAfterSelection(allFiles); + + // Act + Assert.AreEqual(1, vm.PackageContents.Count); + Assert.AreEqual(1, vm.PreviewPackageContents.Count); + var childItems = vm.PackageContents.First().ChildItems; + + // Assert + foreach (var child in childItems) + { + vm.RemoveItemCommand.Execute(child); + } + + Assert.AreEqual(0, vm.PackageContents.Count); + Assert.AreEqual(0, vm.PreviewPackageContents.Count); + } + + + [Test] + public void CanRemoveCustomDefinitionDependencyTypes() + { + // Arrange + string nodePath = Path.Combine(TestDirectory, "core", "docbrowser\\pkgs\\_AllFileTypesPackageDocs"); + string dyfPath = Path.Combine(TestDirectory, "core", "docbrowser\\pkgs\\_AllFileTypesPackageDocs\\dyf\\3DView by BoundingBox.dyf"); + var allFiles = Directory.GetFiles(nodePath, "*", SearchOption.AllDirectories).ToList(); + var vm = new PublishPackageViewModel(this.ViewModel); + + ViewModel.OnRequestPackagePublishDialog(vm); + + vm.AddAllFilesAfterSelection(allFiles); + + // Act + // One root folder, one custom definition + Assert.AreEqual(2, vm.PackageContents.Count); + + var customDefinition = vm.PackageContents.Where(x => x.DependencyType.Equals(DependencyType.CustomNode)); + var rootFolder = vm.PackageContents.Where(x => x.DependencyType.Equals(DependencyType.Folder)); + + Assert.AreEqual(1, customDefinition.Count()); + Assert.AreEqual(1, rootFolder.Count()); + + var childItems = PackageItemRootViewModel.GetFiles(rootFolder.First()); + var customPreviewDefinition = childItems.Where(x => x.DependencyType.Equals(DependencyType.CustomNodePreview)); + + Assert.AreEqual(1, customPreviewDefinition.Count()); + + // Assert + // Remove using the custom definition + vm.RemoveItemCommand.Execute(customDefinition.First()); + + var updatedCustomDefinitionCount = vm.PackageContents.Count(x => x.DependencyType.Equals(DependencyType.CustomNode)); + var updatedCustomPreviewDefinitionCount = PackageItemRootViewModel.GetFiles(rootFolder.First()). + Count(x => x.DependencyType.Equals(DependencyType.CustomNodePreview)); + + Assert.AreEqual(0, updatedCustomDefinitionCount, updatedCustomPreviewDefinitionCount); + + // Add + vm.AddAllFilesAfterSelection(new List() { dyfPath }); + + updatedCustomDefinitionCount = vm.PackageContents.Count(x => x.DependencyType.Equals(DependencyType.CustomNode)); + updatedCustomPreviewDefinitionCount = PackageItemRootViewModel.GetFiles(rootFolder.First()). + Count(x => x.DependencyType.Equals(DependencyType.CustomNodePreview)); + + Assert.AreEqual(1, updatedCustomDefinitionCount, updatedCustomPreviewDefinitionCount); + + // Remove using the preview + vm.RemoveItemCommand.Execute(customPreviewDefinition.First()); + + updatedCustomDefinitionCount = vm.PackageContents.Count(x => x.DependencyType.Equals(DependencyType.CustomNode)); + updatedCustomPreviewDefinitionCount = PackageItemRootViewModel.GetFiles(rootFolder.First()). + Count(x => x.DependencyType.Equals(DependencyType.CustomNodePreview)); + + Assert.AreEqual(0, updatedCustomDefinitionCount, updatedCustomPreviewDefinitionCount); + } + + [Test] + public void CanRemoveAllDependencyTypes() + { + // Arrange + string nodePath = Path.Combine(TestDirectory, "core", "docbrowser\\pkgs\\_AllFileTypesPackageDocs"); + var allFiles = Directory.GetFiles(nodePath, "*", SearchOption.AllDirectories).ToList(); + var vm = new PublishPackageViewModel(this.ViewModel); + + ViewModel.OnRequestPackagePublishDialog(vm); + + vm.AddAllFilesAfterSelection(allFiles); + + // Act + var rootFolder = vm.PackageContents.Where(x => x.DependencyType.Equals(DependencyType.Folder)); + + Assert.AreEqual(1, rootFolder.Count()); + + var childItems = PackageItemRootViewModel.GetFiles(rootFolder.First()); + + var files = childItems.Where(x => x.DependencyType.Equals(DependencyType.File)); + var dyfPreviewFiles = childItems.Where(x => x.DependencyType.Equals(DependencyType.CustomNodePreview)); + var folders = childItems.Where(x => x.DependencyType.Equals(DependencyType.Folder)); + + Assert.AreEqual(4, files.Count()); + Assert.AreEqual(1, dyfPreviewFiles.Count()); + Assert.AreEqual(4, folders.Count()); + + // Assert + Assert.DoesNotThrow(() => vm.RemoveItemCommand.Execute(dyfPreviewFiles.First())); + Assert.DoesNotThrow(() => vm.RemoveItemCommand.Execute(files.First(x => x.DisplayName.EndsWith(".json")))); + Assert.DoesNotThrow(() => vm.RemoveItemCommand.Execute(files.First(x => x.DisplayName.EndsWith(".xml")))); + + // At this point, only one root item remains, not the original one but the 'doc' folder + // The original root item no longer contains a file, therefore it was removed + // This makes sense as we don't want to try to establish 'common parent' for folders that maybe too far apart in a tree structure + rootFolder = vm.PackageContents.Where(x => x.DependencyType.Equals(DependencyType.Folder)); + Assert.AreEqual(1, rootFolder.Count()); + Assert.AreEqual(3, PackageItemRootViewModel.GetFiles(rootFolder.First()).Count()); + + Assert.DoesNotThrow(() => vm.RemoveItemCommand.Execute(rootFolder.First())); + Assert.IsFalse(vm.PackageContents.Any()); + } + + + [Test] + public void CancelCommandClearsAllData() + { + // Arrange + string nodePath = Path.Combine(TestDirectory, "core", "docbrowser\\pkgs\\RootPackageFolder\\PackageWithNodeDocumentation"); + var allFiles = Directory.GetFiles(nodePath, "*", SearchOption.AllDirectories).ToList(); + var vm = new PublishPackageViewModel(this.ViewModel); + + Assert.AreEqual(0, vm.PackageContents.Count); + Assert.AreEqual(0, vm.PreviewPackageContents.Count); + + ViewModel.OnRequestPackagePublishDialog(vm); + + vm.AddAllFilesAfterSelection(allFiles); + + // Act + Assert.AreEqual(1, vm.PackageContents.Count); + Assert.AreEqual(1, vm.PreviewPackageContents.Count); + + vm.CancelCommand.Execute(); + + // Assert + Assert.AreEqual(0, vm.PackageContents.Count); + Assert.AreEqual(0, vm.PreviewPackageContents.Count); + } + + [Test] + public void AssertPreviewPackageDefaultFolderStructureEqualsPublishLocalPackageResults() + { + var packageName = "SingleFolderPublishPackage"; + var pathManager = this.ViewModel.Model.PathManager as PathManager; + var publishPath = Path.Combine(pathManager.DefaultPackagesDirectory, packageName); + + string nodePath = Path.Combine(TestDirectory, "core", "docbrowser\\pkgs\\SingleFolderPublishPackageDocs"); + var allFiles = Directory.GetFiles(nodePath, "*", SearchOption.AllDirectories).ToList(); + + //now lets publish this package. + var newPkgVm = new PublishPackageViewModel(this.ViewModel); + + ViewModel.OnRequestPackagePublishDialog(newPkgVm); + + newPkgVm.AddAllFilesAfterSelection(allFiles); + + var previewFilesAndFolders = PackageItemRootViewModel.GetFiles(newPkgVm.PreviewPackageContents.ToList()); + var previewFiles = previewFilesAndFolders.Where(x => !x.DependencyType.Equals(DependencyType.Folder)); + var previewFolders = previewFilesAndFolders.Where(x => x.DependencyType.Equals(DependencyType.Folder)); + + newPkgVm.Name = "SingleFolderPublishPackage"; + newPkgVm.MajorVersion = "0"; + newPkgVm.MinorVersion = "0"; + newPkgVm.BuildVersion = "1"; + newPkgVm.PublishLocallyCommand.Execute(); + + Assert.IsTrue(Directory.Exists(publishPath)); + + // Arrange + var createdFiles = Directory.GetFiles(publishPath, "*", SearchOption.AllDirectories).ToList(); + var createdFolders = Directory.GetDirectories(publishPath, "*", SearchOption.AllDirectories).ToList(); + + // Assert + Assert.AreEqual(createdFiles.Count(), previewFiles.Count()); + Assert.AreEqual(createdFolders.Count(), previewFolders.Count() - 1); // discount one for the root folder is included + + // Clean up + Directory.Delete(publishPath, true); + } + + [Test] + public void AssertPreviewPackageRetainFolderStructureEqualsPublishLocalPackageResults() + { + var packageName = "SingleFolderPublishPackage"; + var pathManager = this.ViewModel.Model.PathManager as PathManager; + var publishPath = Path.Combine(pathManager.DefaultPackagesDirectory, packageName); + + string nodePath = Path.Combine(TestDirectory, "core", "docbrowser\\pkgs\\SingleFolderPublishPackageDocs"); + var allFiles = Directory.GetFiles(nodePath, "*", SearchOption.AllDirectories).ToList(); + + //now lets publish this package. + var newPkgVm = new PublishPackageViewModel(this.ViewModel); + newPkgVm.RetainFolderStructureOverride = true; + + ViewModel.OnRequestPackagePublishDialog(newPkgVm); + + newPkgVm.AddAllFilesAfterSelection(allFiles); + + var previewFilesAndFolders = PackageItemRootViewModel.GetFiles(newPkgVm.PreviewPackageContents.ToList()); + var previewFiles = previewFilesAndFolders.Where(x => !x.DependencyType.Equals(DependencyType.Folder)); + var previewFolders = previewFilesAndFolders.Where(x => x.DependencyType.Equals(DependencyType.Folder)); + + newPkgVm.Name = "SingleFolderPublishPackage"; + newPkgVm.MajorVersion = "0"; + newPkgVm.MinorVersion = "0"; + newPkgVm.BuildVersion = "1"; + newPkgVm.PublishLocallyCommand.Execute(); + + Assert.IsTrue(Directory.Exists(publishPath)); + + // Arrange + var createdFiles = Directory.GetFiles(publishPath, "*", SearchOption.AllDirectories).ToList(); + var createdFolders = Directory.GetDirectories(publishPath, "*", SearchOption.AllDirectories).ToList(); + + // Assert + Assert.AreEqual(createdFiles.Count(), previewFiles.Count() + 1); + Assert.AreEqual(1, createdFolders.Count(), previewFolders.Count()); // One subfolder was created + + // Clean up + Directory.Delete(publishPath, true); + } + + [Test] + public void AssertPublishLocalHandleType() + { + var packageName = "SingleFolderPublishPackage"; + var pathManager = this.ViewModel.Model.PathManager as PathManager; + var publishPath = Path.Combine(pathManager.DefaultPackagesDirectory, packageName); + + string nodePath = Path.Combine(TestDirectory, "core", "docbrowser\\pkgs\\SingleFolderPublishPackageDocs"); + var allFiles = Directory.GetFiles(nodePath, "*", SearchOption.AllDirectories).ToList(); + + //now lets publish this package. + var newPkgVm = new PublishPackageViewModel(this.ViewModel); + newPkgVm.RetainFolderStructureOverride = true; + + ViewModel.OnRequestPackagePublishDialog(newPkgVm); + + newPkgVm.AddAllFilesAfterSelection(allFiles); + + var previewFilesAndFolders = PackageItemRootViewModel.GetFiles(newPkgVm.PreviewPackageContents.ToList()); + var previewFiles = previewFilesAndFolders.Where(x => !x.DependencyType.Equals(DependencyType.Folder)); + var previewFolders = previewFilesAndFolders.Where(x => x.DependencyType.Equals(DependencyType.Folder)); + + newPkgVm.Name = "SingleFolderPublishPackage"; + newPkgVm.MajorVersion = "0"; + newPkgVm.MinorVersion = "0"; + newPkgVm.BuildVersion = "1"; + newPkgVm.PublishLocallyCommand.Execute(); + + // Assert + Assert.AreEqual(PackageUploadHandle.UploadType.Local, newPkgVm.UploadType); + + // Clean up + Directory.Delete(publishPath, true); + } + #endregion } } diff --git a/test/DynamoCoreWpfTests/PackageManager/PackageManagerViewExtensionTests.cs b/test/DynamoCoreWpfTests/PackageManager/PackageManagerViewExtensionTests.cs index 15787bb2fca..4aca8e5f17f 100644 --- a/test/DynamoCoreWpfTests/PackageManager/PackageManagerViewExtensionTests.cs +++ b/test/DynamoCoreWpfTests/PackageManager/PackageManagerViewExtensionTests.cs @@ -148,7 +148,7 @@ public void PackageManagerViewExtensionHasCorrectNumberOfRequestedExtensions() } [Test] - async public void LateLoadedViewExtensionsHaveMethodsCalled() + public void LateLoadedViewExtensionsHaveMethodsCalled() { var pkgviewExtension = View.viewExtensionManager.ViewExtensions.OfType().FirstOrDefault(); var pkgDir = Path.Combine(PackagesDirectory, "SampleViewExtension"); diff --git a/test/DynamoCoreWpfTests/PackagePathTests.cs b/test/DynamoCoreWpfTests/PackagePathTests.cs index d3c5f1aadfa..3c2f4fcb444 100644 --- a/test/DynamoCoreWpfTests/PackagePathTests.cs +++ b/test/DynamoCoreWpfTests/PackagePathTests.cs @@ -1,4 +1,4 @@ -īģŋ + using System.IO; using System.Linq; using System.Reflection; @@ -233,17 +233,17 @@ public void InstalledPackagesContainsCorrectNumberOfPackages() vm.packageLoader.PackagesLoaded += pkgsLoadedDelegate; vm.packageLoader.LoadAll(vm.loadPackageParams); - Assert.AreEqual(19, vm.packageLoader.LocalPackages.Count()); + Assert.AreEqual(20, vm.packageLoader.LocalPackages.Count()); Assert.AreEqual(true, packagesLoaded); var installedPackagesViewModel = new InstalledPackagesViewModel(ViewModel, vm.packageLoader); - Assert.AreEqual(19, installedPackagesViewModel.LocalPackages.Count); + Assert.AreEqual(20, installedPackagesViewModel.LocalPackages.Count); var installedPackagesView = new Dynamo.Wpf.Controls.InstalledPackagesControl(); installedPackagesView.DataContext = installedPackagesViewModel; DispatcherUtil.DoEvents(); - Assert.AreEqual(19, installedPackagesView.SearchResultsListBox.Items.Count); + Assert.AreEqual(20, installedPackagesView.SearchResultsListBox.Items.Count); Assert.AreEqual(2, installedPackagesView.Filters.Items.Count); vm.packageLoader.PackagesLoaded -= libraryLoader.LoadPackages; @@ -267,7 +267,7 @@ public void RemoveAddPackagePathChangesInstalledPackageState() // Load packages in package path. vm.packageLoader.LoadAll(vm.loadPackageParams); - Assert.AreEqual(19, vm.packageLoader.LocalPackages.Count()); + Assert.AreEqual(20, vm.packageLoader.LocalPackages.Count()); // Remove package path. vm.DeletePathCommand.Execute(0); @@ -323,7 +323,7 @@ public void EnableCustomPackagePathsLoadsPackagesOnClosingPreferences() vm.SaveSettingCommand.Execute(null); // packages are expected to load from 'PackagesDirectory' above when toggle is turned off - Assert.AreEqual(19, vm.packageLoader.LocalPackages.Count()); + Assert.AreEqual(20, vm.packageLoader.LocalPackages.Count()); vm.packageLoader.PackagesLoaded -= libraryLoader.LoadPackages; vm.packageLoader.RequestLoadNodeLibrary -= libraryLoader.LoadLibraryAndSuppressZTSearchImport; diff --git a/test/DynamoCoreWpfTests/PublishPackageViewModelTests.cs b/test/DynamoCoreWpfTests/PublishPackageViewModelTests.cs index a40615af684..34067d9d139 100644 --- a/test/DynamoCoreWpfTests/PublishPackageViewModelTests.cs +++ b/test/DynamoCoreWpfTests/PublishPackageViewModelTests.cs @@ -6,10 +6,10 @@ using Dynamo.Graph.Nodes.CustomNodes; using Dynamo.Graph.Workspaces; using Dynamo.PackageManager; +using Dynamo.PackageManager.UI; using Dynamo.Tests; -using NUnit.Framework; using Moq; -using Dynamo.PackageManager.UI; +using NUnit.Framework; namespace DynamoCoreWpfTests { @@ -17,7 +17,7 @@ namespace DynamoCoreWpfTests public class PublishPackageViewModelTests: DynamoViewModelUnitTest { - [Test, Category("Failure")] + [Test] public void AddingDyfRaisesCanExecuteChangeOnDelegateCommand() { @@ -99,7 +99,34 @@ public void CanPublishLateInitializedJsonCustomNode() } - [Test, Category("Failure")] + [Test] + public void NewPackageDoesNotThrow_NativeBinaryIsAddedAsAdditionalFile_NotBinary() + { + string packagesDirectory = Path.Combine(TestDirectory, "pkgs"); + + var pathManager = new Mock(); + pathManager.SetupGet(x => x.PackagesDirectories).Returns(() => new List { packagesDirectory }); + + var loader = new PackageLoader(pathManager.Object); + loader.LoadAll(new LoadPackageParams + { + Preferences = ViewModel.Model.PreferenceSettings + }); + + PublishPackageViewModel vm = null; + var package = loader.LocalPackages.FirstOrDefault(x => x.Name == "package with native assembly"); + Assert.DoesNotThrow(() => + { + vm = PublishPackageViewModel.FromLocalPackage(ViewModel, package); + }); + + Assert.AreEqual(1, vm.AdditionalFiles.Count); + Assert.AreEqual(0, vm.Assemblies.Count); + + Assert.AreEqual(PackageUploadHandle.State.Ready, vm.UploadState); + } + + [Test] public void NewPackageVersionUpload_DoesNotThrowExceptionWhenDLLIsLoadedSeveralTimes() { string packagesDirectory = Path.Combine(TestDirectory, "pkgs"); @@ -123,7 +150,7 @@ public void NewPackageVersionUpload_DoesNotThrowExceptionWhenDLLIsLoadedSeveralT Assert.AreEqual(PackageUploadHandle.State.Error, vm.UploadState); } - [Test, Category("Failure")] + [Test] public void NewPackageVersionUpload_CanAddAndRemoveFiles() { string packagesDirectory = Path.Combine(TestDirectory, "pkgs"); diff --git a/test/DynamoCoreWpfTests/SerializationTests.cs b/test/DynamoCoreWpfTests/SerializationTests.cs index e41eb6d3dc2..aae2f7e7de8 100644 --- a/test/DynamoCoreWpfTests/SerializationTests.cs +++ b/test/DynamoCoreWpfTests/SerializationTests.cs @@ -962,7 +962,7 @@ private void ExecutionEvents_GraphPostExecution(Dynamo.Session.IExecutionSession /// /// The path to a .dyn file. This parameter is supplied /// by the test framework. - [Test, TestCaseSource(nameof(FindWorkspaces)), Category("JsonTestExclude"), Category("Failure")] + [Test, TestCaseSource(nameof(FindWorkspaces)), Category("JsonTestExclude")] public void SerializationTest(string filePath) { DoWorkspaceOpenAndCompareView(filePath, @@ -981,7 +981,7 @@ public void SerializationTest(string filePath) /// /// The path to a .dyn file. This parameter is supplied /// by the test framework. - [Test, TestCaseSource(nameof(FindWorkspaces)), Category("JsonTestExclude"), Category("Failure")] + [Test, TestCaseSource(nameof(FindWorkspaces)), Category("JsonTestExclude")] public void SerializationNonGuidIdsTest(string filePath) { modelsGuidToIdMap.Clear(); @@ -1067,7 +1067,7 @@ public void NewCustomNodeSaveAndLoadPt2() File.Delete(savePath); } - [Test, Category("Failure")] + [Test] public void AllTypesSerialize() { var customNodeTestPath = Path.Combine(TestDirectory, @"core\serialization\serialization.dyn"); diff --git a/test/DynamoCoreWpfTests/ViewExtensions/DocumentationBrowserViewExtensionTests.cs b/test/DynamoCoreWpfTests/ViewExtensions/DocumentationBrowserViewExtensionTests.cs index 2aeb2ef082c..6d3e73e72d8 100644 --- a/test/DynamoCoreWpfTests/ViewExtensions/DocumentationBrowserViewExtensionTests.cs +++ b/test/DynamoCoreWpfTests/ViewExtensions/DocumentationBrowserViewExtensionTests.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Concurrent; using System.Collections.Generic; using System.Globalization; using System.IO; @@ -6,6 +7,7 @@ using System.Reflection; using System.Text; using System.Threading; +using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using Dynamo; @@ -17,11 +19,13 @@ using Dynamo.Utilities; using Dynamo.ViewModels; using Dynamo.Wpf.Extensions; +using DynamoCoreWpfTests.Utility; using NUnit.Framework; namespace DynamoCoreWpfTests { - [TestFixture, Category("Failure")] + [TestFixture] + [Apartment(ApartmentState.STA)] public class DocumentationBrowserViewExtensionTests : DynamoTestUIBase { private const string docsTabName = "Documentation Browser"; @@ -144,7 +148,7 @@ public void CanCreatePackageNodeDocumentationAndLoadImages() Assert.IsTrue(!string.IsNullOrEmpty(browserView.VirtualFolderPath)); Assert.IsTrue(Directory.Exists(browserView.VirtualFolderPath)); //Check that the virtual folder will be created in the Package/doc folder so images will be loaded correctly - Assert.IsTrue(browserView.VirtualFolderPath.Replace("\\", "/").Contains(packageDocPath.Replace("\\", "/"))); + Assert.IsTrue(browserView.VirtualFolderPath.Contains(packageDocPath)); Assert.IsTrue(htmlContent.Contains(expectedImageContent)); } @@ -549,7 +553,7 @@ public void CanCreateNodeDocumenationHtmlFromNodeAnnotationEventArgsWithPackageN var nodeName = "Package.Hello"; var nodeRename = "New node name"; var expectedNodeDocumentationTitle = $"

{nodeRename}

"; - var expectedNodeDocumentationNamespace = $"

Package.{nodeName}

"; + var expectedNodeDocumentationNamespace = $"

PackageWithDocs.{nodeName}

"; var expectedAddtionalNodeDocumentationHeader = @"

Hello Dynamo!

"; var expectedAddtionalNodeDocumentationImage = String.Format(@"", Path.GetFileName(localImagePath)); @@ -590,7 +594,7 @@ public void CanGetNodeDocumentationMarkdownFromPackageDocumentationManager() { // Arrange var packageName = "Package"; - var nodeWithDocumentation = "Package.Package.Hello"; + var nodeWithDocumentation = "PackageWithDocs.Package.Hello"; var nodeWithoutDocumentation = "Package.Package.Package"; // Assert @@ -710,9 +714,13 @@ private string RequestNodeDocs(Dynamo.Graph.Nodes.NodeModel node) return GetSidebarDocsBrowserContents(); } - [Test] + [Test,Category("Failure")] public void AddGraphInSpecificLocationToWorkspace() { + //TODO see this issue: + //https://github.com/nunit/nunit/issues/1200 + //we somehow need use single threaded sync context to force webview2 async initalization on this thread. + //unfortunately it passes locally but then still fails on master-15. var testDirectory = GetTestDirectory(ExecutingDirectory); var tempDynDirectory = Path.Combine(testDirectory, "Temp Test Path"); var dynFileName = Path.Combine(testDirectory, @"UI\BasicAddition.dyn"); @@ -744,23 +752,19 @@ public void AddGraphInSpecificLocationToWorkspace() Assert.AreEqual(ViewModel.Model.CurrentWorkspace.Nodes.Count(), 1); var node = ViewModel.Model.CurrentWorkspace.Nodes.FirstOrDefault(); + RequestNodeDocs(node); - - // Show the DocumentationBrowser so we can get the DocumentationBrowserViewModel - ShowDocsBrowser(); var docsView = GetDocsTabItem().Content as DocumentationBrowserView; var docsViewModel = docsView.DataContext as DocumentationBrowserViewModel; - //Using reflection change the path of the dyn file for using the created directory (which has empty spaces in the name) - FieldInfo fi = typeof(DocumentationBrowserViewModel).GetField("graphPath", BindingFlags.NonPublic | BindingFlags.Instance); - fi.SetValue(docsViewModel, insertDynFilePath); + docsViewModel.GraphPath = insertDynFilePath; //Insert the Graph into the current workspace docsViewModel.InsertGraph(); } - //Validates that we have 5 nodes the CurrentWorkspace (after the graph was added) - Assert.AreEqual(ViewModel.Model.CurrentWorkspace.Nodes.Count(), 5); + Assert.AreEqual(ViewModel.Model.CurrentWorkspace.Nodes.Count(), 5); + DispatcherUtil.DoEvents(); } [Test] @@ -785,20 +789,52 @@ public void Validate_GetGraphLinkFromMDLocation() var docsView = GetDocsTabItem().Content as DocumentationBrowserView; var docsViewModel = docsView.DataContext as DocumentationBrowserViewModel; - //Due that graphPath is a private we use reflection to get the value. - FieldInfo type = typeof(DocumentationBrowserViewModel).GetField("graphPath", BindingFlags.NonPublic | BindingFlags.Instance); - var graphPathValue = type.GetValue(docsViewModel); + var graphPathValue = docsViewModel.GraphPath; var dynFileName = Path.GetFileNameWithoutExtension(docsViewModel.Link.AbsolutePath) + ".dyn"; - //This will return a path with the NodeHelpSharedDocs + dyn file name + //This will return a path with the pkg doc + dyn file name var sharedFilesPath = Path.Combine(DocumentationBrowserView.SharedDocsDirectoryName, dynFileName); Assert.IsNotNull(graphPathValue); Assert.IsTrue(!string.IsNullOrEmpty(graphPathValue.ToString())); - //Chech that the pathPath contains "NodeHelpSharedDocs//dynfilename" - Assert.That(graphPathValue.ToString().Contains(sharedFilesPath)); + //check that the pathPath contains "NodeHelpSharedDocs//dynfilename" + Assert.That(graphPathValue.Contains(sharedFilesPath)); + } + [Test] + public void Validate_GetGraphLinkFromPackage() + { + var nodeName = "Package.Hello"; + + // Act + this.ViewModel.ExecuteCommand( + new DynamoModel.CreateNodeCommand( + Guid.NewGuid().ToString(), nodeName, 0, 0, false, false) + ); + + //Validates that we have just one node in the CurrentWorkspace + Assert.AreEqual(ViewModel.Model.CurrentWorkspace.Nodes.Count(), 1); + + var node = ViewModel.Model.CurrentWorkspace.Nodes.FirstOrDefault(); + + //In this call the GetGraphLinkFromMDLocation() method is executed internally + RequestNodeDocs(node); + + // Show the DocumentationBrowser so we can get the DocumentationBrowserViewModel + ShowDocsBrowser(); + var docsView = GetDocsTabItem().Content as DocumentationBrowserView; + var docsViewModel = docsView.DataContext as DocumentationBrowserViewModel; + + var graphPathValue = docsViewModel.GraphPath; + + var dynFileName = Path.GetFileNameWithoutExtension(docsViewModel.Link.AbsolutePath) + ".dyn"; + + Assert.IsNotNull(graphPathValue); + Assert.IsTrue(!string.IsNullOrEmpty(graphPathValue)); + + //check that the path contains "packageWithDocumentation" + Assert.That(graphPathValue.Contains(Path.Combine("PackageWithNodeDocumentation","doc",dynFileName))); } #region Helpers diff --git a/test/DynamoCoreWpfTests/WorkspaceSaving.cs b/test/DynamoCoreWpfTests/WorkspaceSaving.cs index 44f8bcafa5a..890d93cfaab 100644 --- a/test/DynamoCoreWpfTests/WorkspaceSaving.cs +++ b/test/DynamoCoreWpfTests/WorkspaceSaving.cs @@ -648,6 +648,63 @@ public void CanSaveAsNewWorkspaceWithNewGuids() Assert.AreEqual(legacyLinterId, newLinterId); } + [Test] + [Category("UnitTests")] + public void RemovePIIDataFromWorkspace() + { + string graphWithPIIDataPath = Path.Combine(TestDirectory, (@"UI\GraphWithPIIData.dyn")); + ViewModel.OpenCommand.Execute(graphWithPIIDataPath); + + var noteWithEmailId = "75ccaa00c10c4aedab9250a6d9720951"; + var nodeWithWebPageId = "cd09502288c448348bd2d0bcd0a3c088"; + var nodeWithDirectoryId = "5e1f42a0cc8d427cbd7fde969a988d5f"; + var noteWithCreditCardsId = "2126a32c0f474a5887205bd1b3061d8a"; + var noteWithSSNsId = "5bcdbd22f679417cb7e3bd19b2d984d3"; + var nodeWithIPAddressId = "8d58c36ff11d4eb89025f73b4527d55a"; + var nodeWithDatesId = "7d471f2e3b7a4cc8946aa4101fbf348a"; + + JObject workspaceWithPIIData = ViewModel.CurrentSpaceViewModel.GetJsonRepresentation(); + + var valueWhitEmail = PIIDetector.GetNoteValue(workspaceWithPIIData, noteWithEmailId); + var valueWithWebPage = PIIDetector.GetNodeValue(workspaceWithPIIData, nodeWithWebPageId, "Code"); + var valueWithDirectory = PIIDetector.GetNodeValue(workspaceWithPIIData, nodeWithDirectoryId, "InputValue"); + var valueWithDirectory2 = PIIDetector.GetNodeValue(workspaceWithPIIData, nodeWithDirectoryId, "HintPath"); + var valueWithCreditCards = PIIDetector.GetNoteValue(workspaceWithPIIData, noteWithCreditCardsId); + var valueWithSSNs = PIIDetector.GetNoteValue(workspaceWithPIIData, noteWithSSNsId); + var valueWithIPAddress = PIIDetector.GetNodeValue(workspaceWithPIIData, nodeWithIPAddressId, "InputValue"); + var valueWithDates = PIIDetector.GetNodeValue(workspaceWithPIIData, nodeWithDatesId, "InputValue"); + + Tuple workspaceWithoutPIIDataResult = PIIDetector.RemovePIIData(ViewModel.CurrentSpaceViewModel.GetJsonRepresentation()); + Assert.IsTrue(workspaceWithoutPIIDataResult.Item2); + + var valueWithoutEmail = PIIDetector.GetNoteValue(workspaceWithoutPIIDataResult.Item1, noteWithEmailId); + var valueWithoutWebPage = PIIDetector.GetNodeValue(workspaceWithoutPIIDataResult.Item1, nodeWithWebPageId, "Code"); + var valueWithoutDirectory = PIIDetector.GetNodeValue(workspaceWithoutPIIDataResult.Item1, nodeWithDirectoryId, "InputValue"); + var valueWithoutDirectory2 = PIIDetector.GetNodeValue(workspaceWithoutPIIDataResult.Item1, nodeWithDirectoryId, "HintPath"); + var valueWithoutCreditCards = PIIDetector.GetNoteValue(workspaceWithoutPIIDataResult.Item1, noteWithCreditCardsId); + var valueWithoutSSNs = PIIDetector.GetNoteValue(workspaceWithoutPIIDataResult.Item1, noteWithSSNsId); + var valueWithoutIPAddress = PIIDetector.GetNodeValue(workspaceWithoutPIIDataResult.Item1, nodeWithIPAddressId, "InputValue"); + var valueWithoutDates = PIIDetector.GetNodeValue(workspaceWithoutPIIDataResult.Item1, nodeWithDatesId, "InputValue"); + + Assert.IsTrue(PIIDetector.ContainsEmail((string)valueWhitEmail)); + Assert.IsTrue(PIIDetector.ContainsWebsite((string)valueWithWebPage)); + Assert.IsTrue(PIIDetector.ContainsDirectory((string)valueWithDirectory)); + Assert.IsTrue(PIIDetector.ContainsDirectory((string)valueWithDirectory2)); + Assert.IsTrue(PIIDetector.ContainsCreditCard((string)valueWithCreditCards)); + Assert.IsTrue(PIIDetector.ContainsSSN((string)valueWithSSNs)); + Assert.IsTrue(PIIDetector.ContainsIpAddress((string)valueWithIPAddress)); + Assert.IsTrue(PIIDetector.ContainsDate((string)valueWithDates)); + + Assert.IsFalse(PIIDetector.ContainsEmail((string)valueWithoutEmail)); + Assert.IsFalse(PIIDetector.ContainsWebsite((string)valueWithoutWebPage)); + Assert.IsFalse(PIIDetector.ContainsDirectory((string)valueWithoutDirectory)); + Assert.IsFalse(PIIDetector.ContainsDirectory((string)valueWithoutDirectory2)); + Assert.IsFalse(PIIDetector.ContainsCreditCard((string)valueWithoutCreditCards)); + Assert.IsFalse(PIIDetector.ContainsSSN((string)valueWithoutSSNs)); + Assert.IsFalse(PIIDetector.ContainsIpAddress((string)valueWithoutIPAddress)); + Assert.IsFalse(PIIDetector.ContainsDate((string)valueWithoutDates)); + } + [Test] [Category("UnitTests")] public void BackUpSaveDoesNotChangeName() diff --git a/test/Engine/FFITarget/CodeCompletionClass.cs b/test/Engine/FFITarget/CodeCompletionClass.cs index 2ce1e64155e..b191d909988 100644 --- a/test/Engine/FFITarget/CodeCompletionClass.cs +++ b/test/Engine/FFITarget/CodeCompletionClass.cs @@ -1,4 +1,4 @@ -īģŋusing System; +using System; using System.Collections.Generic; using System.Runtime.Serialization; using Autodesk.DesignScript.Runtime; @@ -126,15 +126,9 @@ public class AnotherClassWithNameConflict } [IsVisibleInDynamoLibrary(false)] - [Serializable] - public class TraceableId : ISerializable + public class TraceableId { public int IntID { get; set; } - - public void GetObjectData(SerializationInfo info, StreamingContext context) - { - info.AddValue("intID", IntID, typeof(int)); - } } [IsVisibleInDynamoLibrary(false)] diff --git a/test/Engine/FFITarget/ManagedElementExample.cs b/test/Engine/FFITarget/ManagedElementExample.cs index 6746a47e233..d7ac5fa39cd 100644 --- a/test/Engine/FFITarget/ManagedElementExample.cs +++ b/test/Engine/FFITarget/ManagedElementExample.cs @@ -1,7 +1,8 @@ -īģŋusing System; +using System; using System.Collections.Generic; using System.Diagnostics; using DynamoServices; +using Newtonsoft.Json; namespace FFITarget { @@ -196,7 +197,7 @@ public WrapperObject(int x) if (traceVal != null) { - IDHolder idHolder = (IDHolder)traceVal; + IDHolder idHolder = JsonConvert.DeserializeObject(traceVal); ID = idHolder.ID; } @@ -204,13 +205,12 @@ public WrapperObject(int x) { nextID++; ID = nextID; - TraceUtils.SetTraceData(__TEMP_REVIT_TRACE_ID, new IDHolder() { ID = nextID }); + TraceUtils.SetTraceData(__TEMP_REVIT_TRACE_ID, JsonConvert.SerializeObject(new IDHolder() { ID = nextID })); } } - public void Dispose() { Debug.WriteLine("Wrapper: " + WrapperGuid.ToString()); diff --git a/test/Engine/FFITarget/MinimalTraceTargets.cs b/test/Engine/FFITarget/MinimalTraceTargets.cs index 270b0175e55..581ecfb7c79 100644 --- a/test/Engine/FFITarget/MinimalTraceTargets.cs +++ b/test/Engine/FFITarget/MinimalTraceTargets.cs @@ -1,8 +1,9 @@ -īģŋusing System; +using System; using System.Collections.Generic; using System.Runtime.Serialization; using DynamoServices; +using Newtonsoft.Json; namespace FFITarget { @@ -20,7 +21,7 @@ public MinimalTracedClass() wasTraced = true; } - TraceUtils.SetTraceData(__TEMP_REVIT_TRACE_ID, new DummyDataHolder()); + TraceUtils.SetTraceData(__TEMP_REVIT_TRACE_ID, JsonConvert.SerializeObject(new DummyDataHolder())); } public bool WasCreatedWithTrace() @@ -61,7 +62,7 @@ public IncrementerTracedClass(int x) { wasTraced = true; - IDHolder idHolder = (IDHolder) retVal; + IDHolder idHolder = JsonConvert.DeserializeObject(retVal); ID = idHolder.ID; } @@ -69,7 +70,7 @@ public IncrementerTracedClass(int x) { nextID++; ID = nextID; - TraceUtils.SetTraceData(__TEMP_REVIT_TRACE_ID, new IDHolder() { ID = nextID }); + TraceUtils.SetTraceData(__TEMP_REVIT_TRACE_ID, JsonConvert.SerializeObject(new IDHolder() { ID = nextID })); } } @@ -90,7 +91,7 @@ public IncrementerTracedClass(int x, bool failWithException) { wasTraced = true; - IDHolder idHolder = (IDHolder)retVal; + IDHolder idHolder = JsonConvert.DeserializeObject(retVal); ID = idHolder.ID; } @@ -98,7 +99,7 @@ public IncrementerTracedClass(int x, bool failWithException) { nextID++; ID = nextID; - TraceUtils.SetTraceData(__TEMP_REVIT_TRACE_ID, new IDHolder() { ID = nextID }); + TraceUtils.SetTraceData(__TEMP_REVIT_TRACE_ID, JsonConvert.SerializeObject(new IDHolder() { ID = nextID })); } } @@ -117,35 +118,21 @@ public void Dispose() } - [Serializable] - internal class IDHolder : ISerializable + internal class IDHolder { + [JsonProperty] public int ID = int.MinValue; public IDHolder() { } - - public IDHolder(SerializationInfo info, StreamingContext context) - { - ID = (int) info.GetValue("intID", typeof (int)); - } - - public void GetObjectData(SerializationInfo info, StreamingContext context) - { - info.AddValue("intID", ID); - } } - [Serializable] - internal class DummyDataHolder : ISerializable + internal class DummyDataHolder { - public void GetObjectData(SerializationInfo info, StreamingContext context) - { - throw new NotImplementedException(); - } + public DummyDataHolder() { } } } diff --git a/test/Engine/ProtoTest/ProtoTest.csproj b/test/Engine/ProtoTest/ProtoTest.csproj index 26e00ea2f5b..c04a1cfc9cf 100644 --- a/test/Engine/ProtoTest/ProtoTest.csproj +++ b/test/Engine/ProtoTest/ProtoTest.csproj @@ -23,7 +23,7 @@ - + diff --git a/test/Engine/ProtoTest/TD/TraceUtilsTests.cs b/test/Engine/ProtoTest/TD/TraceUtilsTests.cs index 4b0e8fc479f..0c20bc56b71 100644 --- a/test/Engine/ProtoTest/TD/TraceUtilsTests.cs +++ b/test/Engine/ProtoTest/TD/TraceUtilsTests.cs @@ -1,32 +1,10 @@ -īģŋusing DynamoServices; +using DynamoServices; using NUnit.Framework; using System; using System.Runtime.Serialization; namespace ProtoTest.TD { - internal class SerializableString : ISerializable - { - public String Payload { get; set; } - - public SerializableString(String str) - { - this.Payload = str; - - } - - public SerializableString(SerializationInfo info, StreamingContext context) - { - Payload = info.GetString("Payload"); - } - - public void GetObjectData(SerializationInfo info, StreamingContext context) - { - info.AddValue("Payload", Payload); - } - } - - public class TraceUtilsTests { [Test] @@ -37,17 +15,13 @@ public static void SetGetTest() var key = TraceUtils.TEMP_GetTraceKeys()[0]; - SerializableString testStr1 = new - SerializableString("{0955D962-2936-4FB2-AAB3-635C6FF6E0AD}"); - - SerializableString testStr2 = new - SerializableString("{2D7FE0ED-56F3-47A4-9BAA-8DF570170D97}"); + var testStr1 = "{0955D962-2936-4FB2-AAB3-635C6FF6E0AD}"; TraceUtils.SetTraceData(key, testStr1); //Set complete, readback test - ISerializable readback = TraceUtils.GetTraceData(key); + string readback = TraceUtils.GetTraceData(key); Assert.IsTrue(readback == testStr1); } @@ -59,17 +33,15 @@ public static void OverwriteTest() var key = TraceUtils.TEMP_GetTraceKeys()[0]; - SerializableString testStr1 = new - SerializableString("{0955D962-2936-4FB2-AAB3-635C6FF6E0AD}"); + var testStr1 = "{0955D962-2936-4FB2-AAB3-635C6FF6E0AD}"; - SerializableString testStr2 = new - SerializableString("{2D7FE0ED-56F3-47A4-9BAA-8DF570170D97}"); + var testStr2 = "{2D7FE0ED-56F3-47A4-9BAA-8DF570170D97}"; TraceUtils.SetTraceData(key, testStr1); //Set complete, readback test - ISerializable readback = TraceUtils.GetTraceData(key); + string readback = TraceUtils.GetTraceData(key); Assert.IsTrue(readback == testStr1); @@ -90,14 +62,13 @@ public static void OverwriteNullTest() var key = TraceUtils.TEMP_GetTraceKeys()[0]; - SerializableString testStr1 = new - SerializableString("{0955D962-2936-4FB2-AAB3-635C6FF6E0AD}"); + var testStr1 = "{0955D962-2936-4FB2-AAB3-635C6FF6E0AD}"; TraceUtils.SetTraceData(key, testStr1); //Set complete, readback test - ISerializable readback = TraceUtils.GetTraceData(key); + string readback = TraceUtils.GetTraceData(key); Assert.IsTrue(readback == testStr1); TraceUtils.SetTraceData(key, null); diff --git a/test/Engine/ProtoTestFx/ProtoTestFx.csproj b/test/Engine/ProtoTestFx/ProtoTestFx.csproj index e8cbc7fbeec..a81774a5112 100644 --- a/test/Engine/ProtoTestFx/ProtoTestFx.csproj +++ b/test/Engine/ProtoTestFx/ProtoTestFx.csproj @@ -12,7 +12,7 @@ - + diff --git a/test/Libraries/AnalysisTests/AnalysisTests.csproj b/test/Libraries/AnalysisTests/AnalysisTests.csproj index 69b4fa6a2fd..2fe8926ce2f 100644 --- a/test/Libraries/AnalysisTests/AnalysisTests.csproj +++ b/test/Libraries/AnalysisTests/AnalysisTests.csproj @@ -10,13 +10,10 @@ AnalysisTests - + - - - - - + + diff --git a/test/Libraries/CommandLineTests/CommandLineTests.cs b/test/Libraries/CommandLineTests/CommandLineTests.cs index 7c3a153659c..e2e16ae5bc3 100644 --- a/test/Libraries/CommandLineTests/CommandLineTests.cs +++ b/test/Libraries/CommandLineTests/CommandLineTests.cs @@ -95,7 +95,7 @@ public void CanSetHostNameWithCommandLineRunner() string commandstring = $"-o {openpath} --HostName {hostName}"; runner.Run(CommandstringToArgs(commandstring)); - Assert.AreEqual(this.CurrentDynamoModel.HostAnalyticsInfo.HostName, "DynamoFormIt"); + Assert.AreEqual(Dynamo.Models.DynamoModel.HostAnalyticsInfo.HostName, "DynamoFormIt"); } [Test] @@ -107,7 +107,7 @@ public void CanSetParentIdWithCommandLineRunner() string commandstring = $"-o {openpath} -p {parentId}"; runner.Run(CommandstringToArgs(commandstring)); - Assert.AreEqual(this.CurrentDynamoModel.HostAnalyticsInfo.ParentId, "RVT&2022&MUI64&22.0.2.392"); + Assert.AreEqual(Dynamo.Models.DynamoModel.HostAnalyticsInfo.ParentId, "RVT&2022&MUI64&22.0.2.392"); } [Test] @@ -119,7 +119,7 @@ public void CanSetSessionIdWithCommandLineRunner() string commandstring = $"-o {openpath} -s {sessionId}"; runner.Run(CommandstringToArgs(commandstring)); - Assert.AreEqual(this.CurrentDynamoModel.HostAnalyticsInfo.SessionId, "ABCDEFG"); + Assert.AreEqual(Dynamo.Models.DynamoModel.HostAnalyticsInfo.SessionId, "ABCDEFG"); } [Test] diff --git a/test/Libraries/CommandLineTests/CommandLineTests.csproj b/test/Libraries/CommandLineTests/CommandLineTests.csproj index 5d9052239a7..494fd6e5e37 100644 --- a/test/Libraries/CommandLineTests/CommandLineTests.csproj +++ b/test/Libraries/CommandLineTests/CommandLineTests.csproj @@ -15,8 +15,7 @@ - - + diff --git a/test/Libraries/CoreNodesTests/CoreNodesTests.csproj b/test/Libraries/CoreNodesTests/CoreNodesTests.csproj index 507d20c549f..c8cb290c4ad 100644 --- a/test/Libraries/CoreNodesTests/CoreNodesTests.csproj +++ b/test/Libraries/CoreNodesTests/CoreNodesTests.csproj @@ -17,9 +17,6 @@ - - - diff --git a/test/Libraries/DataBridgeTests/DataBridgeTests.csproj b/test/Libraries/DataBridgeTests/DataBridgeTests.csproj index 21585d2fe02..18c5a7dd11a 100644 --- a/test/Libraries/DataBridgeTests/DataBridgeTests.csproj +++ b/test/Libraries/DataBridgeTests/DataBridgeTests.csproj @@ -16,9 +16,6 @@ - - - diff --git a/test/Libraries/DynamoMSOfficeTests/DynamoMSOfficeTests.csproj b/test/Libraries/DynamoMSOfficeTests/DynamoMSOfficeTests.csproj index 4eeb7f5dd9d..665e0ca4b23 100644 --- a/test/Libraries/DynamoMSOfficeTests/DynamoMSOfficeTests.csproj +++ b/test/Libraries/DynamoMSOfficeTests/DynamoMSOfficeTests.csproj @@ -1,4 +1,7 @@ + + true + @@ -11,7 +14,7 @@ DynamoMSOfficeTests DynamoMSOfficeTests - + diff --git a/test/Libraries/DynamoPythonTests/CodeCompletionTests.cs b/test/Libraries/DynamoPythonTests/CodeCompletionTests.cs index a1faa500ed7..22f68a70a34 100644 --- a/test/Libraries/DynamoPythonTests/CodeCompletionTests.cs +++ b/test/Libraries/DynamoPythonTests/CodeCompletionTests.cs @@ -42,7 +42,11 @@ public void SharedCoreCanReturnCLRCompletionData() Assert.IsTrue(completionList.Any()); Assert.IsTrue(completionList.Intersect(new[] { "Hashtable", "Queue", "Stack" }).Count() == 3); +#if NET8_0_OR_GREATER + Assert.IsTrue(completionData.Length == 32); +#else Assert.IsTrue(completionData.Length == 31); +#endif } } @@ -236,7 +240,11 @@ public void CanImportSystemCollectionsLibraryAndGetCompletionData() Assert.IsTrue(completionList.Any()); Assert.IsTrue(completionList.Intersect(new[] { "Hashtable", "Queue", "Stack" }).Count() == 3); +#if NET8_0_OR_GREATER + Assert.IsTrue(completionData.Length == 32); +#else Assert.IsTrue(completionData.Length == 31); +#endif } [Test] diff --git a/test/Libraries/DynamoPythonTests/DynamoPythonTests.csproj b/test/Libraries/DynamoPythonTests/DynamoPythonTests.csproj index ce27231e9f4..61ca139c0a8 100644 --- a/test/Libraries/DynamoPythonTests/DynamoPythonTests.csproj +++ b/test/Libraries/DynamoPythonTests/DynamoPythonTests.csproj @@ -1,4 +1,7 @@ + + true + @@ -15,7 +18,7 @@ - + diff --git a/test/Libraries/DynamoUtilitiesTests/CLIWrapperTests.cs b/test/Libraries/DynamoUtilitiesTests/CLIWrapperTests.cs new file mode 100644 index 00000000000..b34a814f198 --- /dev/null +++ b/test/Libraries/DynamoUtilitiesTests/CLIWrapperTests.cs @@ -0,0 +1,120 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using NUnit.Framework; + +namespace DynamoUtilitiesTests +{ + [TestFixture] + public class CLIWrapperTests + { + /// + /// A test class that starts up the DynamoFF CLI and then kills it to cause a deadlock. + /// + private class HangingCLIWrapper: Dynamo.Utilities.CLIWrapper + { + private string relativePath = Path.Combine("DynamoFeatureFlags", "DynamoFeatureFlags.exe"); + protected override string GetCantStartErrorMessage() + { + throw new NotImplementedException(); + } + + protected override string GetCantCommunicateErrorMessage() + { + throw new NotImplementedException(); + } + internal HangingCLIWrapper() + { + StartProcess(relativePath, null); + } + + internal string GetData() + { + //wait a bit, and then kill the process + //this will cause GetData to hang and timeout. + Task.Run(() => + { System.Threading.Thread.Sleep(100); + process.Kill(); + }); + return GetData(2000); + } + + + } + /// + /// this test class waits before reading from the console, so GetData is slow. + /// + private class SlowCLIWrapper : HangingCLIWrapper + { + internal new string GetData() + { + return GetData(2000, () => { Thread.Sleep(4000);return ""; }); + } + } + + /// + /// this test class should get mock data and should not time out. + /// + private class MockCLIWraper : HangingCLIWrapper + { + int count = 0; + internal new string GetData() + { + return GetData(2000, () => { + count++; + + switch (count) + { + case 1: + return startofDataToken; + case 2: + return "some data"; + case 3: + return endOfDataToken; + default: + return string.Empty; + } + + }); + } + } + + [Test] + public void CLIWrapperDoesNotHangIfProcessDoesNotWriteToStdOut() + { + var sw = new System.Diagnostics.Stopwatch(); + sw.Start(); + var wrapper = new HangingCLIWrapper(); + Assert.AreEqual(string.Empty,wrapper.GetData()); + sw.Stop(); + Assert.GreaterOrEqual(sw.ElapsedMilliseconds,2000); + + } + [Test] + public void CLIWrapperTimesOutIfGetDataIsSlow() + { + var sw = new System.Diagnostics.Stopwatch(); + sw.Start(); + var wrapper = new SlowCLIWrapper(); + Assert.AreEqual(string.Empty, wrapper.GetData()); + sw.Stop(); + Assert.GreaterOrEqual(sw.ElapsedMilliseconds, 2000); + + } + [Test] + public void CLIGetsDataIfDoesNotTimeout() + { + var sw = new System.Diagnostics.Stopwatch(); + sw.Start(); + var wrapper = new MockCLIWraper(); + Assert.AreEqual("some data", wrapper.GetData().TrimEnd()); + sw.Stop(); + Assert.LessOrEqual(sw.ElapsedMilliseconds, 2000); + + } + } +} diff --git a/test/Libraries/DynamoUtilitiesTests/DynamoUtilitiesTests.csproj b/test/Libraries/DynamoUtilitiesTests/DynamoUtilitiesTests.csproj index 33c45f6447d..ef38eae803b 100644 --- a/test/Libraries/DynamoUtilitiesTests/DynamoUtilitiesTests.csproj +++ b/test/Libraries/DynamoUtilitiesTests/DynamoUtilitiesTests.csproj @@ -12,12 +12,9 @@ + + - - - - - {B5F435CB-0D8A-40B1-A4F7-5ECB3CE792A9} diff --git a/test/Libraries/GeometryColorTests/GeometryColorTests.csproj b/test/Libraries/GeometryColorTests/GeometryColorTests.csproj index 56e6a503658..89fd223ae16 100644 --- a/test/Libraries/GeometryColorTests/GeometryColorTests.csproj +++ b/test/Libraries/GeometryColorTests/GeometryColorTests.csproj @@ -10,11 +10,8 @@ DisplayTests - + - - - diff --git a/test/Libraries/IronPythonTests/IronPythonTests.csproj b/test/Libraries/IronPythonTests/IronPythonTests.csproj index 4fc6b689952..7060947a081 100644 --- a/test/Libraries/IronPythonTests/IronPythonTests.csproj +++ b/test/Libraries/IronPythonTests/IronPythonTests.csproj @@ -14,7 +14,7 @@ - + diff --git a/test/Libraries/NodeServicesTest/DynamoServicesTests.csproj b/test/Libraries/NodeServicesTest/DynamoServicesTests.csproj index cd192e60362..ae309500180 100644 --- a/test/Libraries/NodeServicesTest/DynamoServicesTests.csproj +++ b/test/Libraries/NodeServicesTest/DynamoServicesTests.csproj @@ -14,12 +14,9 @@ DynamoServicesTests DynamoServicesTests - - + - - diff --git a/test/Libraries/NodeServicesTest/TraceUtilsTest.cs b/test/Libraries/NodeServicesTest/TraceUtilsTest.cs index 9abd49532c2..f895ac45848 100644 --- a/test/Libraries/NodeServicesTest/TraceUtilsTest.cs +++ b/test/Libraries/NodeServicesTest/TraceUtilsTest.cs @@ -1,4 +1,4 @@ -īģŋusing System; +using System; using System.Runtime.Serialization; using System.Threading; @@ -18,15 +18,11 @@ public void TestGetSetData() string id = "TestID-{82AC4E65-CC86-4BF0-95EA-AE4B2B5E4A35}"; string testString = "This is a test"; - SerializableSring ssString = new SerializableSring(testString); + TraceUtils.SetTraceData(id, testString); - TraceUtils.SetTraceData(id, ssString); + var ret = TraceUtils.GetTraceData(id); - ssString = null; - - SerializableSring ret = (SerializableSring)TraceUtils.GetTraceData(id); - - Assert.IsTrue(ret.Payload.Equals(testString)); + Assert.AreEqual(ret, testString); } @@ -37,18 +33,14 @@ public void TestGetSetDataOnDifferentThreads() string id = "TestID-{82AC4E65-CC86-4BF0-95EA-AE4B2B5E4A35}"; string testString = "This is a test"; - SerializableSring ssString = new SerializableSring(testString); - - TraceUtils.SetTraceData(id, ssString); - - ssString = null; + TraceUtils.SetTraceData(id, testString); bool test = false; Thread th = new Thread( () => { - SerializableSring ret = (SerializableSring)TraceUtils.GetTraceData(id); + var ret = TraceUtils.GetTraceData(id); test = ret == null; @@ -63,46 +55,5 @@ public void TestGetSetDataOnDifferentThreads() } - - private class SerializableSring : ISerializable - { - public String Payload; - - public SerializableSring(String payload) - { - this.Payload = payload; - } - - public void GetObjectData(SerializationInfo info, StreamingContext context) - { - throw new NotImplementedException(); - } - - // override object.Equals - public override bool Equals(object obj) - { - // - // See the full list of guidelines at - // http://go.microsoft.com/fwlink/?LinkID=85237 - // and also the guidance for operator== at - // http://go.microsoft.com/fwlink/?LinkId=85238 - // - - if (obj == null || GetType() != obj.GetType()) - { - return false; - } - - return Payload.Equals(((SerializableSring)obj).Payload); - - } - - public override int GetHashCode() - { - return Payload.GetHashCode(); - } - - } - } } diff --git a/test/Libraries/PackageManagerTests/PackageDirectoryBuilderTests.cs b/test/Libraries/PackageManagerTests/PackageDirectoryBuilderTests.cs index c25932ad78c..71b230337f8 100644 --- a/test/Libraries/PackageManagerTests/PackageDirectoryBuilderTests.cs +++ b/test/Libraries/PackageManagerTests/PackageDirectoryBuilderTests.cs @@ -38,6 +38,24 @@ public void BuildPackageDirectory_DoesExpectedNumberOfOperations() Assert.AreEqual(1, fs.NewFilesWritten.Count()); } + [Test] + public void BuildRetainPackageDirectory_DoesExpectedNumberOfOperations() + { + var files = new List>() { new[] { @"C:\folder1\file1.dyf" }, new[] { @"C:\folder2\file2.dyf" } }; + var pkg = new Package(@"C:\pkg", "Foo", "0.1.0", "MIT"); + var fs = new RecordedFileSystem((fn) => files.SelectMany(files => files).ToList().Any((x) => ComparePaths(x, fn))); + var db = new PackageDirectoryBuilder(fs, MockMaker.Empty()); + + var pkgsDir = @"C:\dynamopackages"; + + db.BuildRetainDirectory(pkg, pkgsDir, files, Enumerable.Empty()); + + Assert.AreEqual(1, fs.DirectoriesCreated.Count()); + Assert.AreEqual(2, fs.CopiedFiles.Count()); + Assert.AreEqual(2, fs.DeletedFiles.Count()); + Assert.AreEqual(1, fs.NewFilesWritten.Count()); + } + [Test] public void BuildPackageDirectory_BuildsExpectedDirectories() { @@ -65,6 +83,23 @@ public void BuildPackageDirectory_BuildsExpectedDirectories() Assert.IsTrue(fs.DirectoriesCreated.Any(x => x.FullName == docDir)); } + [Test] + public void BuildRetainPackageDirectory_BuildsExpectedDirectories() + { + var files = new List>() { new[] { @"C:\folder1\file1.dyf" }, new[] { @"C:\folder2\file2.dyf" } }; + var pkg = new Package(@"C:\pkg", "Foo", "0.1.0", "MIT"); + var fs = new RecordedFileSystem((fn) => files.SelectMany(files => files).ToList().Any((x) => ComparePaths(x, fn))); + var db = new PackageDirectoryBuilder(fs, MockMaker.Empty()); + + var pkgsDir = @"C:\dynamopackages"; + + db.BuildRetainDirectory(pkg, pkgsDir, files, Enumerable.Empty()); + + var rootDir = Path.Combine(pkgsDir, pkg.Name); + + Assert.IsTrue(fs.DirectoriesCreated.Any(x => x.FullName == rootDir)); + } + [Test] public void BuildPackageDirectory_FormsPackageHeader() { @@ -87,6 +122,27 @@ public void BuildPackageDirectory_FormsPackageHeader() Assert.IsTrue(fs.NewFilesWritten.Any(x => x.Item1 == Path.Combine(rootDir, PackageDirectoryBuilder.PackageJsonName))); } + [Test] + public void BuildRetainPackageDirectory_FormsPackageHeader() + { + var files = new List>() { new[] { @"C:\folder1\file1.dyf" }, new[] { @"C:\folder2\file2.dyf" } }; + var pkg = new Package(@"C:\pkg", "Foo", "0.1.0", "MIT"); + var fs = new RecordedFileSystem((fn) => files.SelectMany(files => files).ToList().Any((x) => ComparePaths(x, fn))); + + var pr = new Mock(); + var db = new PackageDirectoryBuilder(fs, pr.Object); + + var pkgsDir = @"C:\dynamopackages"; + + // where the magic happens... + db.BuildRetainDirectory(pkg, pkgsDir, files, Enumerable.Empty()); + + var rootDir = Path.Combine(pkgsDir, pkg.Name); + + Assert.AreEqual(1, fs.NewFilesWritten.Count()); + Assert.IsTrue(fs.NewFilesWritten.Any(x => x.Item1 == Path.Combine(rootDir, PackageDirectoryBuilder.PackageJsonName))); + } + [Test] public void BuildPackageDirectory_RemapsCustomNodePaths() { @@ -117,6 +173,35 @@ public void BuildPackageDirectory_RemapsCustomNodePaths() Assert.IsTrue(remappedPaths.Any(x => x.Item1 == files[1] && x.Item2 == dyfDir)); } + [Test] + public void BuildRetainPackageDirectory_RemapsCustomNodePaths() + { + var files = new List>() { new[] { @"C:\folder1\file1.dyf" }, new[] { @"C:\folder2\file2.dyf" } }; + var pkg = new Package(@"C:\pkg", "Foo", "0.1.0", "MIT"); + var fs = new RecordedFileSystem((fn) => files.SelectMany(files => files).ToList().Any((x) => ComparePaths(x, fn))); + + var pr = new Mock(); + var remappedPaths = new List>(); + + pr.Setup(x => x.SetPath(files[0].First(), It.IsAny())) + .Callback((string f, string s) => remappedPaths.Add(new Tuple(f, s))); + + pr.Setup(x => x.SetPath(files[1].First(), It.IsAny())) + .Callback((string f, string s) => remappedPaths.Add(new Tuple(f, s))); + + var db = new PackageDirectoryBuilder(fs, pr.Object); + + var pkgsDir = @"C:\dynamopackages"; + + db.BuildRetainDirectory(pkg, pkgsDir, files, Enumerable.Empty()); + + var dyfDir1 = Path.Combine(pkgsDir, pkg.Name, Path.GetFileName(Path.GetDirectoryName(files[0].First())), Path.GetFileName(files[0].First())); + var dyfDir2 = Path.Combine(pkgsDir, pkg.Name, Path.GetFileName(Path.GetDirectoryName(files[1].First())), Path.GetFileName(files[1].First())); + + Assert.IsTrue(remappedPaths.Any(x => x.Item1 == files[0].First() && x.Item2 == dyfDir1)); + Assert.IsTrue(remappedPaths.Any(x => x.Item1 == files[1].First() && x.Item2 == dyfDir2)); + } + [Test] public void BuildPackageDirectory_UpdatesTheArgumentPackageWithNewDirectories() { @@ -147,6 +232,28 @@ public void BuildPackageDirectory_UpdatesTheArgumentPackageWithNewDirectories() Assert.AreEqual(docDir, pkg.NodeDocumentaionDirectory); } + [Test] + public void BuildRetainPackageDirectory_UpdatesTheArgumentPackageWithNewDirectories() + { + var files = new List>() { new[] { @"C:\folder1\file1.dyf" }, new[] { @"C:\folder2\file2.dyf" } }; + var pkg = new Package(@"C:\pkg", "Foo", "0.1.0", "MIT"); + var fs = new RecordedFileSystem((fn) => files.SelectMany(files => files).ToList().Any((x) => ComparePaths(x, fn))); + + + var pr = new Mock(); + var db = new PackageDirectoryBuilder(fs, pr.Object); + + var pkgsDir = @"C:\dynamopackages"; + + db.BuildRetainDirectory(pkg, pkgsDir, files, Enumerable.Empty()); + + var rootDir = Path.Combine(pkgsDir, pkg.Name); + + // The package itself is updated + + Assert.AreEqual(rootDir, pkg.RootDirectory); + } + [Test] public void BuildPackageDirectory_CopiesTheOriginalFiles() { @@ -172,6 +279,31 @@ public void BuildPackageDirectory_CopiesTheOriginalFiles() Assert.IsTrue(fs.CopiedFiles.Any(x => ComparePaths(x.Item2, Path.Combine(dyfDir, "file2.dyf")))); } + [Test] + public void BuildPackageRetainDirectory_CopiesTheOriginalFiles() + { + var files = new List>() { new[] { @"C:\folder1\file1.dyf" }, new[] { @"C:\folder2\file2.dyf" } }; + var pkg = new Package(@"C:\pkg", "Foo", "0.1.0", "MIT"); + var fs = new RecordedFileSystem((fn) => files.SelectMany(files => files).ToList().Any((x) => ComparePaths(x, fn))); + + var pr = new Mock(); + var db = new PackageDirectoryBuilder(fs, pr.Object); + + var pkgsDir = @"C:\dynamopackages"; + + db.BuildRetainDirectory(pkg, pkgsDir, files, Enumerable.Empty()); + + var dyfDir1 = Path.Combine(pkgsDir, pkg.Name, Path.GetFileName(Path.GetDirectoryName(files[0].First()))); + var dyfDir2 = Path.Combine(pkgsDir, pkg.Name, Path.GetFileName(Path.GetDirectoryName(files[1].First()))); + + Assert.AreEqual(2, fs.CopiedFiles.Count()); + Assert.AreEqual(2, fs.DeletedFiles.Count()); + Assert.AreEqual(0, fs.DeletedDirectories.Count()); + + Assert.IsTrue(fs.CopiedFiles.Any(x => ComparePaths(x.Item2, Path.Combine(dyfDir1, "file1.dyf")))); + Assert.IsTrue(fs.CopiedFiles.Any(x => ComparePaths(x.Item2, Path.Combine(dyfDir2, "file2.dyf")))); + } + [Test] public void BuildPackageDirectory_CopiesMarkDownFiles() { @@ -199,6 +331,32 @@ public void BuildPackageDirectory_CopiesMarkDownFiles() Assert.IsTrue(fs.CopiedFiles.Any(x => ComparePaths(x.Item2, Path.Combine(mdDir, "file3.jpg")))); } + [Test] + public void BuildRetainPackageDirectory_CopiesMarkDownFiles() + { + var files = new List>() { new[] { @"C:\folder1\file1.dyn" }, new[] { @"C:\folder2\file2.dyn" } }; + var markdownFiles = new[] { @"C:\file1.md", @"C:\file2.md", @"C:\image\file3.jpg" }; + var pkg = new Package(@"C:\pkg", "Foo", "0.1.0", "MIT"); + var fs = new RecordedFileSystem((fn) => files.SelectMany(files => files).ToList().Any((x) => ComparePaths(x, fn))); + + var pr = new Mock(); + var db = new PackageDirectoryBuilder(fs, pr.Object); + + var pkgsDir = @"C:\dynamopackages"; + + db.BuildRetainDirectory(pkg, pkgsDir, files, markdownFiles); + + var mdDir = Path.Combine(pkgsDir, pkg.Name, PackageDirectoryBuilder.DocumentationDirectoryName); + + Assert.AreEqual(5, fs.CopiedFiles.Count()); + Assert.AreEqual(0, fs.DeletedFiles.Count()); + Assert.AreEqual(0, fs.DeletedDirectories.Count()); + + Assert.IsTrue(fs.CopiedFiles.Any(x => ComparePaths(x.Item2, Path.Combine(mdDir, "file1.md")))); + Assert.IsTrue(fs.CopiedFiles.Any(x => ComparePaths(x.Item2, Path.Combine(mdDir, "file2.md")))); + Assert.IsTrue(fs.CopiedFiles.Any(x => ComparePaths(x.Item2, Path.Combine(mdDir, "file3.jpg")))); + } + [Test] public void BuildPackageDirectory_DeletesTheOriginalFiles() { @@ -224,6 +382,30 @@ public void BuildPackageDirectory_DeletesTheOriginalFiles() Assert.Contains(files[1], fs.DeletedFiles.ToList()); } + [Test] + public void BuildRetainPackageDirectory_DeletesTheOriginalFiles() + { + var files = new List>() { new[] { @"C:\folder1\file1.dyf" }, new[] { @"C:\folder2\file2.dyf" } }; + var pkg = new Package(@"C:\pkg", "Foo", "0.1.0", "MIT"); + var fs = new RecordedFileSystem((fn) => files.SelectMany(files => files).ToList().Any((x) => ComparePaths(x, fn))); + + var pr = new Mock(); + + var db = new PackageDirectoryBuilder(fs, pr.Object); + + var pkgsDir = @"C:\dynamopackages"; + + db.BuildRetainDirectory(pkg, pkgsDir, files, Enumerable.Empty()); + + // The original files are moved + + Assert.AreEqual(2, fs.DeletedFiles.Count()); + Assert.AreEqual(0, fs.DeletedDirectories.Count()); + + Assert.Contains(files[0].First(), fs.DeletedFiles.ToList()); + Assert.Contains(files[1].First(), fs.DeletedFiles.ToList()); + } + [Test] public void BuildPackageDirectory_DoesNotIncludeUnselectedFiles() { @@ -253,6 +435,36 @@ public void BuildPackageDirectory_DoesNotIncludeUnselectedFiles() Assert.AreEqual(1, fs.NewFilesWritten.Count()); } + [Test] + public void BuildRetainPackageDirectory_DoesNotIncludeUnselectedFiles() + { + // For http://adsk-oss.myjetbrains.com/youtrack/issue/MAGN-7676 + + var files = new List>() { new[] { "C:/pkg/bin/file1.dll", "C:/pkg/dyf/file2.dyf", + "C:/pkg/extra/file3.txt", "C:/pkg/extra/subfolder/file4.dwg" } }; + var pkg = new Package(@"C:\pkg", "Foo", "0.1.0", "MIT"); + var fs = new RecordedFileSystem((fn) => files.SelectMany(files => files).ToList().Any((x) => ComparePaths(x, fn))); + + // Specifying directory contents in the disk + fs.SetFiles(new List() { + "C:/pkg/bin/file1.dll", "C:/pkg/dyf/file2.dyf", "C:/pkg/dyf/backup/file2.dyf.0.backup", + "C:/pkg/extra/file3.txt", "C:/pkg/extra/Backup/file3.txt.backup", "C:/pkg/extra/subfolder/file4.dwg" }); + fs.SetDirectories(new List() { + "C:/pkg/bin", "C:/pkg/dyf", "C:/pkg/dyf/backup", "C:/pkg/extra", + "C:/pkg/extra/Backup", "C:/pkg/extra/subfolder" }); + + var db = new PackageDirectoryBuilder(fs, MockMaker.Empty()); + var pkgsDir = @"C:\dynamopackages"; + db.BuildRetainDirectory(pkg, pkgsDir, files, Enumerable.Empty()); + + + Assert.AreEqual(1, fs.DirectoriesCreated.Count()); + Assert.AreEqual(4, fs.CopiedFiles.Count()); + Assert.AreEqual(3, fs.DeletedFiles.Count()); + Assert.AreEqual(2, fs.DeletedDirectories.Count()); + Assert.AreEqual(1, fs.NewFilesWritten.Count()); + } + #endregion #region CopyFilesIntoPackageDirectory diff --git a/test/Libraries/PackageManagerTests/PackageLoaderTests.cs b/test/Libraries/PackageManagerTests/PackageLoaderTests.cs index 46144791c91..153497466f1 100644 --- a/test/Libraries/PackageManagerTests/PackageLoaderTests.cs +++ b/test/Libraries/PackageManagerTests/PackageLoaderTests.cs @@ -141,7 +141,7 @@ public void PackageDoesNotReloadOnAbsenceOfNewPackagePath() }; loader.LoadAll(loadPackageParams); - Assert.AreEqual(19, loader.LocalPackages.Count()); + Assert.AreEqual(20, loader.LocalPackages.Count()); Assert.AreEqual(true, packagesLoaded); var entries = CurrentDynamoModel.SearchModel.Entries.ToList(); @@ -150,7 +150,7 @@ public void PackageDoesNotReloadOnAbsenceOfNewPackagePath() packagesLoaded = false; // This function is called upon addition of new package paths in the UI. loader.LoadNewCustomNodesAndPackages(new List(), CurrentDynamoModel.CustomNodeManager); - Assert.AreEqual(19, loader.LocalPackages.Count()); + Assert.AreEqual(20, loader.LocalPackages.Count()); // Assert packages are not reloaded if there are no new package paths. Assert.False(packagesLoaded); @@ -187,7 +187,7 @@ public void NoPackageNodeDuplicatesOnAddingNewPackagePath() Preferences =settings, }; loader.LoadAll(loadPackageParams); - Assert.AreEqual(19, loader.LocalPackages.Count()); + Assert.AreEqual(20, loader.LocalPackages.Count()); Assert.AreEqual(true, packagesLoaded); var entries = CurrentDynamoModel.SearchModel.Entries.ToList(); @@ -198,7 +198,7 @@ public void NoPackageNodeDuplicatesOnAddingNewPackagePath() var newPaths = new List { Path.Combine(TestDirectory, "builtinpackages testdir") }; // This function is called upon addition of new package paths in the UI. loader.LoadNewCustomNodesAndPackages(newPaths, CurrentDynamoModel.CustomNodeManager); - Assert.AreEqual(20, loader.LocalPackages.Count()); + Assert.AreEqual(21, loader.LocalPackages.Count()); // Assert packages are reloaded if there are new package paths. Assert.True(packagesLoaded); @@ -503,8 +503,8 @@ public void LoadPackagesReturnsAllValidPackagesInValidDirectory() Preferences = CurrentDynamoModel.PreferenceSettings, }); - // There are 19 packages in "Dynamo\test\pkgs" - Assert.AreEqual(19, loader.LocalPackages.Count()); + // There are 20 packages in "Dynamo\test\pkgs" + Assert.AreEqual(20, loader.LocalPackages.Count()); // Verify that interdependent packages are resolved successfully // TODO: Review these assertions. Lambdas are not using x, so they are basically just checking that test files exist. @@ -541,8 +541,8 @@ public void LoadingPackageDoesNotAffectLoadedSearchEntries() Preferences = CurrentDynamoModel.PreferenceSettings, }); - // There are 19 packages in "Dynamo\test\pkgs" - Assert.AreEqual(19, loader.LocalPackages.Count()); + // There are 20 packages in "Dynamo\test\pkgs" + Assert.AreEqual(20, loader.LocalPackages.Count()); // Simulate loading new package from PM string packageDirectory = Path.Combine(TestDirectory, @"core\packageDependencyTests\ZTTestPackage"); @@ -669,8 +669,8 @@ public void LoadingConflictingCustomNodePackageDoesNotGetLoaded() Preferences = CurrentDynamoModel.PreferenceSettings, }); - // There are 19 packages in "Dynamo\test\pkgs" - Assert.AreEqual(19, loader.LocalPackages.Count()); + // There are 20 packages in "Dynamo\test\pkgs" + Assert.AreEqual(20, loader.LocalPackages.Count()); var entries = CurrentDynamoModel.SearchModel.Entries.OfType(); diff --git a/test/Libraries/PackageManagerTests/PackageManagerClientTests.cs b/test/Libraries/PackageManagerTests/PackageManagerClientTests.cs index bb70fe0b4cc..f1772e0c0b7 100644 --- a/test/Libraries/PackageManagerTests/PackageManagerClientTests.cs +++ b/test/Libraries/PackageManagerTests/PackageManagerClientTests.cs @@ -440,6 +440,94 @@ public void Publish_SetsErrorStatusWhenResponseIsNull() #endregion + #region PublishRetainingFolderStructure + + [Test] + public void PublishRetain_SetsHandleToDoneWhenNewPackagePublishSucceeds() + { + var gc = new Mock(); + gc.Setup(x => x.ExecuteAndDeserialize(It.IsAny())) + .Returns(new ResponseBody() + { + success = true + }); + + var pc = new PackageManagerClient(gc.Object, MockMaker.Empty(), ""); + + var pkg = new Package("", "Package", "0.1.0", "MIT"); + + var handle = new PackageUploadHandle(PackageUploadBuilder.NewRequestBody(pkg)); + var listOfEmptyEnumerables = Enumerable.Range(1, 5) + .Select(_ => Enumerable.Empty()); + + pc.PublishRetainFolderStructure(pkg, listOfEmptyEnumerables, Enumerable.Empty(), false, handle); + + Assert.AreEqual(PackageUploadHandle.State.Uploaded, handle.UploadState); + } + + [Test] + public void PublishRetain_SetsHandleToDoneWhenNewPackageVersionPublishSucceeds() + { + var gc = new Mock(); + gc.Setup(x => x.ExecuteAndDeserialize(It.IsAny())) + .Returns(new ResponseBody() + { + success = true + }); + + var pc = new PackageManagerClient(gc.Object, MockMaker.Empty(), ""); + + var pkg = new Package("", "Package", "0.1.0", "MIT"); + + var handle = new PackageUploadHandle(PackageUploadBuilder.NewRequestBody(pkg)); + var listOfEmptyEnumerables = Enumerable.Range(1, 5) + .Select(_ => Enumerable.Empty()); + pc.PublishRetainFolderStructure(pkg, listOfEmptyEnumerables, Enumerable.Empty(), false, handle); + + Assert.AreEqual(PackageUploadHandle.State.Uploaded, handle.UploadState); + } + + [Test] + public void PublishRetain_SetsErrorStatusWhenRequestThrowsAnException() + { + var gc = new Mock(); + gc.Setup(x => x.ExecuteAndDeserialize(It.IsAny())).Throws(); + + var pc = new PackageManagerClient(gc.Object, MockMaker.Empty(), ""); + + var pkg = new Package("", "Package", "0.1.0", "MIT"); + + var handle = new PackageUploadHandle(PackageUploadBuilder.NewRequestBody(pkg)); + var listOfEmptyEnumerables = Enumerable.Range(1, 5) + .Select(_ => Enumerable.Empty()); + pc.PublishRetainFolderStructure(pkg, listOfEmptyEnumerables, Enumerable.Empty(), false, handle); + + Assert.AreEqual(PackageUploadHandle.State.Error, handle.UploadState); + } + + [Test] + public void PublishRetain_SetsErrorStatusWhenResponseIsNull() + { + var gc = new Mock(); + var rb = new ResponseBody(); + rb.success = false; + + gc.Setup(x => x.ExecuteAndDeserialize(It.IsAny())).Returns(rb); + + var pc = new PackageManagerClient(gc.Object, MockMaker.Empty(), ""); + + var pkg = new Package("", "Package", "0.1.0", "MIT"); + + var handle = new PackageUploadHandle(PackageUploadBuilder.NewRequestBody(pkg)); + var listOfEmptyEnumerables = Enumerable.Range(1, 5) + .Select(_ => Enumerable.Empty()); + pc.PublishRetainFolderStructure(pkg, listOfEmptyEnumerables, Enumerable.Empty(), true, handle); + + Assert.AreEqual(PackageUploadHandle.State.Error, handle.UploadState); + } + + #endregion + #region Deprecate [Test] diff --git a/test/Libraries/PackageManagerTests/PackageManagerTests.csproj b/test/Libraries/PackageManagerTests/PackageManagerTests.csproj index 6d9824b3af3..0834509d899 100644 --- a/test/Libraries/PackageManagerTests/PackageManagerTests.csproj +++ b/test/Libraries/PackageManagerTests/PackageManagerTests.csproj @@ -14,20 +14,16 @@ - + all compile; build; native; contentfiles; analyzers; buildtransitive - + all compile; build; native; contentfiles; analyzers; buildtransitive - - - - diff --git a/test/Libraries/PackageManagerTests/PackageUploadBuilderTests.cs b/test/Libraries/PackageManagerTests/PackageUploadBuilderTests.cs index e8de461b1d9..fdc538869f3 100644 --- a/test/Libraries/PackageManagerTests/PackageUploadBuilderTests.cs +++ b/test/Libraries/PackageManagerTests/PackageUploadBuilderTests.cs @@ -33,6 +33,24 @@ private IPackageUploadBuilder BigPackageUploadBuilderMock() return new PackageUploadBuilder(pdb.Object, zipper.Object); } + private IPackageUploadBuilder BigPackageUploadRetainBuilderMock() + { + // a IFileInfo object that is, by mocking, too large + var bigzip = new Mock(); + bigzip.Setup(x => x.Length).Returns(PackageUploadBuilder.MaximumPackageSize + 1); + + // the zipper returns a big zip + var zipper = new Mock(); + zipper.Setup((x) => x.Zip(It.IsAny())).Returns(bigzip.Object); + + var pdb = new Mock(); + pdb.Setup(x => x.BuildRetainDirectory(It.IsAny(), It.IsAny(), It.IsAny>>(), It.IsAny>())) + .Returns((new Mock()).Object); + + // this package upload builder will try to return a zip that is too big + return new PackageUploadBuilder(pdb.Object, zipper.Object); + } + private class directoryTestClass : IDirectoryInfo { public string FullName { get; set; } @@ -160,6 +178,40 @@ public void NewPackageVersionUpload_ThrowsForNullArguments() #endregion + #region NewPackageUploadRetainFolderStructure + + [Test] + public void NewPackageUploadRetain_ThrowsExceptionWhenPackageIsTooBig() + { + var pub = BigPackageUploadRetainBuilderMock(); + + var files = new List>() { new[] { @"C:\folder1\file1.dyf" }, new[] { @"C:\folder2\file2.dyf" } }; + var pkg = new Package(@"C:\pkg", "Foo", "0.1.0", "MIT"); + var pkgsDir = @"C:\dynamopackages"; + + var handle = new PackageUploadHandle(PackageUploadBuilder.NewRequestBody(pkg)); + + Assert.Throws(() => pub.NewPackageRetainUpload(pkg, pkgsDir, files, Enumerable.Empty(), handle)); + } + + [Test] + public void NewPackageVersionUploadRetain_ThrowsForNullArguments() + { + var files = new List>() { new[] { @"C:\folder1\file1.dyf" }, new[] { @"C:\folder2\file2.dyf" } }; + var pkg = new Package(@"C:\pkg", "Foo", "0.1.0", "MIT"); + var pkgsDir = @"C:\dynamopackages"; + var handle = new PackageUploadHandle(PackageUploadBuilder.NewRequestBody(pkg)); + + var m = new PackageUploadBuilder(MockMaker.Empty(), MockMaker.Empty()); + + Assert.Throws(() => m.NewPackageRetainUpload(null, pkgsDir, files, Enumerable.Empty(), handle)); + Assert.Throws(() => m.NewPackageRetainUpload(pkg, null, files, Enumerable.Empty(), handle)); + Assert.Throws(() => m.NewPackageRetainUpload(pkg, pkgsDir, null, Enumerable.Empty(), handle)); + Assert.Throws(() => m.NewPackageRetainUpload(pkg, pkgsDir, files, Enumerable.Empty(), null)); + } + + #endregion + #region NewPackageVersionUpload [Test] @@ -194,6 +246,40 @@ public void NewPackageUpload_ThrowsForNullArguments() #endregion + #region NewPackageVersionUploadRetainFolderStructure + + [Test] + public void NewPackageVersionUploadRetain_ThrowsExceptionWhenPackageIsTooBig() + { + var pub = BigPackageUploadBuilderMock(); + + var files = new List>() { new[] { @"C:\folder1\file1.dyf" }, new[] { @"C:\folder2\file2.dyf" } }; + var pkg = new Package(@"C:\pkg", "Foo", "0.1.0", "MIT"); + var pkgsDir = @"C:\dynamopackages"; + + var handle = new PackageUploadHandle(PackageUploadBuilder.NewRequestBody(pkg)); + + Assert.Throws(() => pub.NewPackageVersionRetainUpload(pkg, pkgsDir, files, Enumerable.Empty(), handle)); + } + + [Test] + public void NewPackageUploadRetain_ThrowsForNullArguments() + { + var files = new List>() { new[] { @"C:\folder1\file1.dyf" }, new[] { @"C:\folder2\file2.dyf" } }; + var pkg = new Package(@"C:\pkg", "Foo", "0.1.0", "MIT"); + var pkgsDir = @"C:\dynamopackages"; + var handle = new PackageUploadHandle(PackageUploadBuilder.NewRequestBody(pkg)); + + var m = new PackageUploadBuilder(MockMaker.Empty(), MockMaker.Empty()); + + Assert.Throws(() => m.NewPackageVersionRetainUpload(null, pkgsDir, files, Enumerable.Empty(), handle)); + Assert.Throws(() => m.NewPackageVersionRetainUpload(pkg, null, files, Enumerable.Empty(), handle)); + Assert.Throws(() => m.NewPackageVersionRetainUpload(pkg, pkgsDir, null, Enumerable.Empty(), handle)); + Assert.Throws(() => m.NewPackageVersionRetainUpload(pkg, pkgsDir, files, Enumerable.Empty(), null)); + } + + #endregion + #region NewRequestBody [Test] diff --git a/test/Libraries/SystemTestServices/SystemTestServices.csproj b/test/Libraries/SystemTestServices/SystemTestServices.csproj index fde6c81c728..2ea550619b4 100644 --- a/test/Libraries/SystemTestServices/SystemTestServices.csproj +++ b/test/Libraries/SystemTestServices/SystemTestServices.csproj @@ -12,11 +12,8 @@ SystemTestServices SystemTestServices - - - diff --git a/test/Libraries/TestServices/TestServices.csproj b/test/Libraries/TestServices/TestServices.csproj index 1ed5a085d0d..baa200a0fcd 100644 --- a/test/Libraries/TestServices/TestServices.csproj +++ b/test/Libraries/TestServices/TestServices.csproj @@ -10,10 +10,10 @@ TestServices - + - + diff --git a/test/Libraries/TestServices/TestSessionConfiguration.cs b/test/Libraries/TestServices/TestSessionConfiguration.cs index ae4b2befdf9..54404deedd8 100644 --- a/test/Libraries/TestServices/TestSessionConfiguration.cs +++ b/test/Libraries/TestServices/TestSessionConfiguration.cs @@ -18,8 +18,8 @@ public class TestSessionConfiguration private const string CONFIG_FILE_NAME = "TestServices.dll.config"; private List supportedLibGVersions = new List { + new Version(230,0,0), new Version(229,0,0), - new Version(228,6,0), }; public string DynamoCorePath { get; private set; } @@ -31,7 +31,7 @@ public class TestSessionConfiguration /// If the key is not present in the config file a default value will be selected. /// public Version RequestedLibraryVersion2 { get; private set; } - + /// /// This constructor does not read configuration from a config file, the configuration properties are /// set directly by the parameters passed to this constructor. diff --git a/test/Libraries/WorkflowTests/WorkflowTests.csproj b/test/Libraries/WorkflowTests/WorkflowTests.csproj index 9c2cddd8996..915e21a7c65 100644 --- a/test/Libraries/WorkflowTests/WorkflowTests.csproj +++ b/test/Libraries/WorkflowTests/WorkflowTests.csproj @@ -14,10 +14,7 @@ - - - - + diff --git a/test/System/IntegrationTests/IntegrationTests.csproj b/test/System/IntegrationTests/IntegrationTests.csproj index 7685be1a6cf..9d9aff13b41 100644 --- a/test/System/IntegrationTests/IntegrationTests.csproj +++ b/test/System/IntegrationTests/IntegrationTests.csproj @@ -14,12 +14,9 @@ IntegrationTests IntegrationTests - - + - - diff --git a/test/TestUINodes/TestUINodes.csproj b/test/TestUINodes/TestUINodes.csproj index bcfc2e40876..f17a3ba6137 100644 --- a/test/TestUINodes/TestUINodes.csproj +++ b/test/TestUINodes/TestUINodes.csproj @@ -19,9 +19,6 @@ - - - none diff --git a/test/Tools/NodeDocumentationMarkdownGeneratorTests/MarkdownGeneratorCommandTests.cs b/test/Tools/NodeDocumentationMarkdownGeneratorTests/MarkdownGeneratorCommandTests.cs index 224ccc97630..aa591f752ae 100644 --- a/test/Tools/NodeDocumentationMarkdownGeneratorTests/MarkdownGeneratorCommandTests.cs +++ b/test/Tools/NodeDocumentationMarkdownGeneratorTests/MarkdownGeneratorCommandTests.cs @@ -164,7 +164,7 @@ public void ProducesCorrectOutputFromCoreDirectory_preloadedbinaries() FromDirectoryCommand.HandleDocumentationFromDirectory(opts); var generatedFileNames = tempDirectory.GetFiles().Select(x => x.Name); - Assert.AreEqual(683, generatedFileNames.Count()); + Assert.AreEqual(685, generatedFileNames.Count()); } [Test] diff --git a/test/Tools/NodeDocumentationMarkdownGeneratorTests/NodeDocumentationMarkdownGeneratorTests.csproj b/test/Tools/NodeDocumentationMarkdownGeneratorTests/NodeDocumentationMarkdownGeneratorTests.csproj index 0867d9bbf84..d3a734c33f6 100644 --- a/test/Tools/NodeDocumentationMarkdownGeneratorTests/NodeDocumentationMarkdownGeneratorTests.csproj +++ b/test/Tools/NodeDocumentationMarkdownGeneratorTests/NodeDocumentationMarkdownGeneratorTests.csproj @@ -14,9 +14,6 @@ - - - diff --git a/test/Tools/docGeneratorTestFiles/TestMdOutput_CoreNodeModels/CoreNodeModels.Logic.Gate.md b/test/Tools/docGeneratorTestFiles/TestMdOutput_CoreNodeModels/CoreNodeModels.Logic.Gate.md new file mode 100644 index 00000000000..301a2792dc7 --- /dev/null +++ b/test/Tools/docGeneratorTestFiles/TestMdOutput_CoreNodeModels/CoreNodeModels.Logic.Gate.md @@ -0,0 +1,5 @@ +## Gate - Documentation +This documentation file is auto generated by NodeDocumentationMarkdownGenerator, Version=2.13.0.2212, Culture=neutral, PublicKeyToken=null. + +For more information about adding documentation to nodes see https://github.com/DynamoDS/Dynamo/wiki/Create-and-Add-Custom-Documentation-to-Nodes + diff --git a/test/Tools/docGeneratorTestFiles/TestMdOutput_CoreNodeModels/CoreNodeModels.Remember.md b/test/Tools/docGeneratorTestFiles/TestMdOutput_CoreNodeModels/CoreNodeModels.Remember.md new file mode 100644 index 00000000000..4ec70c51907 --- /dev/null +++ b/test/Tools/docGeneratorTestFiles/TestMdOutput_CoreNodeModels/CoreNodeModels.Remember.md @@ -0,0 +1,4 @@ +## Remember - Documentation +This documentation file is auto generated by NodeDocumentationMarkdownGenerator, Version=2.13.0.2212, Culture=neutral, PublicKeyToken=null. + +For more information about adding documentation to nodes see https://github.com/DynamoDS/Dynamo/wiki/Create-and-Add-Custom-Documentation-to-Nodes \ No newline at end of file diff --git a/test/Tools/docGeneratorTestFiles/sampledictionarycontent/Dynamo_Nodes_Documentation.json b/test/Tools/docGeneratorTestFiles/sampledictionarycontent/Dynamo_Nodes_Documentation.json index 0e7d0c9c70c..b85ceddc4a7 100644 --- a/test/Tools/docGeneratorTestFiles/sampledictionarycontent/Dynamo_Nodes_Documentation.json +++ b/test/Tools/docGeneratorTestFiles/sampledictionarycontent/Dynamo_Nodes_Documentation.json @@ -4342,5 +4342,17 @@ "dynFile": ["TrimWhitespace"], "folderPath": "String/Modify/Action", "inDepth": "TrimWhitespace will remove all the whitespace of an input string. In the example below, we start with the string ' Hello World ', which has several leading and trailing spaces. By using TrigWhitespace, we can remove the spaces at the beginning and end of the string, as well as the space between 'Hello' and 'World'." +}, { + "Name": "Remember", + "imageFile": ["Remember"], + "dynFile": ["Remember"], + "folderPath": "ImportExport/Data/Action", + "inDepth": "Store data passing through this node to the Dynamo file. Return the stored data if the input is null." +}, { + "Name": "Gate", + "imageFile": ["Gate"], + "dynFile": ["Gate"], + "folderPath": "Script/Control Flow/Action", + "inDepth": "Block data passing through this node to downstream nodes. Node returns the input data only if the node value is set to Open.\n\nIn Generative Design workflows, this node should be used to control and block the behavior of nodes that will place elements in Revit" } ] diff --git a/test/UI/GraphWithPIIData.dyn b/test/UI/GraphWithPIIData.dyn new file mode 100644 index 00000000000..b567351593a --- /dev/null +++ b/test/UI/GraphWithPIIData.dyn @@ -0,0 +1,401 @@ +{ + "Uuid": "5680465c-7d3b-4098-ba34-b430952acb19", + "IsCustomNode": false, + "Description": "Jesus", + "Name": "GraphWithPIIData", + "ElementResolver": { + "ResolutionMap": {} + }, + "Inputs": [], + "Outputs": [], + "Nodes": [ + { + "ConcreteType": "CoreNodeModels.Input.StringInput, CoreNodeModels", + "Id": "da1a1e32cebc4971affd676ccecfa7ba", + "NodeType": "StringInputNode", + "Inputs": [], + "Outputs": [ + { + "Id": "202519bb4f864f9697af7cb69d257a23", + "Name": "", + "Description": "String", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Creates a string", + "InputValue": "C:\\Users\\alvinoj\\OneDrive - 638273137349440213 - Autodesk\\Desktop\\simpleTextFile.txt" + }, + { + "ConcreteType": "CoreNodeModels.Input.FileObject, CoreNodeModels", + "Id": "63db51a70b53473187e9bb39822f8c03", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "e7921e18638048e1851c6dec42e1a985", + "Name": "path", + "Description": "Path to the file.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "3906a8a8d21642dfa3a5005d3ee151fb", + "Name": "file", + "Description": "File object", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Creates a file object from the given path" + }, + { + "ConcreteType": "CoreNodeModels.Watch, CoreNodeModels", + "WatchWidth": 420.0, + "WatchHeight": 38.0, + "Id": "71392fd180324769861c19a70062c14e", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "f39f8cbfcbb447259306691963d53dfb", + "Name": "", + "Description": "Node to show output from", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "37513fbab36c47408c8aeb26432c8fa6", + "Name": "", + "Description": "Node output", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Visualizes a node's output" + }, + { + "ConcreteType": "CoreNodeModels.Input.Filename, CoreNodeModels", + "Id": "5e1f42a0cc8d427cbd7fde969a988d5f", + "NodeType": "ExtensionNode", + "Inputs": [], + "Outputs": [ + { + "Id": "3a6acd362d6d40d6838eafd04ef1b93a", + "Name": "", + "Description": "File Path", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows you to select a file on the system and returns its file path", + "HintPath": "C:\\Dynamo\\test\\Globant\\Tarjeta Globant TEBCA-.txt", + "InputValue": "..\\Globant\\Tarjeta Globant TEBCA-.txt" + }, + { + "ConcreteType": "PythonNodeModels.PythonNode, PythonNodeModels", + "Code": "# Load the Python Standard and DesignScript Libraries Pyhton script created in https://www.autodesk.com/\r\n\r\nimport sys\r\nimport clr\r\nclr.AddReference('ProtoGeometry')\r\nfrom Autodesk.DesignScript.Geometry import *\r\n\r\n# The inputs to this node will be stored as a list in the IN variables.\r\ndataEnteringNode = IN\r\n\r\n# Place your code below this line\r\n\r\n# Assign your output to the OUT variable.\r\nOUT = 0", + "Engine": "CPython3", + "EngineName": "CPython3", + "VariableInputPorts": true, + "Id": "cd09502288c448348bd2d0bcd0a3c088", + "NodeType": "PythonScriptNode", + "Inputs": [ + { + "Id": "41f03e22850547d7a6a030ef527fd9f8", + "Name": "IN[0]", + "Description": "Input #0", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "3327b2729ba443e4a3be70835e657ee6", + "Name": "OUT", + "Description": "Result of the python script", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Runs an embedded Python script." + }, + { + "ConcreteType": "CoreNodeModels.Input.StringInput, CoreNodeModels", + "Id": "8d58c36ff11d4eb89025f73b4527d55a", + "NodeType": "StringInputNode", + "Inputs": [], + "Outputs": [ + { + "Id": "0298a8bdc7d844c2afa9bb893a0c3a62", + "Name": "", + "Description": "String", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Creates a string", + "InputValue": "This is my Ip address : 192.168.10.150 " + }, + { + "ConcreteType": "CoreNodeModels.Input.StringInput, CoreNodeModels", + "Id": "7d471f2e3b7a4cc8946aa4101fbf348a", + "NodeType": "StringInputNode", + "Inputs": [], + "Outputs": [ + { + "Id": "2568b2522a8649d9a57469af2173b389", + "Name": "", + "Description": "String", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Creates a string", + "InputValue": "My favorites dates :\r\n\r\n01/17/2025\r\n12/12/2024\r\n10-10-2024\r\n01/01/23\r\n02/02/2024\r\n12/13/25\r\n\r\n\r\n" + } + ], + "Connectors": [ + { + "Start": "202519bb4f864f9697af7cb69d257a23", + "End": "e7921e18638048e1851c6dec42e1a985", + "Id": "d7f7d19b00bd401bb59971920cb0d8e9", + "IsHidden": "False" + }, + { + "Start": "3906a8a8d21642dfa3a5005d3ee151fb", + "End": "f39f8cbfcbb447259306691963d53dfb", + "Id": "eadab63db16342a78607675e0addf1d2", + "IsHidden": "False" + } + ], + "Dependencies": [], + "NodeLibraryDependencies": [], + "Thumbnail": "", + "GraphDocumentationURL": null, + "ExtensionWorkspaceData": [ + { + "ExtensionGuid": "28992e1d-abb9-417f-8b1b-05e053bee670", + "Name": "Properties", + "Version": "2.19", + "Data": {} + } + ], + "Author": "", + "Linting": { + "activeLinter": "None", + "activeLinterId": "7b75fb44-43fd-4631-a878-29f4d5d8399a", + "warningCount": 0, + "errorCount": 0 + }, + "Bindings": [], + "View": { + "Dynamo": { + "ScaleFactor": 1.0, + "HasRunWithoutCrash": true, + "IsVisibleInDynamoLibrary": true, + "Version": "3.0.0.6555", + "RunType": "Automatic", + "RunPeriod": "1000" + }, + "Camera": { + "Name": "_Background Preview", + "EyeX": -17.0, + "EyeY": 24.0, + "EyeZ": 50.0, + "LookX": 12.0, + "LookY": -13.0, + "LookZ": -58.0, + "UpX": 0.0, + "UpY": 1.0, + "UpZ": 0.0 + }, + "ConnectorPins": [], + "NodeViews": [ + { + "Id": "da1a1e32cebc4971affd676ccecfa7ba", + "Name": "String", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 341.34208116972, + "Y": 475.94819310175944 + }, + { + "Id": "63db51a70b53473187e9bb39822f8c03", + "Name": "File From Path", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 692.3323109722473, + "Y": 474.7073387653424 + }, + { + "Id": "71392fd180324769861c19a70062c14e", + "Name": "Watch", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 993.511588212951, + "Y": 476.4164955461637 + }, + { + "Id": "5e1f42a0cc8d427cbd7fde969a988d5f", + "Name": "File Path", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 996.9323999101515, + "Y": 300.2347201699016 + }, + { + "Id": "cd09502288c448348bd2d0bcd0a3c088", + "Name": "Python Script", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 364.4743254385395, + "Y": 277.3310619044684 + }, + { + "Id": "8d58c36ff11d4eb89025f73b4527d55a", + "Name": "String", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 362.73159632936245, + "Y": 87.52477891143845 + }, + { + "Id": "7d471f2e3b7a4cc8946aa4101fbf348a", + "Name": "String", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 689.1998987737669, + "Y": 89.70587416762079 + } + ], + "Annotations": [ + { + "Id": "75ccaa00c10c4aedab9250a6d9720951", + "Title": "I'am a note created by jesus.alfredo.alvino@autodesk.com", + "DescriptionText": null, + "IsExpanded": true, + "WidthAdjustment": 0.0, + "HeightAdjustment": 0.0, + "Nodes": [], + "HasNestedGroups": false, + "Left": -17.770164928834674, + "Top": 188.85548739814982, + "Width": 0.0, + "Height": 0.0, + "FontSize": 36.0, + "GroupStyleId": "00000000-0000-0000-0000-000000000000", + "InitialTop": 0.0, + "InitialHeight": 0.0, + "TextblockHeight": 0.0, + "Background": "#FFC1D676" + }, + { + "Id": "e0eba3ae1d7f4c90b418ca3e993e4e8b", + "Title": "Date 1 : 01/01/1984", + "DescriptionText": null, + "IsExpanded": true, + "WidthAdjustment": 0.0, + "HeightAdjustment": 0.0, + "Nodes": [], + "HasNestedGroups": false, + "Left": -16.70625762722483, + "Top": 261.5211428804812, + "Width": 0.0, + "Height": 0.0, + "FontSize": 36.0, + "GroupStyleId": "00000000-0000-0000-0000-000000000000", + "InitialTop": 0.0, + "InitialHeight": 0.0, + "TextblockHeight": 0.0, + "Background": "#FFC1D676" + }, + { + "Id": "2126a32c0f474a5887205bd1b3061d8a", + "Title": "These are my credit cards : 3141-5926-5358-9793, 5358,3141,5926,1791 and 4558 6255 1254 3670", + "DescriptionText": null, + "IsExpanded": true, + "WidthAdjustment": 0.0, + "HeightAdjustment": 0.0, + "Nodes": [], + "HasNestedGroups": false, + "Left": -18.36775573118041, + "Top": 323.1061119320394, + "Width": 0.0, + "Height": 0.0, + "FontSize": 36.0, + "GroupStyleId": "00000000-0000-0000-0000-000000000000", + "InitialTop": 0.0, + "InitialHeight": 0.0, + "TextblockHeight": 0.0, + "Background": "#FFC1D676" + }, + { + "Id": "5bcdbd22f679417cb7e3bd19b2d984d3", + "Title": "These are my SSNs : 123-45-6789 and 123 45 6789", + "DescriptionText": null, + "IsExpanded": true, + "WidthAdjustment": 0.0, + "HeightAdjustment": 0.0, + "Nodes": [], + "HasNestedGroups": false, + "Left": -14.529990712497124, + "Top": 396.5628261634924, + "Width": 0.0, + "Height": 0.0, + "FontSize": 36.0, + "GroupStyleId": "00000000-0000-0000-0000-000000000000", + "InitialTop": 0.0, + "InitialHeight": 0.0, + "TextblockHeight": 0.0, + "Background": "#FFC1D676" + } + ], + "X": 125.73634064638281, + "Y": 23.79545768346918, + "Zoom": 0.9540429248828126 + } +} \ No newline at end of file diff --git a/test/UI/UIGateNode.dyn b/test/UI/UIGateNode.dyn new file mode 100644 index 00000000000..b7c5b55b09e --- /dev/null +++ b/test/UI/UIGateNode.dyn @@ -0,0 +1,284 @@ +{ + "Uuid": "e9ad9db0-00f2-4e95-b50c-e42e1855418d", + "IsCustomNode": false, + "Description": "", + "Name": "UIGateNode", + "ElementResolver": { + "ResolutionMap": {} + }, + "Inputs": [], + "Outputs": [], + "Nodes": [ + { + "ConcreteType": "CoreNodeModels.Logic.Gate, CoreNodeModels", + "InputValue": false, + "Id": "0a4e291d93a84260bd9f37fde3158d83", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "0f1887f8f60b455eb25c729b5f619e12", + "Name": ">", + "Description": "GateInPortToolTip", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "087cdec73a4748009a7cc7be02c5ffd7", + "Name": ">", + "Description": "GateOutPortToolTip", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Block data passing through this node to downstream nodes. Node returns the input data only if the node value is set to Open.\r\n\r\nIn Generative Design workflows, this node should be used to control and block the behavior of nodes that will place elements in Revit" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "d463c2fca2f5452e99c58dd22ab2a394", + "NodeType": "CodeBlockNode", + "Inputs": [], + "Outputs": [ + { + "Id": "621f8d2e5ae24c1b91a6991cd796929e", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "1;" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "448ad21ed4af42b4ae71c45961a173ff", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "d3178b4aafb24c97a67e769f0278c517", + "Name": "object", + "Description": "Object to test.\n\nvar", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "049e5b4ac54f4c2d802c08b2b2009dca", + "Name": "bool", + "Description": "Whether object is null.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Object.IsNull@var", + "Replication": "Auto", + "Description": "Determines if the given object is null.\n\nObject.IsNull (object: var): bool" + }, + { + "ConcreteType": "CoreNodeModels.Logic.Gate, CoreNodeModels", + "InputValue": true, + "Id": "e323a525bab546199c3635ce33c8c46b", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "a59f1ddbd73f4c9890e8cb2923163b3f", + "Name": ">", + "Description": "GateInPortToolTip", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "83a18e7d7e164a8fb3ae41056183f817", + "Name": ">", + "Description": "GateOutPortToolTip", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Block data passing through this node to downstream nodes. Node returns the input data only if the node value is set to Open.\r\n\r\nIn Generative Design workflows, this node should be used to control and block the behavior of nodes that will place elements in Revit" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "414438cdd24f4d74b08e462e0b17ddff", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "d86d0d29d74c4f66a9cc6cafb74449d7", + "Name": "object", + "Description": "Object to test.\n\nvar", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "2f84f1e8426649ec83709678b20e02a3", + "Name": "bool", + "Description": "Whether object is null.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Object.IsNull@var", + "Replication": "Auto", + "Description": "Determines if the given object is null.\n\nObject.IsNull (object: var): bool" + } + ], + "Connectors": [ + { + "Start": "087cdec73a4748009a7cc7be02c5ffd7", + "End": "d3178b4aafb24c97a67e769f0278c517", + "Id": "e66a9e01e5784fafa24f40c5f5e891a3", + "IsHidden": "False" + }, + { + "Start": "621f8d2e5ae24c1b91a6991cd796929e", + "End": "0f1887f8f60b455eb25c729b5f619e12", + "Id": "ffc85ba6b53b452b802dcd791f3d9612", + "IsHidden": "False" + }, + { + "Start": "621f8d2e5ae24c1b91a6991cd796929e", + "End": "a59f1ddbd73f4c9890e8cb2923163b3f", + "Id": "ab382aa0a02f409ca2d4dfe1bd8056b7", + "IsHidden": "False" + }, + { + "Start": "83a18e7d7e164a8fb3ae41056183f817", + "End": "d86d0d29d74c4f66a9cc6cafb74449d7", + "Id": "4ef87edee3044cdfaa28680559bd3a96", + "IsHidden": "False" + } + ], + "Dependencies": [], + "NodeLibraryDependencies": [], + "Thumbnail": "", + "GraphDocumentationURL": null, + "ExtensionWorkspaceData": [ + { + "ExtensionGuid": "28992e1d-abb9-417f-8b1b-05e053bee670", + "Name": "Properties", + "Version": "3.0", + "Data": {} + }, + { + "ExtensionGuid": "DFBD9CC0-DB40-457A-939E-8C8555555A9D", + "Name": "Generative Design", + "Version": "6.0", + "Data": {} + } + ], + "Author": "", + "Linting": { + "activeLinter": "None", + "activeLinterId": "7b75fb44-43fd-4631-a878-29f4d5d8399a", + "warningCount": 0, + "errorCount": 0 + }, + "Bindings": [], + "View": { + "Dynamo": { + "ScaleFactor": 1.0, + "HasRunWithoutCrash": true, + "IsVisibleInDynamoLibrary": true, + "Version": "3.0.0.5795", + "RunType": "Automatic", + "RunPeriod": "1000" + }, + "Camera": { + "Name": "_Background Preview", + "EyeX": -17.0, + "EyeY": 24.0, + "EyeZ": 50.0, + "LookX": 12.0, + "LookY": -13.0, + "LookZ": -58.0, + "UpX": 0.0, + "UpY": 1.0, + "UpZ": 0.0 + }, + "ConnectorPins": [], + "NodeViews": [ + { + "Id": "0a4e291d93a84260bd9f37fde3158d83", + "Name": "Gate", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 296.0, + "Y": 252.75 + }, + { + "Id": "d463c2fca2f5452e99c58dd22ab2a394", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 49.78802839937305, + "Y": 251.9470070998433 + }, + { + "Id": "448ad21ed4af42b4ae71c45961a173ff", + "Name": "Object.IsNull", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 622.7480758949821, + "Y": 252.24250536875752 + }, + { + "Id": "e323a525bab546199c3635ce33c8c46b", + "Name": "Gate", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 293.89968576502383, + "Y": 417.7784871033631 + }, + { + "Id": "414438cdd24f4d74b08e462e0b17ddff", + "Name": "Object.IsNull", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 620.6477616600059, + "Y": 417.2709924721206 + } + ], + "Annotations": [], + "X": 30.64969663596358, + "Y": 143.65060857084856, + "Zoom": 0.6627597805684056 + } +} \ No newline at end of file diff --git a/test/core/callsite/RebindingMultiDimension.dyn b/test/core/callsite/RebindingMultiDimension.dyn index d7a3ab03ce2..a1a887b84b1 100644 --- a/test/core/callsite/RebindingMultiDimension.dyn +++ b/test/core/callsite/RebindingMultiDimension.dyn @@ -13,8 +13,8 @@ "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSVarArgFunction, DynamoCore", "FunctionSignature": "DSCore.List.Join@var[]..[]", "FunctionType": "VariableArgument", - "NodeType": "FunctionNode", "Id": "17341a7b39c645c78849e8e4bd34d946", + "NodeType": "FunctionNode", "Inputs": [ { "Id": "cf4f9890abb748c08fd3c2dc4a9fd7a9", @@ -60,9 +60,8 @@ }, { "ConcreteType": "CoreNodeModels.Input.StringInput, CoreNodeModels", - "NodeType": "StringInputNode", - "InputValue": "tywin", "Id": "9681af874d064ea6871f674b2aa110bd", + "NodeType": "StringInputNode", "Inputs": [], "Outputs": [ { @@ -76,13 +75,13 @@ } ], "Replication": "Disabled", - "Description": "Creates a string." + "Description": "Creates a string", + "InputValue": "tywin" }, { "ConcreteType": "CoreNodeModels.Input.StringInput, CoreNodeModels", - "NodeType": "StringInputNode", - "InputValue": "cersei", "Id": "6f11661a44f04da0b241b22c72e3494f", + "NodeType": "StringInputNode", "Inputs": [], "Outputs": [ { @@ -96,13 +95,13 @@ } ], "Replication": "Disabled", - "Description": "Creates a string." + "Description": "Creates a string", + "InputValue": "cersei" }, { "ConcreteType": "CoreNodeModels.Input.StringInput, CoreNodeModels", - "NodeType": "StringInputNode", - "InputValue": "hodor", "Id": "3a1dc7332b3b474cbb7f2bf0f3c26457", + "NodeType": "StringInputNode", "Inputs": [], "Outputs": [ { @@ -116,13 +115,13 @@ } ], "Replication": "Disabled", - "Description": "Creates a string." + "Description": "Creates a string", + "InputValue": "hodor" }, { "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", - "NodeType": "CodeBlockNode", - "Code": "0..2;", "Id": "024ae18e0c8b49218779879d9c6f9145", + "NodeType": "CodeBlockNode", "Inputs": [], "Outputs": [ { @@ -136,18 +135,18 @@ } ], "Replication": "Disabled", - "Description": "Allows for DesignScript code to be authored directly" + "Description": "Allows for DesignScript code to be authored directly", + "Code": "0..2;" }, { "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", - "NodeType": "FunctionNode", - "FunctionSignature": "+@var[]..[],var[]..[]", "Id": "4b90a83ccbd7432e95beafb2cdcea9db", + "NodeType": "FunctionNode", "Inputs": [ { "Id": "2f123af3f8f048b098583c11cffb2584", "Name": "x", - "Description": "x value.\n\nvar[]..[]", + "Description": "Integer value, double value or string\n\nvar[]..[]", "UsingDefaultValue": false, "Level": 2, "UseLevels": false, @@ -156,7 +155,7 @@ { "Id": "b75422aafc234b59812238271a02824b", "Name": "y", - "Description": "y value.\n\nvar[]..[]", + "Description": "Integer value, double value or string\n\nvar[]..[]", "UsingDefaultValue": false, "Level": 2, "UseLevels": false, @@ -166,27 +165,57 @@ "Outputs": [ { "Id": "d9dc478ea1e8468c852f889585913ae9", - "Name": "var[]..[]", - "Description": "var[]..[]", + "Name": "var", + "Description": "The sum of two input numbers, or the concatenation of two strings", "UsingDefaultValue": false, "Level": 2, "UseLevels": false, "KeepListStructure": false } ], + "FunctionSignature": "+@var[]..[],var[]..[]", "Replication": "CrossProduct", - "Description": "Adds x to y.\n\n+ (x: var[]..[], y: var[]..[]): var[]..[]" + "Description": "Returns addition of x and y\n\n+ (x: var[]..[], y: var[]..[]): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "ff50bd2cb1124d069f34e4b7625a43e4", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "34084f8b80644cc5b18df6121306b574", + "Name": "string", + "Description": "String to find the length of\n\nstring", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "b72e1550327442e19340ac1924985fcf", + "Name": "int", + "Description": "Number of characters in the string", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.String.Length@string", + "Replication": "Auto", + "Description": "Returns the number of characters contained in the given string.\n\nString.Length (string: string): int" }, { "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "883b8faaa6d1442a81fa8f54d9a34e28", "NodeType": "FunctionNode", - "FunctionSignature": "Examples.TraceExampleWrapper.ByString@string", - "Id": "f0a9d8234b8340c485f90d7890805e26", "Inputs": [ { - "Id": "15f4221774b24d74ba47973a717ae4b6", - "Name": "description", - "Description": "string", + "Id": "102149c4cfcb403580c89e82f485fd2f", + "Name": "x", + "Description": "int", "UsingDefaultValue": false, "Level": 2, "UseLevels": false, @@ -195,57 +224,96 @@ ], "Outputs": [ { - "Id": "ad422a54226f4d17bcdfd34d0a259004", - "Name": "TraceExampleItem", - "Description": "TraceExampleItem", + "Id": "5b88ed4478b64ce9904745ccaffb3537", + "Name": "WrapperObject", + "Description": "WrapperObject", "UsingDefaultValue": false, "Level": 2, "UseLevels": false, "KeepListStructure": false } ], + "FunctionSignature": "FFITarget.WrapperObject.WrapperObject@int", "Replication": "Auto", - "Description": "TraceExampleWrapper.ByString (description: string): TraceExampleItem" + "Description": "WrapperObject.WrapperObject (x: int): WrapperObject" } ], "Connectors": [ { "Start": "2f7c9720adaf42d6b7cd8b5713c9197f", "End": "2f123af3f8f048b098583c11cffb2584", - "Id": "56035958152d4e7791c8cfad07e89b94" + "Id": "56035958152d4e7791c8cfad07e89b94", + "IsHidden": "False" }, { "Start": "8f27a35d72034a1ca9930cea965622e0", "End": "cf4f9890abb748c08fd3c2dc4a9fd7a9", - "Id": "fef272b2dc7741e19fe9deb8d3d08b4b" + "Id": "fef272b2dc7741e19fe9deb8d3d08b4b", + "IsHidden": "False" }, { "Start": "ec013abb95584c6998fd81626706bbb3", "End": "126cfad260784bf9be157a640bf7f8f3", - "Id": "f636f6dac2a24022b3d924f69170e1ed" + "Id": "f636f6dac2a24022b3d924f69170e1ed", + "IsHidden": "False" }, { "Start": "e0524728ae2b4b72a0a8e19ca140e839", "End": "9a56329520314755923a2013274c59b2", - "Id": "67b4c6d22edb4a29b12daf3d677e1338" + "Id": "67b4c6d22edb4a29b12daf3d677e1338", + "IsHidden": "False" }, { "Start": "3066ccbdc576486e8a80417a2391fb1c", "End": "b75422aafc234b59812238271a02824b", - "Id": "aea59bb76dc94b6a8c832ca47909fcc8" + "Id": "aea59bb76dc94b6a8c832ca47909fcc8", + "IsHidden": "False" }, { "Start": "d9dc478ea1e8468c852f889585913ae9", - "End": "15f4221774b24d74ba47973a717ae4b6", - "Id": "faafd421f99f457eb4699324183c9243" + "End": "34084f8b80644cc5b18df6121306b574", + "Id": "1cb03f2baefa4c5cb190fcfd348c7551", + "IsHidden": "False" + }, + { + "Start": "b72e1550327442e19340ac1924985fcf", + "End": "102149c4cfcb403580c89e82f485fd2f", + "Id": "82c9ede4d22a427d9ed4e71c36dfeded", + "IsHidden": "False" } ], "Dependencies": [], + "NodeLibraryDependencies": [ + { + "Name": "FFITarget.dll", + "ReferenceType": "ZeroTouch", + "Nodes": [ + "883b8faaa6d1442a81fa8f54d9a34e28" + ] + } + ], + "Thumbnail": null, + "GraphDocumentationURL": null, + "ExtensionWorkspaceData": [ + { + "ExtensionGuid": "28992e1d-abb9-417f-8b1b-05e053bee670", + "Name": "Properties", + "Version": "3.0", + "Data": {} + } + ], + "Author": "None provided", + "Linting": { + "activeLinter": "None", + "activeLinterId": "7b75fb44-43fd-4631-a878-29f4d5d8399a", + "warningCount": 0, + "errorCount": 0 + }, "Bindings": [ { - "NodeId": "f0a9d823-4b83-40c4-85f9-0d7890805e26", + "NodeId": "883b8faa-a6d1-442a-81fa-8f54d9a34e28", "Binding": { - "ByString_InClassDecl-1_InFunctionScope-1_Instance0_f0a9d823-4b83-40c4-85f9-0d7890805e26": "PFNPQVAtRU5WOkVudmVsb3BlIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOlNPQVAtRU5DPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyIgeG1sbnM6U09BUC1FTlY9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW52ZWxvcGUvIiB4bWxuczpjbHI9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vc29hcC9lbmNvZGluZy9jbHIvMS4wIiBTT0FQLUVOVjplbmNvZGluZ1N0eWxlPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyI+DQo8U09BUC1FTlY6Qm9keT4NCjxhMTpDYWxsU2l0ZV94MDAyQl9UcmFjZVNlcmlhbGlzZXJIZWxwZXIgaWQ9InJlZi0xIiB4bWxuczphMT0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9jbHIvbnNhc3NlbS9Qcm90b0NvcmUvUHJvdG9Db3JlJTJDJTIwVmVyc2lvbiUzRDIuMi4wLjQwMDYlMkMlMjBDdWx0dXJlJTNEbmV1dHJhbCUyQyUyMFB1YmxpY0tleVRva2VuJTNEbnVsbCI+DQo8TnVtYmVyT2ZFbGVtZW50cz4xPC9OdW1iZXJPZkVsZW1lbnRzPg0KPEJhc2UtMF9IYXNEYXRhPmZhbHNlPC9CYXNlLTBfSGFzRGF0YT4NCjxCYXNlLTBfSGFzTmVzdGVkRGF0YT50cnVlPC9CYXNlLTBfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTBfTmVzdGVkRGF0YUNvdW50PjM8L0Jhc2UtMF9OZXN0ZWREYXRhQ291bnQ+DQo8QmFzZS0wLTBfSGFzRGF0YT5mYWxzZTwvQmFzZS0wLTBfSGFzRGF0YT4NCjxCYXNlLTAtMF9IYXNOZXN0ZWREYXRhPnRydWU8L0Jhc2UtMC0wX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTBfTmVzdGVkRGF0YUNvdW50PjM8L0Jhc2UtMC0wX05lc3RlZERhdGFDb3VudD4NCjxCYXNlLTAtMC0wX0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTAtMF9IYXNEYXRhPg0KPEJhc2UtMC0wLTBfRGF0YSBpZD0icmVmLTMiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcFVjbUZqWldGaWJHVkpaQ0JwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFY0WVcxd2JHVnpMMU5oYlhCc1pVeHBZbkpoY25sYVpYSnZWRzkxWTJnbE1rTWxNakJXWlhKemFXOXVKVE5FTUM0NExqSXVNQ1V5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHdQQzlwYm5SSlJENE5Dand2WVRFNlZISmhZMlZoWW14bFNXUStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTAtMF9EYXRhPg0KPEJhc2UtMC0wLTBfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTAtMF9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0wLTFfSGFzRGF0YT50cnVlPC9CYXNlLTAtMC0xX0hhc0RhdGE+DQo8QmFzZS0wLTAtMV9EYXRhIGlkPSJyZWYtNCI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwVWNtRmpaV0ZpYkdWSlpDQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwVjRZVzF3YkdWekwxTmhiWEJzWlV4cFluSmhjbmxhWlhKdlZHOTFZMmdsTWtNbE1qQldaWEp6YVc5dUpUTkVNQzQ0TGpJdU1DVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eFBDOXBiblJKUkQ0TkNqd3ZZVEU2VkhKaFkyVmhZbXhsU1dRK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMC0xX0RhdGE+DQo8QmFzZS0wLTAtMV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMC0xX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTAtMl9IYXNEYXRhPnRydWU8L0Jhc2UtMC0wLTJfSGFzRGF0YT4NCjxCYXNlLTAtMC0yX0RhdGEgaWQ9InJlZi01Ij5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBVY21GalpXRmliR1ZKWkNCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBWNFlXMXdiR1Z6TDFOaGJYQnNaVXhwWW5KaGNubGFaWEp2Vkc5MVkyZ2xNa01sTWpCV1pYSnphVzl1SlRORU1DNDRMakl1TUNVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR5UEM5cGJuUkpSRDROQ2p3dllURTZWSEpoWTJWaFlteGxTV1ErRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0wLTJfRGF0YT4NCjxCYXNlLTAtMC0yX0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0wLTJfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMV9IYXNEYXRhPmZhbHNlPC9CYXNlLTAtMV9IYXNEYXRhPg0KPEJhc2UtMC0xX0hhc05lc3RlZERhdGE+dHJ1ZTwvQmFzZS0wLTFfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMV9OZXN0ZWREYXRhQ291bnQ+MzwvQmFzZS0wLTFfTmVzdGVkRGF0YUNvdW50Pg0KPEJhc2UtMC0xLTBfSGFzRGF0YT50cnVlPC9CYXNlLTAtMS0wX0hhc0RhdGE+DQo8QmFzZS0wLTEtMF9EYXRhIGlkPSJyZWYtNiI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwVWNtRmpaV0ZpYkdWSlpDQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwVjRZVzF3YkdWekwxTmhiWEJzWlV4cFluSmhjbmxhWlhKdlZHOTFZMmdsTWtNbE1qQldaWEp6YVc5dUpUTkVNQzQ0TGpJdU1DVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0elBDOXBiblJKUkQ0TkNqd3ZZVEU2VkhKaFkyVmhZbXhsU1dRK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMS0wX0RhdGE+DQo8QmFzZS0wLTEtMF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMS0wX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEtMV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xLTFfSGFzRGF0YT4NCjxCYXNlLTAtMS0xX0RhdGEgaWQ9InJlZi03Ij5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBVY21GalpXRmliR1ZKWkNCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBWNFlXMXdiR1Z6TDFOaGJYQnNaVXhwWW5KaGNubGFaWEp2Vkc5MVkyZ2xNa01sTWpCV1pYSnphVzl1SlRORU1DNDRMakl1TUNVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDQwUEM5cGJuUkpSRDROQ2p3dllURTZWSEpoWTJWaFlteGxTV1ErRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xLTFfRGF0YT4NCjxCYXNlLTAtMS0xX0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xLTFfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMS0yX0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTEtMl9IYXNEYXRhPg0KPEJhc2UtMC0xLTJfRGF0YSBpZD0icmVmLTgiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcFVjbUZqWldGaWJHVkpaQ0JwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFY0WVcxd2JHVnpMMU5oYlhCc1pVeHBZbkpoY25sYVpYSnZWRzkxWTJnbE1rTWxNakJXWlhKemFXOXVKVE5FTUM0NExqSXVNQ1V5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENDFQQzlwYm5SSlJENE5Dand2WVRFNlZISmhZMlZoWW14bFNXUStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTEtMl9EYXRhPg0KPEJhc2UtMC0xLTJfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTEtMl9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0yX0hhc0RhdGE+ZmFsc2U8L0Jhc2UtMC0yX0hhc0RhdGE+DQo8QmFzZS0wLTJfSGFzTmVzdGVkRGF0YT50cnVlPC9CYXNlLTAtMl9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0yX05lc3RlZERhdGFDb3VudD4zPC9CYXNlLTAtMl9OZXN0ZWREYXRhQ291bnQ+DQo8QmFzZS0wLTItMF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0yLTBfSGFzRGF0YT4NCjxCYXNlLTAtMi0wX0RhdGEgaWQ9InJlZi05Ij5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBVY21GalpXRmliR1ZKWkNCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBWNFlXMXdiR1Z6TDFOaGJYQnNaVXhwWW5KaGNubGFaWEp2Vkc5MVkyZ2xNa01sTWpCV1pYSnphVzl1SlRORU1DNDRMakl1TUNVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDQyUEM5cGJuUkpSRDROQ2p3dllURTZWSEpoWTJWaFlteGxTV1ErRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0yLTBfRGF0YT4NCjxCYXNlLTAtMi0wX0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0yLTBfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMi0xX0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTItMV9IYXNEYXRhPg0KPEJhc2UtMC0yLTFfRGF0YSBpZD0icmVmLTEwIj5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBVY21GalpXRmliR1ZKWkNCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBWNFlXMXdiR1Z6TDFOaGJYQnNaVXhwWW5KaGNubGFaWEp2Vkc5MVkyZ2xNa01sTWpCV1pYSnphVzl1SlRORU1DNDRMakl1TUNVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDQzUEM5cGJuUkpSRDROQ2p3dllURTZWSEpoWTJWaFlteGxTV1ErRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0yLTFfRGF0YT4NCjxCYXNlLTAtMi0xX0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0yLTFfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMi0yX0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTItMl9IYXNEYXRhPg0KPEJhc2UtMC0yLTJfRGF0YSBpZD0icmVmLTExIj5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBVY21GalpXRmliR1ZKWkNCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBWNFlXMXdiR1Z6TDFOaGJYQnNaVXhwWW5KaGNubGFaWEp2Vkc5MVkyZ2xNa01sTWpCV1pYSnphVzl1SlRORU1DNDRMakl1TUNVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDQ0UEM5cGJuUkpSRDROQ2p3dllURTZWSEpoWTJWaFlteGxTV1ErRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0yLTJfRGF0YT4NCjxCYXNlLTAtMi0yX0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0yLTJfSGFzTmVzdGVkRGF0YT4NCjwvYTE6Q2FsbFNpdGVfeDAwMkJfVHJhY2VTZXJpYWxpc2VySGVscGVyPg0KPC9TT0FQLUVOVjpCb2R5Pg0KPC9TT0FQLUVOVjpFbnZlbG9wZT4NCg==" + "WrapperObject_InClassDecl-1_InFunctionScope-1_Instance0_883b8faa-a6d1-442a-81fa-8f54d9a34e28": "H4sIAAAAAAAACouuVspLLS5JTXFJLElUsorG4KaAGUrVMUqeLjFKVoa1SrU6GKJGWEWNgaKxIHH8Rppg1WyKVdSMOCPNsWq2wCpqCTYytjYWAAg70Y8LAQAA" } } ], @@ -254,12 +322,12 @@ "ScaleFactor": 1.0, "HasRunWithoutCrash": true, "IsVisibleInDynamoLibrary": true, - "Version": "2.2.0.4006", + "Version": "3.0.0.5795", "RunType": "Manual", "RunPeriod": "100" }, "Camera": { - "Name": "Background Preview", + "Name": "_Background Preview", "EyeX": -17.0, "EyeY": 24.0, "EyeZ": 50.0, @@ -270,81 +338,92 @@ "UpY": 1.0, "UpZ": 0.0 }, + "ConnectorPins": [], "NodeViews": [ { "Id": "17341a7b39c645c78849e8e4bd34d946", + "Name": "List.Join", "IsSetAsInput": false, "IsSetAsOutput": false, - "Name": "List.Join", - "ShowGeometry": true, "Excluded": false, + "ShowGeometry": true, "X": 172.0, "Y": 99.0 }, { "Id": "9681af874d064ea6871f674b2aa110bd", + "Name": "String", "IsSetAsInput": false, "IsSetAsOutput": false, - "Name": "String", - "ShowGeometry": true, "Excluded": false, + "ShowGeometry": true, "X": 0.0, "Y": 0.0 }, { "Id": "6f11661a44f04da0b241b22c72e3494f", + "Name": "String", "IsSetAsInput": false, "IsSetAsOutput": false, - "Name": "String", - "ShowGeometry": true, "Excluded": false, + "ShowGeometry": true, "X": 0.0, "Y": 125.0 }, { "Id": "3a1dc7332b3b474cbb7f2bf0f3c26457", + "Name": "String", "IsSetAsInput": false, "IsSetAsOutput": false, - "Name": "String", - "ShowGeometry": true, "Excluded": false, + "ShowGeometry": true, "X": 0.0, "Y": 250.0 }, { "Id": "024ae18e0c8b49218779879d9c6f9145", + "Name": "Code Block", "IsSetAsInput": false, "IsSetAsOutput": false, - "Name": "Code Block", - "ShowGeometry": true, "Excluded": false, + "ShowGeometry": true, "X": 242.0, "Y": 299.183908045977 }, { "Id": "4b90a83ccbd7432e95beafb2cdcea9db", + "Name": "+", "IsSetAsInput": false, "IsSetAsOutput": false, - "Name": "+", - "ShowGeometry": true, "Excluded": false, + "ShowGeometry": true, "X": 408.0, "Y": 99.5287356321839 }, { - "Id": "f0a9d8234b8340c485f90d7890805e26", + "Id": "ff50bd2cb1124d069f34e4b7625a43e4", + "Name": "String.Length", "IsSetAsInput": false, "IsSetAsOutput": false, - "Name": "TraceExampleWrapper.ByString", + "Excluded": false, "ShowGeometry": true, + "X": 500.71363547629517, + "Y": 305.05454322869525 + }, + { + "Id": "883b8faaa6d1442a81fa8f54d9a34e28", + "Name": "WrapperObject.WrapperObject", + "IsSetAsInput": false, + "IsSetAsOutput": false, "Excluded": false, - "X": 589.735632183907, - "Y": 104.37356321839 + "ShowGeometry": true, + "X": 750.1791118173492, + "Y": 86.30079939615158 } ], "Annotations": [], - "X": 212.38220365208429, - "Y": 266.50039077365631, - "Zoom": 0.9501303922100196 + "X": 72.34569867980304, + "Y": 55.41422880136105, + "Zoom": 0.9279841178645003 } } \ No newline at end of file diff --git a/test/core/callsite/RebindingSingleDimension.dyn b/test/core/callsite/RebindingSingleDimension.dyn index ed66a2220a4..7af03217df8 100644 --- a/test/core/callsite/RebindingSingleDimension.dyn +++ b/test/core/callsite/RebindingSingleDimension.dyn @@ -13,8 +13,8 @@ "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSVarArgFunction, DynamoCore", "FunctionSignature": "DSCore.List.Join@var[]..[]", "FunctionType": "VariableArgument", - "NodeType": "FunctionNode", "Id": "17341a7b39c645c78849e8e4bd34d946", + "NodeType": "FunctionNode", "Inputs": [ { "Id": "61074c5b44624b37a94e078ebe97098b", @@ -60,9 +60,8 @@ }, { "ConcreteType": "CoreNodeModels.Input.StringInput, CoreNodeModels", - "NodeType": "StringInputNode", - "InputValue": "tywin", "Id": "9681af874d064ea6871f674b2aa110bd", + "NodeType": "StringInputNode", "Inputs": [], "Outputs": [ { @@ -76,13 +75,13 @@ } ], "Replication": "Disabled", - "Description": "Creates a string." + "Description": "Creates a string", + "InputValue": "tywin" }, { "ConcreteType": "CoreNodeModels.Input.StringInput, CoreNodeModels", - "NodeType": "StringInputNode", - "InputValue": "cersei", "Id": "6f11661a44f04da0b241b22c72e3494f", + "NodeType": "StringInputNode", "Inputs": [], "Outputs": [ { @@ -96,13 +95,13 @@ } ], "Replication": "Disabled", - "Description": "Creates a string." + "Description": "Creates a string", + "InputValue": "cersei" }, { "ConcreteType": "CoreNodeModels.Input.StringInput, CoreNodeModels", - "NodeType": "StringInputNode", - "InputValue": "hodor", "Id": "3a1dc7332b3b474cbb7f2bf0f3c26457", + "NodeType": "StringInputNode", "Inputs": [], "Outputs": [ { @@ -116,13 +115,13 @@ } ], "Replication": "Disabled", - "Description": "Creates a string." + "Description": "Creates a string", + "InputValue": "hodor" }, { "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", - "NodeType": "CodeBlockNode", - "Code": "0..2;", "Id": "024ae18e0c8b49218779879d9c6f9145", + "NodeType": "CodeBlockNode", "Inputs": [], "Outputs": [ { @@ -136,18 +135,18 @@ } ], "Replication": "Disabled", - "Description": "Allows for DesignScript code to be authored directly" + "Description": "Allows for DesignScript code to be authored directly", + "Code": "0..2;" }, { "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", - "NodeType": "FunctionNode", - "FunctionSignature": "+@var[]..[],var[]..[]", "Id": "4b90a83ccbd7432e95beafb2cdcea9db", + "NodeType": "FunctionNode", "Inputs": [ { "Id": "3cfd125ba46042dbabc35988b9ea28ce", "Name": "x", - "Description": "x value.\n\nvar[]..[]", + "Description": "Integer value, double value or string\n\nvar[]..[]", "UsingDefaultValue": false, "Level": 2, "UseLevels": false, @@ -156,7 +155,7 @@ { "Id": "d6fa1e51c6c84be8bc026bd311015c19", "Name": "y", - "Description": "y value.\n\nvar[]..[]", + "Description": "Integer value, double value or string\n\nvar[]..[]", "UsingDefaultValue": false, "Level": 2, "UseLevels": false, @@ -166,27 +165,57 @@ "Outputs": [ { "Id": "882d77d2e4e14f8b8b8bca561bfb1543", - "Name": "var[]..[]", - "Description": "var[]..[]", + "Name": "var", + "Description": "The sum of two input numbers, or the concatenation of two strings", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "+@var[]..[],var[]..[]", + "Replication": "Auto", + "Description": "Returns addition of x and y\n\n+ (x: var[]..[], y: var[]..[]): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "07b3ea3916ae43079ae631f0990cf622", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "0310b3e1aac149daa21cfd44c7fa47c5", + "Name": "string", + "Description": "String to find the length of\n\nstring", "UsingDefaultValue": false, "Level": 2, "UseLevels": false, "KeepListStructure": false } ], + "Outputs": [ + { + "Id": "84ff91e69ff649f5a1864d2d07eb990e", + "Name": "int", + "Description": "Number of characters in the string", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.String.Length@string", "Replication": "Auto", - "Description": "Adds x to y.\n\n+ (x: var[]..[], y: var[]..[]): var[]..[]" + "Description": "Returns the number of characters contained in the given string.\n\nString.Length (string: string): int" }, { "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "65f399d301c54ef2b2441fd3d21c452f", "NodeType": "FunctionNode", - "FunctionSignature": "Examples.TraceExampleWrapper.ByString@string", - "Id": "5b8571b5cda541878dccef6cc5068aaf", "Inputs": [ { - "Id": "a8b9c87cc28546b7b246d0a06c6136b7", - "Name": "description", - "Description": "string", + "Id": "53862a2026d240aa936961bfaaa0eaf8", + "Name": "x", + "Description": "int", "UsingDefaultValue": false, "Level": 2, "UseLevels": false, @@ -195,57 +224,96 @@ ], "Outputs": [ { - "Id": "946b4f760df7485191e4fcfcbea581c2", - "Name": "TraceExampleItem", - "Description": "TraceExampleItem", + "Id": "4905db17914e45edbbf1c6dfc9ddfe80", + "Name": "WrapperObject", + "Description": "WrapperObject", "UsingDefaultValue": false, "Level": 2, "UseLevels": false, "KeepListStructure": false } ], + "FunctionSignature": "FFITarget.WrapperObject.WrapperObject@int", "Replication": "Auto", - "Description": "TraceExampleWrapper.ByString (description: string): TraceExampleItem" + "Description": "WrapperObject.WrapperObject (x: int): WrapperObject" } ], "Connectors": [ { "Start": "71c750061f1f4f08b2b96f59efc15a1c", "End": "3cfd125ba46042dbabc35988b9ea28ce", - "Id": "20d32b0f14044944838d0987f6a8433c" + "Id": "20d32b0f14044944838d0987f6a8433c", + "IsHidden": "False" }, { "Start": "4797b3fc38384fbaa45e1a78df4cd352", "End": "61074c5b44624b37a94e078ebe97098b", - "Id": "c78d2ebbcffd430ca3bc39e7c06db68b" + "Id": "c78d2ebbcffd430ca3bc39e7c06db68b", + "IsHidden": "False" }, { "Start": "f6935880e5f54455b1487a439bfa4161", "End": "e5c8d5de67464fe6a56c20994f92d37a", - "Id": "ce60a33b0d8e4f6090ada02075eda5cf" + "Id": "ce60a33b0d8e4f6090ada02075eda5cf", + "IsHidden": "False" }, { "Start": "e0f37e0301a541ceb9ba4323b3a2599e", "End": "ff39b229c69b42f5b3256f9e60d32d26", - "Id": "f6ffae97dc564566a65c80cd2a058390" + "Id": "f6ffae97dc564566a65c80cd2a058390", + "IsHidden": "False" }, { "Start": "2d32b3d66755480cb1b07e89d9752bef", "End": "d6fa1e51c6c84be8bc026bd311015c19", - "Id": "161d9967251a47ddb94195a84e88a846" + "Id": "161d9967251a47ddb94195a84e88a846", + "IsHidden": "False" }, { "Start": "882d77d2e4e14f8b8b8bca561bfb1543", - "End": "a8b9c87cc28546b7b246d0a06c6136b7", - "Id": "c7ec769029f74b1cb42a5802cf050870" + "End": "0310b3e1aac149daa21cfd44c7fa47c5", + "Id": "8ca4b760eda04c27b3fc750e5221723f", + "IsHidden": "False" + }, + { + "Start": "84ff91e69ff649f5a1864d2d07eb990e", + "End": "53862a2026d240aa936961bfaaa0eaf8", + "Id": "f393d31998244c0db265e25f94ae9eef", + "IsHidden": "False" } ], "Dependencies": [], + "NodeLibraryDependencies": [ + { + "Name": "FFITarget.dll", + "ReferenceType": "ZeroTouch", + "Nodes": [ + "65f399d301c54ef2b2441fd3d21c452f" + ] + } + ], + "Thumbnail": null, + "GraphDocumentationURL": null, + "ExtensionWorkspaceData": [ + { + "ExtensionGuid": "28992e1d-abb9-417f-8b1b-05e053bee670", + "Name": "Properties", + "Version": "3.0", + "Data": {} + } + ], + "Author": "None provided", + "Linting": { + "activeLinter": "None", + "activeLinterId": "7b75fb44-43fd-4631-a878-29f4d5d8399a", + "warningCount": 0, + "errorCount": 0 + }, "Bindings": [ { - "NodeId": "5b8571b5-cda5-4187-8dcc-ef6cc5068aaf", + "NodeId": "65f399d3-01c5-4ef2-b244-1fd3d21c452f", "Binding": { - "ByString_InClassDecl-1_InFunctionScope-1_Instance0_5b8571b5-cda5-4187-8dcc-ef6cc5068aaf": "PFNPQVAtRU5WOkVudmVsb3BlIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOlNPQVAtRU5DPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyIgeG1sbnM6U09BUC1FTlY9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW52ZWxvcGUvIiB4bWxuczpjbHI9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vc29hcC9lbmNvZGluZy9jbHIvMS4wIiBTT0FQLUVOVjplbmNvZGluZ1N0eWxlPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyI+DQo8U09BUC1FTlY6Qm9keT4NCjxhMTpDYWxsU2l0ZV94MDAyQl9UcmFjZVNlcmlhbGlzZXJIZWxwZXIgaWQ9InJlZi0xIiB4bWxuczphMT0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9jbHIvbnNhc3NlbS9Qcm90b0NvcmUvUHJvdG9Db3JlJTJDJTIwVmVyc2lvbiUzRDIuMi4wLjQwMDYlMkMlMjBDdWx0dXJlJTNEbmV1dHJhbCUyQyUyMFB1YmxpY0tleVRva2VuJTNEbnVsbCI+DQo8TnVtYmVyT2ZFbGVtZW50cz4xPC9OdW1iZXJPZkVsZW1lbnRzPg0KPEJhc2UtMF9IYXNEYXRhPmZhbHNlPC9CYXNlLTBfSGFzRGF0YT4NCjxCYXNlLTBfSGFzTmVzdGVkRGF0YT50cnVlPC9CYXNlLTBfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTBfTmVzdGVkRGF0YUNvdW50PjM8L0Jhc2UtMF9OZXN0ZWREYXRhQ291bnQ+DQo8QmFzZS0wLTBfSGFzRGF0YT50cnVlPC9CYXNlLTAtMF9IYXNEYXRhPg0KPEJhc2UtMC0wX0RhdGEgaWQ9InJlZi0zIj5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBVY21GalpXRmliR1ZKWkNCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBWNFlXMXdiR1Z6TDFOaGJYQnNaVXhwWW5KaGNubGFaWEp2Vkc5MVkyZ2xNa01sTWpCV1pYSnphVzl1SlRORU1DNDRMakl1TUNVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR3UEM5cGJuUkpSRDROQ2p3dllURTZWSEpoWTJWaFlteGxTV1ErRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0wX0RhdGE+DQo8QmFzZS0wLTBfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTBfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xX0hhc0RhdGE+DQo8QmFzZS0wLTFfRGF0YSBpZD0icmVmLTQiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcFVjbUZqWldGaWJHVkpaQ0JwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFY0WVcxd2JHVnpMMU5oYlhCc1pVeHBZbkpoY25sYVpYSnZWRzkxWTJnbE1rTWxNakJXWlhKemFXOXVKVE5FTUM0NExqSXVNQ1V5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhQQzlwYm5SSlJENE5Dand2WVRFNlZISmhZMlZoWW14bFNXUStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTFfRGF0YT4NCjxCYXNlLTAtMV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMV9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0yX0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTJfSGFzRGF0YT4NCjxCYXNlLTAtMl9EYXRhIGlkPSJyZWYtNSI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwVWNtRmpaV0ZpYkdWSlpDQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwVjRZVzF3YkdWekwxTmhiWEJzWlV4cFluSmhjbmxhWlhKdlZHOTFZMmdsTWtNbE1qQldaWEp6YVc5dUpUTkVNQzQ0TGpJdU1DVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eVBDOXBiblJKUkQ0TkNqd3ZZVEU2VkhKaFkyVmhZbXhsU1dRK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMl9EYXRhPg0KPEJhc2UtMC0yX0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0yX0hhc05lc3RlZERhdGE+DQo8L2ExOkNhbGxTaXRlX3gwMDJCX1RyYWNlU2VyaWFsaXNlckhlbHBlcj4NCjwvU09BUC1FTlY6Qm9keT4NCjwvU09BUC1FTlY6RW52ZWxvcGU+DQo=" + "WrapperObject_InClassDecl-1_InFunctionScope-1_Instance0_65f399d3-01c5-4ef2-b244-1fd3d21c452f": "H4sIAAAAAAAACouuVspLLS5JTXFJLElUsoquVkoBM5SqY5Q8XWKUrAxrlWp1MESNsIoaA0Vja2MBPbjZvVQAAAA=" } } ], @@ -254,12 +322,12 @@ "ScaleFactor": 1.0, "HasRunWithoutCrash": true, "IsVisibleInDynamoLibrary": true, - "Version": "2.2.0.4006", + "Version": "3.0.0.5795", "RunType": "Manual", "RunPeriod": "100" }, "Camera": { - "Name": "Background Preview", + "Name": "_Background Preview", "EyeX": -17.0, "EyeY": 24.0, "EyeZ": 50.0, @@ -270,81 +338,92 @@ "UpY": 1.0, "UpZ": 0.0 }, + "ConnectorPins": [], "NodeViews": [ { - "ShowGeometry": true, - "Name": "List.Join", "Id": "17341a7b39c645c78849e8e4bd34d946", + "Name": "List.Join", "IsSetAsInput": false, "IsSetAsOutput": false, "Excluded": false, + "ShowGeometry": true, "X": 172.0, "Y": 99.0 }, { - "ShowGeometry": true, - "Name": "String", "Id": "9681af874d064ea6871f674b2aa110bd", + "Name": "String", "IsSetAsInput": false, "IsSetAsOutput": false, "Excluded": false, + "ShowGeometry": true, "X": 0.0, "Y": 0.0 }, { - "ShowGeometry": true, - "Name": "String", "Id": "6f11661a44f04da0b241b22c72e3494f", + "Name": "String", "IsSetAsInput": false, "IsSetAsOutput": false, "Excluded": false, + "ShowGeometry": true, "X": 0.0, "Y": 125.0 }, { - "ShowGeometry": true, - "Name": "String", "Id": "3a1dc7332b3b474cbb7f2bf0f3c26457", + "Name": "String", "IsSetAsInput": false, "IsSetAsOutput": false, "Excluded": false, + "ShowGeometry": true, "X": 0.0, "Y": 250.0 }, { - "ShowGeometry": true, - "Name": "Code Block", "Id": "024ae18e0c8b49218779879d9c6f9145", + "Name": "Code Block", "IsSetAsInput": false, "IsSetAsOutput": false, "Excluded": false, + "ShowGeometry": true, "X": 242.0, "Y": 299.183908045977 }, { - "ShowGeometry": true, - "Name": "+", "Id": "4b90a83ccbd7432e95beafb2cdcea9db", + "Name": "+", "IsSetAsInput": false, "IsSetAsOutput": false, "Excluded": false, + "ShowGeometry": true, "X": 408.0, "Y": 99.0 }, { + "Id": "07b3ea3916ae43079ae631f0990cf622", + "Name": "String.Length", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, "ShowGeometry": true, - "Name": "TraceExampleWrapper.ByString", - "Id": "5b8571b5cda541878dccef6cc5068aaf", + "X": 670.2709875137249, + "Y": 244.60023127662708 + }, + { + "Id": "65f399d301c54ef2b2441fd3d21c452f", + "Name": "WrapperObject.WrapperObject", "IsSetAsInput": false, "IsSetAsOutput": false, "Excluded": false, - "X": 593.436781609194, - "Y": 98.5574712643674 + "ShowGeometry": true, + "X": 841.3719242488306, + "Y": 76.33914411388793 } ], "Annotations": [], - "X": 242.45317467813635, - "Y": 232.23719167613356, - "Zoom": 0.70426265512827058 + "X": 212.45317467813635, + "Y": 194.23719167613356, + "Zoom": 0.7042626551282706 } } \ No newline at end of file diff --git a/test/core/callsite/element_binding.dyn b/test/core/callsite/element_binding.dyn index 1849d68caa0..023f35a4526 100644 --- a/test/core/callsite/element_binding.dyn +++ b/test/core/callsite/element_binding.dyn @@ -2,18 +2,37 @@ "Uuid": "ce4b7a61-2ef7-46ba-965c-e5a69dc6d6a1", "IsCustomNode": false, "Description": null, - "Name": "element_binding2", + "Name": "element_binding", "ElementResolver": { "ResolutionMap": {} }, "Inputs": [], "Outputs": [], "Nodes": [ + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "4efdba9e975c492989a3e7b3013d127d", + "NodeType": "CodeBlockNode", + "Inputs": [], + "Outputs": [ + { + "Id": "3696729e5bf748f1a33cd5a81e89ae65", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "23;" + }, { "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", - "NodeType": "FunctionNode", - "FunctionSignature": "FFITarget.WrapperObject.WrapperObject@int", "Id": "1e83cc257de64a7ca702600b79aa194d", + "NodeType": "FunctionNode", "Inputs": [ { "Id": "7b03c2a4ea60468c8c2ae9e29e0b839b", @@ -36,34 +55,14 @@ "KeepListStructure": false } ], + "FunctionSignature": "FFITarget.WrapperObject.WrapperObject@int", "Replication": "Auto", "Description": "WrapperObject.WrapperObject (x: int): WrapperObject" }, - { - "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", - "NodeType": "CodeBlockNode", - "Code": "23;", - "Id": "4efdba9e975c492989a3e7b3013d127d", - "Inputs": [], - "Outputs": [ - { - "Id": "3696729e5bf748f1a33cd5a81e89ae65", - "Name": "", - "Description": "Value of expression at line 1", - "UsingDefaultValue": false, - "Level": 2, - "UseLevels": false, - "KeepListStructure": false - } - ], - "Replication": "Disabled", - "Description": "Allows for DesignScript code to be authored directly" - }, { "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", - "NodeType": "FunctionNode", - "FunctionSignature": "FFITarget.WrapperObject.ID", "Id": "c760af7e042c4722a8343445bf41f549", + "NodeType": "FunctionNode", "Inputs": [ { "Id": "ae116934834c481ab272c69c492400d3", @@ -86,19 +85,19 @@ "KeepListStructure": false } ], + "FunctionSignature": "FFITarget.WrapperObject.ID", "Replication": "Auto", "Description": "WrapperObject.ID: int" }, { "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "5f27752013aa4833aa82b17a822e6d8c", "NodeType": "FunctionNode", - "FunctionSignature": "FFITarget.WrapperObject.WrapperObject@int", - "Id": "c69c7becd54b4eadaea8a3f45bea9ab2", "Inputs": [ { - "Id": "4736f3ce1714480da3ba0a2b51493b55", - "Name": "x", - "Description": "int", + "Id": "71f705e66b4a4b34bf51d23f4e56a124", + "Name": "wrapperObject", + "Description": "FFITarget.WrapperObject", "UsingDefaultValue": false, "Level": 2, "UseLevels": false, @@ -107,28 +106,28 @@ ], "Outputs": [ { - "Id": "fc6fe66d178642f5aac68f45314f7956", - "Name": "WrapperObject", - "Description": "WrapperObject", + "Id": "1210e799ba384e5ab9a2c2da552da7b0", + "Name": "int", + "Description": "int", "UsingDefaultValue": false, "Level": 2, "UseLevels": false, "KeepListStructure": false } ], + "FunctionSignature": "FFITarget.WrapperObject.ID", "Replication": "Auto", - "Description": "WrapperObject.WrapperObject (x: int): WrapperObject" + "Description": "WrapperObject.ID: int" }, { "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "a45112b48ffb491fa91f724874d33a87", "NodeType": "FunctionNode", - "FunctionSignature": "FFITarget.WrapperObject.ID", - "Id": "5f27752013aa4833aa82b17a822e6d8c", "Inputs": [ { - "Id": "71f705e66b4a4b34bf51d23f4e56a124", - "Name": "wrapperObject", - "Description": "FFITarget.WrapperObject", + "Id": "b44386085a404103a77de302904906cd", + "Name": "x", + "Description": "int", "UsingDefaultValue": false, "Level": 2, "UseLevels": false, @@ -137,53 +136,87 @@ ], "Outputs": [ { - "Id": "1210e799ba384e5ab9a2c2da552da7b0", - "Name": "int", - "Description": "int", + "Id": "16a78a3863e6433bbaaaa9b7ab88edab", + "Name": "WrapperObject", + "Description": "WrapperObject", "UsingDefaultValue": false, "Level": 2, "UseLevels": false, "KeepListStructure": false } ], + "FunctionSignature": "FFITarget.WrapperObject.WrapperObject@int", "Replication": "Auto", - "Description": "WrapperObject.ID: int" + "Description": "WrapperObject.WrapperObject (x: int): WrapperObject" } ], "Connectors": [ - { - "Start": "cd10e88b930443aab9d92d3c7590614c", - "End": "ae116934834c481ab272c69c492400d3", - "Id": "47a80448ed3645e4aeb321df46b81067" - }, { "Start": "3696729e5bf748f1a33cd5a81e89ae65", "End": "7b03c2a4ea60468c8c2ae9e29e0b839b", - "Id": "02041154dcf24660b748d1009b23364b" + "Id": "02041154dcf24660b748d1009b23364b", + "IsHidden": "False" }, { "Start": "3696729e5bf748f1a33cd5a81e89ae65", - "End": "4736f3ce1714480da3ba0a2b51493b55", - "Id": "9a6001c7db064ed89c491ae78014c62f" + "End": "b44386085a404103a77de302904906cd", + "Id": "3c17b211e32041a7ad4687ae2669cb8a", + "IsHidden": "False" }, { - "Start": "fc6fe66d178642f5aac68f45314f7956", + "Start": "cd10e88b930443aab9d92d3c7590614c", + "End": "ae116934834c481ab272c69c492400d3", + "Id": "47a80448ed3645e4aeb321df46b81067", + "IsHidden": "False" + }, + { + "Start": "16a78a3863e6433bbaaaa9b7ab88edab", "End": "71f705e66b4a4b34bf51d23f4e56a124", - "Id": "1f934f6ef06645abb18cd63af96de422" + "Id": "8c711505708747ef9e279a681816d780", + "IsHidden": "False" } ], "Dependencies": [], + "NodeLibraryDependencies": [ + { + "Name": "FFITarget.dll", + "ReferenceType": "ZeroTouch", + "Nodes": [ + "1e83cc257de64a7ca702600b79aa194d", + "c760af7e042c4722a8343445bf41f549", + "5f27752013aa4833aa82b17a822e6d8c", + "a45112b48ffb491fa91f724874d33a87" + ] + } + ], + "Thumbnail": "", + "GraphDocumentationURL": null, + "ExtensionWorkspaceData": [ + { + "ExtensionGuid": "28992e1d-abb9-417f-8b1b-05e053bee670", + "Name": "Properties", + "Version": "3.0", + "Data": {} + } + ], + "Author": "None provided", + "Linting": { + "activeLinter": "None", + "activeLinterId": "7b75fb44-43fd-4631-a878-29f4d5d8399a", + "warningCount": 0, + "errorCount": 0 + }, "Bindings": [ { "NodeId": "1e83cc25-7de6-4a7c-a702-600b79aa194d", "Binding": { - "WrapperObject_InClassDecl-1_InFunctionScope-1_Instance0_1e83cc25-7de6-4a7c-a702-600b79aa194d": "PFNPQVAtRU5WOkVudmVsb3BlIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOlNPQVAtRU5DPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyIgeG1sbnM6U09BUC1FTlY9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW52ZWxvcGUvIiB4bWxuczpjbHI9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vc29hcC9lbmNvZGluZy9jbHIvMS4wIiBTT0FQLUVOVjplbmNvZGluZ1N0eWxlPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyI+DQo8U09BUC1FTlY6Qm9keT4NCjxhMTpDYWxsU2l0ZV94MDAyQl9UcmFjZVNlcmlhbGlzZXJIZWxwZXIgaWQ9InJlZi0xIiB4bWxuczphMT0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9jbHIvbnNhc3NlbS9Qcm90b0NvcmUvUHJvdG9Db3JlJTJDJTIwVmVyc2lvbiUzRDIuMi4wLjM5NjUlMkMlMjBDdWx0dXJlJTNEbmV1dHJhbCUyQyUyMFB1YmxpY0tleVRva2VuJTNEbnVsbCI+DQo8TnVtYmVyT2ZFbGVtZW50cz4xPC9OdW1iZXJPZkVsZW1lbnRzPg0KPEJhc2UtMF9IYXNEYXRhPnRydWU8L0Jhc2UtMF9IYXNEYXRhPg0KPEJhc2UtMF9EYXRhIGlkPSJyZWYtMyI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVNemsyTlNVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR5UEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wX0RhdGE+DQo8QmFzZS0wX0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMF9IYXNOZXN0ZWREYXRhPg0KPC9hMTpDYWxsU2l0ZV94MDAyQl9UcmFjZVNlcmlhbGlzZXJIZWxwZXI+DQo8L1NPQVAtRU5WOkJvZHk+DQo8L1NPQVAtRU5WOkVudmVsb3BlPg0K" + "WrapperObject_InClassDecl-1_InFunctionScope-1_Instance0_1e83cc25-7de6-4a7c-a702-600b79aa194d": "H4sIAAAAAAAACouuVkpJLElUslKqjlHydIlRsjKqVaqNBQD9KH22FwAAAA==" } }, { - "NodeId": "c69c7bec-d54b-4ead-aea8-a3f45bea9ab2", + "NodeId": "a45112b4-8ffb-491f-a91f-724874d33a87", "Binding": { - "WrapperObject_InClassDecl-1_InFunctionScope-1_Instance0_c69c7bec-d54b-4ead-aea8-a3f45bea9ab2": "PFNPQVAtRU5WOkVudmVsb3BlIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOlNPQVAtRU5DPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyIgeG1sbnM6U09BUC1FTlY9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW52ZWxvcGUvIiB4bWxuczpjbHI9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vc29hcC9lbmNvZGluZy9jbHIvMS4wIiBTT0FQLUVOVjplbmNvZGluZ1N0eWxlPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyI+DQo8U09BUC1FTlY6Qm9keT4NCjxhMTpDYWxsU2l0ZV94MDAyQl9UcmFjZVNlcmlhbGlzZXJIZWxwZXIgaWQ9InJlZi0xIiB4bWxuczphMT0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9jbHIvbnNhc3NlbS9Qcm90b0NvcmUvUHJvdG9Db3JlJTJDJTIwVmVyc2lvbiUzRDIuMi4wLjM5NjUlMkMlMjBDdWx0dXJlJTNEbmV1dHJhbCUyQyUyMFB1YmxpY0tleVRva2VuJTNEbnVsbCI+DQo8TnVtYmVyT2ZFbGVtZW50cz4xPC9OdW1iZXJPZkVsZW1lbnRzPg0KPEJhc2UtMF9IYXNEYXRhPnRydWU8L0Jhc2UtMF9IYXNEYXRhPg0KPEJhc2UtMF9EYXRhIGlkPSJyZWYtMyI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVNemsyTlNVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR6UEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wX0RhdGE+DQo8QmFzZS0wX0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMF9IYXNOZXN0ZWREYXRhPg0KPC9hMTpDYWxsU2l0ZV94MDAyQl9UcmFjZVNlcmlhbGlzZXJIZWxwZXI+DQo8L1NPQVAtRU5WOkJvZHk+DQo8L1NPQVAtRU5WOkVudmVsb3BlPg0K" + "WrapperObject_InClassDecl-1_InFunctionScope-1_Instance0_a45112b4-8ffb-491f-a91f-724874d33a87": "H4sIAAAAAAAACouuVkpJLElUslKqjlHydIlRsjKuVaqNBQBNAR2LFwAAAA==" } } ], @@ -192,12 +225,12 @@ "ScaleFactor": 1.0, "HasRunWithoutCrash": true, "IsVisibleInDynamoLibrary": true, - "Version": "2.2.0.3965", + "Version": "3.0.0.5795", "RunType": "Automatic", "RunPeriod": "1000" }, "Camera": { - "Name": "Background Preview", + "Name": "_Background Preview", "EyeX": -17.0, "EyeY": 24.0, "EyeZ": 50.0, @@ -208,61 +241,62 @@ "UpY": 1.0, "UpZ": 0.0 }, + "ConnectorPins": [], "NodeViews": [ { - "Id": "1e83cc257de64a7ca702600b79aa194d", + "Id": "4efdba9e975c492989a3e7b3013d127d", + "Name": "Code Block", "IsSetAsInput": false, "IsSetAsOutput": false, - "Name": "WrapperObject.WrapperObject", - "ShowGeometry": true, "Excluded": false, - "X": 744.0, - "Y": 413.5 + "ShowGeometry": true, + "X": 534.0, + "Y": 420.0 }, { - "Id": "4efdba9e975c492989a3e7b3013d127d", + "Id": "1e83cc257de64a7ca702600b79aa194d", + "Name": "WrapperObject.WrapperObject", "IsSetAsInput": false, "IsSetAsOutput": false, - "Name": "Code Block", - "ShowGeometry": true, "Excluded": false, - "X": 534.0, - "Y": 420.0 + "ShowGeometry": true, + "X": 744.0, + "Y": 413.5 }, { "Id": "c760af7e042c4722a8343445bf41f549", + "Name": "WrapperObject.ID", "IsSetAsInput": false, "IsSetAsOutput": false, - "Name": "WrapperObject.ID", - "ShowGeometry": true, "Excluded": false, - "X": 1022.0, - "Y": 439.5 + "ShowGeometry": true, + "X": 1214.2848664688427, + "Y": 375.4050445103858 }, { - "Id": "c69c7becd54b4eadaea8a3f45bea9ab2", + "Id": "5f27752013aa4833aa82b17a822e6d8c", + "Name": "WrapperObject.ID", "IsSetAsInput": false, "IsSetAsOutput": false, - "Name": "WrapperObject.WrapperObject", - "ShowGeometry": true, "Excluded": false, - "X": 766.0, - "Y": 577.5 + "ShowGeometry": true, + "X": 1184.1750741839762, + "Y": 573.4020771513353 }, { - "Id": "5f27752013aa4833aa82b17a822e6d8c", + "Id": "a45112b48ffb491fa91f724874d33a87", + "Name": "WrapperObject.WrapperObject", "IsSetAsInput": false, "IsSetAsOutput": false, - "Name": "WrapperObject.ID", - "ShowGeometry": true, "Excluded": false, - "X": 1091.0, - "Y": 564.5 + "ShowGeometry": true, + "X": 755.6483679525222, + "Y": 633.3976261127596 } ], "Annotations": [], - "X": 0.0, - "Y": 0.0, - "Zoom": 1.0 + "X": -328.63375, + "Y": -181.6375, + "Zoom": 0.8425 } } \ No newline at end of file diff --git a/test/core/callsite/element_binding_customNodes_modified.dyn b/test/core/callsite/element_binding_customNodes_modified.dyn index 5252c137cde..bdafbc2f92f 100644 --- a/test/core/callsite/element_binding_customNodes_modified.dyn +++ b/test/core/callsite/element_binding_customNodes_modified.dyn @@ -2,58 +2,17 @@ "Uuid": "ce4b7a61-2ef7-46ba-965c-e5a69dc6d6a1", "IsCustomNode": false, "Description": null, - "Name": "element_binding_customNodes", + "Name": "element_binding_customNodes_modified", "ElementResolver": { "ResolutionMap": {} }, "Inputs": [], "Outputs": [], "Nodes": [ - { - "ConcreteType": "Dynamo.Graph.Nodes.CustomNodes.Function, DynamoCore", - "FunctionSignature": "9c65f412-0637-4601-ba90-9de2f539224f", - "FunctionType": "Graph", - "NodeType": "FunctionNode", - "Id": "a3cceaa601de4485beb72eea39a46f65", - "Inputs": [ - { - "Id": "a83f8affbd294adab130d8f0af11f68d", - "Name": "someInput", - "Description": "var[]..[]", - "UsingDefaultValue": false, - "Level": 2, - "UseLevels": false, - "KeepListStructure": false - } - ], - "Outputs": [ - { - "Id": "d959a76782cb472bbe5dae220136d396", - "Name": "out2", - "Description": "return value", - "UsingDefaultValue": false, - "Level": 2, - "UseLevels": false, - "KeepListStructure": false - }, - { - "Id": "28031b992d1f4923959eb2b0562a545d", - "Name": "out1", - "Description": "return value", - "UsingDefaultValue": false, - "Level": 2, - "UseLevels": false, - "KeepListStructure": false - } - ], - "Replication": "Auto", - "Description": "testing nested element binding" - }, { "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", - "NodeType": "FunctionNode", - "FunctionSignature": "FFITarget.WrapperObject.ID", "Id": "da39dbe5f59649b18c2fb6ca54acba7b", + "NodeType": "FunctionNode", "Inputs": [ { "Id": "57657d3625f54b7c8fc3b6e5612618a7", @@ -76,14 +35,14 @@ "KeepListStructure": false } ], + "FunctionSignature": "FFITarget.WrapperObject.ID", "Replication": "Auto", "Description": "WrapperObject.ID: int" }, { "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", - "NodeType": "FunctionNode", - "FunctionSignature": "FFITarget.WrapperObject.ID", "Id": "2366239164a9441a8c4dcd981d9cf542", + "NodeType": "FunctionNode", "Inputs": [ { "Id": "7957f66d0e56481e9c7673de24179110", @@ -106,14 +65,14 @@ "KeepListStructure": false } ], + "FunctionSignature": "FFITarget.WrapperObject.ID", "Replication": "Auto", "Description": "WrapperObject.ID: int" }, { "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", - "NodeType": "CodeBlockNode", - "Code": "100;", "Id": "247d1b8751c64f8b8ac88e37cad98dff", + "NodeType": "CodeBlockNode", "Inputs": [], "Outputs": [ { @@ -127,13 +86,13 @@ } ], "Replication": "Disabled", - "Description": "Allows for DesignScript code to be authored directly" + "Description": "Allows for DesignScript code to be authored directly", + "Code": "100;" }, { "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", - "NodeType": "FunctionNode", - "FunctionSignature": "FFITarget.WrapperObject.ID", "Id": "342f96575f8942c890867d88495fb0db", + "NodeType": "FunctionNode", "Inputs": [ { "Id": "7178d1186aee4a20b03be1e20ad0da64", @@ -156,14 +115,14 @@ "KeepListStructure": false } ], + "FunctionSignature": "FFITarget.WrapperObject.ID", "Replication": "Auto", "Description": "WrapperObject.ID: int" }, { "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", - "NodeType": "FunctionNode", - "FunctionSignature": "FFITarget.WrapperObject.WrapperObject@int", "Id": "e464dfe1dfcf43698eb5e8efc11d1aae", + "NodeType": "FunctionNode", "Inputs": [ { "Id": "165c688d1cdf43eb863f95e12721700c", @@ -186,52 +145,134 @@ "KeepListStructure": false } ], + "FunctionSignature": "FFITarget.WrapperObject.WrapperObject@int", "Replication": "Auto", "Description": "WrapperObject.WrapperObject (x: int): WrapperObject" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CustomNodes.Function, DynamoCore", + "FunctionSignature": "9c65f412-0637-4601-ba90-9de2f539224f", + "FunctionType": "Graph", + "Id": "2859725c7605428dbda5c680d26ac2cd", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "50aff5360d4c4ffb94359c048eddfd30", + "Name": "someInput", + "Description": "var[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "af85169d925546488158b02dd9cbf1bd", + "Name": "out2", + "Description": "return value", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "eee0cb3c6b334f2ca18c0ce2769272a6", + "Name": "out1", + "Description": "return value", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Auto", + "Description": "testing nested element binding" } ], "Connectors": [ - { - "Start": "d959a76782cb472bbe5dae220136d396", - "End": "57657d3625f54b7c8fc3b6e5612618a7", - "Id": "3490d7fe3a8143f8b0da79608cec2db7" - }, - { - "Start": "28031b992d1f4923959eb2b0562a545d", - "End": "7957f66d0e56481e9c7673de24179110", - "Id": "fead1997c72544b79c6085f0047faf4c" - }, { "Start": "12a69844634441d08df8ff2d1b3b0c42", "End": "165c688d1cdf43eb863f95e12721700c", - "Id": "5ca50e2c395e4304b14c86c45480de32" + "Id": "5ca50e2c395e4304b14c86c45480de32", + "IsHidden": "False" }, { "Start": "b06f4f43fa7749b5856af632006d7806", - "End": "a83f8affbd294adab130d8f0af11f68d", - "Id": "79b1c4ec60014662896beb5cd6f9e219" + "End": "50aff5360d4c4ffb94359c048eddfd30", + "Id": "3f153bf97f1a478898cc16bf127379bc", + "IsHidden": "False" }, { "Start": "94b68073cf42449abbd5ecb25fb6fcbc", "End": "7178d1186aee4a20b03be1e20ad0da64", - "Id": "fe46ec09fbe24401934b70dec0521e7a" + "Id": "fe46ec09fbe24401934b70dec0521e7a", + "IsHidden": "False" + }, + { + "Start": "af85169d925546488158b02dd9cbf1bd", + "End": "7957f66d0e56481e9c7673de24179110", + "Id": "91de8c6a49dd45b5bec61676d0225866", + "IsHidden": "False" + }, + { + "Start": "eee0cb3c6b334f2ca18c0ce2769272a6", + "End": "57657d3625f54b7c8fc3b6e5612618a7", + "Id": "a37b726484a84bdd8c3461a297197746", + "IsHidden": "False" } ], "Dependencies": [ "9c65f412-0637-4601-ba90-9de2f539224f" ], + "NodeLibraryDependencies": [ + { + "Name": "FFITarget.dll", + "ReferenceType": "ZeroTouch", + "Nodes": [ + "da39dbe5f59649b18c2fb6ca54acba7b", + "2366239164a9441a8c4dcd981d9cf542", + "342f96575f8942c890867d88495fb0db", + "e464dfe1dfcf43698eb5e8efc11d1aae" + ] + }, + { + "Name": "element_binding_nested.dyf", + "ReferenceType": "DYFFile", + "Nodes": [ + "2859725c7605428dbda5c680d26ac2cd" + ] + } + ], + "Thumbnail": null, + "GraphDocumentationURL": null, + "ExtensionWorkspaceData": [ + { + "ExtensionGuid": "28992e1d-abb9-417f-8b1b-05e053bee670", + "Name": "Properties", + "Version": "3.0", + "Data": {} + } + ], + "Author": "None provided", + "Linting": { + "activeLinter": "None", + "activeLinterId": "7b75fb44-43fd-4631-a878-29f4d5d8399a", + "warningCount": 0, + "errorCount": 0 + }, "Bindings": [ { - "NodeId": "a3cceaa6-01de-4485-beb7-2eea39a46f65", + "NodeId": "e464dfe1-dfcf-4369-8eb5-e8efc11d1aae", "Binding": { - "__func_9c65f41206374601ba909de2f539224f_InClassDecl-1_InFunctionScope-1_Instance0_a3cceaa6-01de-4485-beb7-2eea39a46f65;WrapperObject_InClassDecl-1_InFunctionScope110_Instance0_54062f33-ce19-49a3-a373-5d4a253e26a5": "PFNPQVAtRU5WOkVudmVsb3BlIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOlNPQVAtRU5DPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyIgeG1sbnM6U09BUC1FTlY9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW52ZWxvcGUvIiB4bWxuczpjbHI9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vc29hcC9lbmNvZGluZy9jbHIvMS4wIiBTT0FQLUVOVjplbmNvZGluZ1N0eWxlPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyI+CjxTT0FQLUVOVjpCb2R5Pgo8YTE6Q2FsbFNpdGVfeDAwMkJfVHJhY2VTZXJpYWxpc2VySGVscGVyIGlkPSJyZWYtMSIgeG1sbnM6YTE9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vY2xyL25zYXNzZW0vUHJvdG9Db3JlL1Byb3RvQ29yZSUyQyUyMFZlcnNpb24lM0QyLjIuMC40NTE2JTJDJTIwQ3VsdHVyZSUzRG5ldXRyYWwlMkMlMjBQdWJsaWNLZXlUb2tlbiUzRG51bGwiPgo8TnVtYmVyT2ZFbGVtZW50cz4xPC9OdW1iZXJPZkVsZW1lbnRzPgo8QmFzZS0wX0hhc0RhdGE+dHJ1ZTwvQmFzZS0wX0hhc0RhdGE+CjxCYXNlLTBfRGF0YSBpZD0icmVmLTMiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrQ2p4VFQwRlFMVVZPVmpwQ2IyUjVQZ284WVRFNlNVUkliMnhrWlhJZ2FXUTlJbkpsWmkweElpQjRiV3h1Y3pwaE1UMGlhSFIwY0RvdkwzTmphR1Z0WVhNdWJXbGpjbTl6YjJaMExtTnZiUzlqYkhJdmJuTmhjM05sYlM5R1JrbFVZWEpuWlhRdlJrWkpWR0Z5WjJWMEpUSkRKVEl3Vm1WeWMybHZiaVV6UkRJdU1pNHdMalExTVRZbE1rTWxNakJEZFd4MGRYSmxKVE5FYm1WMWRISmhiQ1V5UXlVeU1GQjFZbXhwWTB0bGVWUnZhMlZ1SlRORWJuVnNiQ0krQ2p4cGJuUkpSRDR4TWpNME5UWTNPRGs1UEM5cGJuUkpSRDRLUEM5aE1UcEpSRWh2YkdSbGNqNEtQQzlUVDBGUUxVVk9WanBDYjJSNVBnbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZ289PC9CYXNlLTBfRGF0YT4KPEJhc2UtMF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTBfSGFzTmVzdGVkRGF0YT4KPC9hMTpDYWxsU2l0ZV94MDAyQl9UcmFjZVNlcmlhbGlzZXJIZWxwZXI+CjwvU09BUC1FTlY6Qm9keT4KPC9TT0FQLUVOVjpFbnZlbG9wZT4K", - "__func_9c65f41206374601ba909de2f539224f_InClassDecl-1_InFunctionScope-1_Instance0_a3cceaa6-01de-4485-beb7-2eea39a46f65;WrapperObject_InClassDecl-1_InFunctionScope110_Instance0_3f04f5f4-f54d-4071-af6f-7d5db4e7706e": "PFNPQVAtRU5WOkVudmVsb3BlIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOlNPQVAtRU5DPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyIgeG1sbnM6U09BUC1FTlY9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW52ZWxvcGUvIiB4bWxuczpjbHI9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vc29hcC9lbmNvZGluZy9jbHIvMS4wIiBTT0FQLUVOVjplbmNvZGluZ1N0eWxlPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyI+DQo8U09BUC1FTlY6Qm9keT4NCjxhMTpDYWxsU2l0ZV94MDAyQl9UcmFjZVNlcmlhbGlzZXJIZWxwZXIgaWQ9InJlZi0xIiB4bWxuczphMT0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9jbHIvbnNhc3NlbS9Qcm90b0NvcmUvUHJvdG9Db3JlJTJDJTIwVmVyc2lvbiUzRDIuMi4wLjQ1MTYlMkMlMjBDdWx0dXJlJTNEbmV1dHJhbCUyQyUyMFB1YmxpY0tleVRva2VuJTNEbnVsbCI+DQo8TnVtYmVyT2ZFbGVtZW50cz4xPC9OdW1iZXJPZkVsZW1lbnRzPg0KPEJhc2UtMF9IYXNEYXRhPnRydWU8L0Jhc2UtMF9IYXNEYXRhPg0KPEJhc2UtMF9EYXRhIGlkPSJyZWYtMyI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVORFV4TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR5UEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wX0RhdGE+DQo8QmFzZS0wX0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMF9IYXNOZXN0ZWREYXRhPg0KPC9hMTpDYWxsU2l0ZV94MDAyQl9UcmFjZVNlcmlhbGlzZXJIZWxwZXI+DQo8L1NPQVAtRU5WOkJvZHk+DQo8L1NPQVAtRU5WOkVudmVsb3BlPg0K" + "WrapperObject_InClassDecl-1_InFunctionScope-1_Instance0_e464dfe1-dfcf-4369-8eb5-e8efc11d1aae": "H4sIAAAAAAAACouuVkpJLElUslKqjlHydIlRsjKsVaqNBQAtUt3xFwAAAA==" } }, { - "NodeId": "e464dfe1-dfcf-4369-8eb5-e8efc11d1aae", + "NodeId": "2859725c-7605-428d-bda5-c680d26ac2cd", "Binding": { - "WrapperObject_InClassDecl-1_InFunctionScope-1_Instance0_e464dfe1-dfcf-4369-8eb5-e8efc11d1aae": "PFNPQVAtRU5WOkVudmVsb3BlIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOlNPQVAtRU5DPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyIgeG1sbnM6U09BUC1FTlY9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW52ZWxvcGUvIiB4bWxuczpjbHI9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vc29hcC9lbmNvZGluZy9jbHIvMS4wIiBTT0FQLUVOVjplbmNvZGluZ1N0eWxlPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyI+DQo8U09BUC1FTlY6Qm9keT4NCjxhMTpDYWxsU2l0ZV94MDAyQl9UcmFjZVNlcmlhbGlzZXJIZWxwZXIgaWQ9InJlZi0xIiB4bWxuczphMT0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9jbHIvbnNhc3NlbS9Qcm90b0NvcmUvUHJvdG9Db3JlJTJDJTIwVmVyc2lvbiUzRDIuMi4wLjQ1MTYlMkMlMjBDdWx0dXJlJTNEbmV1dHJhbCUyQyUyMFB1YmxpY0tleVRva2VuJTNEbnVsbCI+DQo8TnVtYmVyT2ZFbGVtZW50cz4xPC9OdW1iZXJPZkVsZW1lbnRzPg0KPEJhc2UtMF9IYXNEYXRhPnRydWU8L0Jhc2UtMF9IYXNEYXRhPg0KPEJhc2UtMF9EYXRhIGlkPSJyZWYtMyI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVORFV4TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR6UEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wX0RhdGE+DQo8QmFzZS0wX0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMF9IYXNOZXN0ZWREYXRhPg0KPC9hMTpDYWxsU2l0ZV94MDAyQl9UcmFjZVNlcmlhbGlzZXJIZWxwZXI+DQo8L1NPQVAtRU5WOkJvZHk+DQo8L1NPQVAtRU5WOkVudmVsb3BlPg0K" + "__func_9c65f41206374601ba909de2f539224f_InClassDecl-1_InFunctionScope-1_Instance0_2859725c-7605-428d-bda5-c680d26ac2cd;WrapperObject_InClassDecl-1_InFunctionScope1080_Instance0_54062f33-ce19-49a3-a373-5d4a253e26a5": "H4sIAAAAAAAACouuVkpJLElUslKqjlHydIlRsjKpVaqNBQBd3T05FwAAAA==", + "__func_9c65f41206374601ba909de2f539224f_InClassDecl-1_InFunctionScope-1_Instance0_2859725c-7605-428d-bda5-c680d26ac2cd;WrapperObject_InClassDecl-1_InFunctionScope1080_Instance0_3f04f5f4-f54d-4071-af6f-7d5db4e7706e": "H4sIAAAAAAAACouuVkpJLElUslKqjlHydIlRsjKtVaqNBQDt9F0EFwAAAA==" } } ], @@ -240,12 +281,12 @@ "ScaleFactor": 1.0, "HasRunWithoutCrash": true, "IsVisibleInDynamoLibrary": true, - "Version": "2.2.0.4516", + "Version": "3.0.0.5795", "RunType": "Manual", "RunPeriod": "1000" }, "Camera": { - "Name": "Background Preview", + "Name": "_Background Preview", "EyeX": -17.0, "EyeY": 24.0, "EyeZ": 50.0, @@ -256,71 +297,72 @@ "UpY": 1.0, "UpZ": 0.0 }, + "ConnectorPins": [], "NodeViews": [ { - "ShowGeometry": true, - "Name": "element_binding_nested", - "Id": "a3cceaa601de4485beb72eea39a46f65", + "Id": "da39dbe5f59649b18c2fb6ca54acba7b", + "Name": "WrapperObject.ID", "IsSetAsInput": false, "IsSetAsOutput": false, "Excluded": false, - "X": 393.5, - "Y": 262.25 + "ShowGeometry": true, + "X": 818.9524324462673, + "Y": 542.299189611154 }, { - "ShowGeometry": true, + "Id": "2366239164a9441a8c4dcd981d9cf542", "Name": "WrapperObject.ID", - "Id": "da39dbe5f59649b18c2fb6ca54acba7b", "IsSetAsInput": false, "IsSetAsOutput": false, "Excluded": false, - "X": 416.5, - "Y": 429.25 + "ShowGeometry": true, + "X": 833.9043242067276, + "Y": 327.3835142018005 }, { - "ShowGeometry": true, - "Name": "WrapperObject.ID", - "Id": "2366239164a9441a8c4dcd981d9cf542", + "Id": "247d1b8751c64f8b8ac88e37cad98dff", + "Name": "Code Block", "IsSetAsInput": false, "IsSetAsOutput": false, "Excluded": false, - "X": 414.5, - "Y": 561.25 + "ShowGeometry": true, + "X": -121.5, + "Y": 168.0 }, { - "ShowGeometry": true, - "Name": "Code Block", - "Id": "247d1b8751c64f8b8ac88e37cad98dff", + "Id": "342f96575f8942c890867d88495fb0db", + "Name": "WrapperObject.ID", "IsSetAsInput": false, "IsSetAsOutput": false, "Excluded": false, - "X": 64.0, - "Y": 283.0 + "ShowGeometry": true, + "X": 44.78324257916728, + "Y": 518.3700002559459 }, { - "ShowGeometry": true, - "Name": "WrapperObject.ID", - "Id": "342f96575f8942c890867d88495fb0db", + "Id": "e464dfe1dfcf43698eb5e8efc11d1aae", + "Name": "WrapperObject.WrapperObject", "IsSetAsInput": false, "IsSetAsOutput": false, "Excluded": false, - "X": -53.5, - "Y": 556.25 + "ShowGeometry": true, + "X": -231.79259668120545, + "Y": 355.51677660173243 }, { - "ShowGeometry": true, - "Name": "WrapperObject.WrapperObject", - "Id": "e464dfe1dfcf43698eb5e8efc11d1aae", + "Id": "2859725c7605428dbda5c680d26ac2cd", + "Name": "element_binding_nested", "IsSetAsInput": false, "IsSetAsOutput": false, "Excluded": false, - "X": -52.5, - "Y": 462.25 + "ShowGeometry": true, + "X": 421.4892268361101, + "Y": 441.0868590433491 } ], "Annotations": [], - "X": 62.0, - "Y": -212.0, - "Zoom": 1.0 + "X": 123.89677836842668, + "Y": -86.47500323723506, + "Zoom": 0.784369328044827 } -} \ No newline at end of file +} diff --git a/test/core/callsite/element_binding_customNodes_modified_multiple.dyn b/test/core/callsite/element_binding_customNodes_modified_multiple.dyn index b68bf9aa877..8d23488392d 100644 --- a/test/core/callsite/element_binding_customNodes_modified_multiple.dyn +++ b/test/core/callsite/element_binding_customNodes_modified_multiple.dyn @@ -9,51 +9,10 @@ "Inputs": [], "Outputs": [], "Nodes": [ - { - "ConcreteType": "Dynamo.Graph.Nodes.CustomNodes.Function, DynamoCore", - "FunctionSignature": "9c65f412-0637-4601-ba90-9de2f539224f", - "FunctionType": "Graph", - "NodeType": "FunctionNode", - "Id": "a3cceaa601de4485beb72eea39a46f65", - "Inputs": [ - { - "Id": "a83f8affbd294adab130d8f0af11f68d", - "Name": "someInput", - "Description": "var[]..[]", - "UsingDefaultValue": false, - "Level": 2, - "UseLevels": false, - "KeepListStructure": false - } - ], - "Outputs": [ - { - "Id": "d959a76782cb472bbe5dae220136d396", - "Name": "out2", - "Description": "return value", - "UsingDefaultValue": false, - "Level": 2, - "UseLevels": false, - "KeepListStructure": false - }, - { - "Id": "28031b992d1f4923959eb2b0562a545d", - "Name": "out1", - "Description": "return value", - "UsingDefaultValue": false, - "Level": 2, - "UseLevels": false, - "KeepListStructure": false - } - ], - "Replication": "Auto", - "Description": "testing nested element binding" - }, { "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", - "NodeType": "FunctionNode", - "FunctionSignature": "FFITarget.WrapperObject.ID", "Id": "da39dbe5f59649b18c2fb6ca54acba7b", + "NodeType": "FunctionNode", "Inputs": [ { "Id": "57657d3625f54b7c8fc3b6e5612618a7", @@ -76,14 +35,14 @@ "KeepListStructure": false } ], + "FunctionSignature": "FFITarget.WrapperObject.ID", "Replication": "Auto", "Description": "WrapperObject.ID: int" }, { "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", - "NodeType": "FunctionNode", - "FunctionSignature": "FFITarget.WrapperObject.ID", "Id": "2366239164a9441a8c4dcd981d9cf542", + "NodeType": "FunctionNode", "Inputs": [ { "Id": "7957f66d0e56481e9c7673de24179110", @@ -106,14 +65,14 @@ "KeepListStructure": false } ], + "FunctionSignature": "FFITarget.WrapperObject.ID", "Replication": "Auto", "Description": "WrapperObject.ID: int" }, { "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", - "NodeType": "CodeBlockNode", - "Code": "100;", "Id": "247d1b8751c64f8b8ac88e37cad98dff", + "NodeType": "CodeBlockNode", "Inputs": [], "Outputs": [ { @@ -127,13 +86,13 @@ } ], "Replication": "Disabled", - "Description": "Allows for DesignScript code to be authored directly" + "Description": "Allows for DesignScript code to be authored directly", + "Code": "100;" }, { "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", - "NodeType": "FunctionNode", - "FunctionSignature": "FFITarget.WrapperObject.ID", "Id": "342f96575f8942c890867d88495fb0db", + "NodeType": "FunctionNode", "Inputs": [ { "Id": "7178d1186aee4a20b03be1e20ad0da64", @@ -156,14 +115,14 @@ "KeepListStructure": false } ], + "FunctionSignature": "FFITarget.WrapperObject.ID", "Replication": "Auto", "Description": "WrapperObject.ID: int" }, { "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", - "NodeType": "FunctionNode", - "FunctionSignature": "FFITarget.WrapperObject.WrapperObject@int", "Id": "e464dfe1dfcf43698eb5e8efc11d1aae", + "NodeType": "FunctionNode", "Inputs": [ { "Id": "165c688d1cdf43eb863f95e12721700c", @@ -186,20 +145,19 @@ "KeepListStructure": false } ], + "FunctionSignature": "FFITarget.WrapperObject.WrapperObject@int", "Replication": "Auto", "Description": "WrapperObject.WrapperObject (x: int): WrapperObject" }, { - "ConcreteType": "Dynamo.Graph.Nodes.CustomNodes.Function, DynamoCore", - "FunctionSignature": "9c65f412-0637-4601-ba90-9de2f539224f", - "FunctionType": "Graph", + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "08448232ee094aad8280e9a99ed44f46", "NodeType": "FunctionNode", - "Id": "7d799d548e0344aab8debfb468b50166", "Inputs": [ { - "Id": "0a321e2157fe45268bcf46eed08e8cd3", - "Name": "someInput", - "Description": "var[]..[]", + "Id": "8adfa0547e0d4784b59d352c45a9b4b9", + "Name": "wrapperObject", + "Description": "FFITarget.WrapperObject", "UsingDefaultValue": false, "Level": 2, "UseLevels": false, @@ -208,35 +166,26 @@ ], "Outputs": [ { - "Id": "2aa9090e1843495295c4ce3cddd9459c", - "Name": "out2", - "Description": "return value", - "UsingDefaultValue": false, - "Level": 2, - "UseLevels": false, - "KeepListStructure": false - }, - { - "Id": "af8d68ecd22b45a1afe7c12190cf3300", - "Name": "out1", - "Description": "return value", + "Id": "c7ee12320e614211bf681715342f894a", + "Name": "int", + "Description": "int", "UsingDefaultValue": false, "Level": 2, "UseLevels": false, "KeepListStructure": false } ], + "FunctionSignature": "FFITarget.WrapperObject.ID", "Replication": "Auto", - "Description": "testing nested element binding" + "Description": "WrapperObject.ID: int" }, { "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "8cfce012280342f3bd688520d68a7f66", "NodeType": "FunctionNode", - "FunctionSignature": "FFITarget.WrapperObject.ID", - "Id": "08448232ee094aad8280e9a99ed44f46", "Inputs": [ { - "Id": "8adfa0547e0d4784b59d352c45a9b4b9", + "Id": "d5cfa698e209433a8c4efd66b711d98c", "Name": "wrapperObject", "Description": "FFITarget.WrapperObject", "UsingDefaultValue": false, @@ -247,7 +196,7 @@ ], "Outputs": [ { - "Id": "c7ee12320e614211bf681715342f894a", + "Id": "bad1c4ea3f9242f2b2a7c9da5c5d6a66", "Name": "int", "Description": "int", "UsingDefaultValue": false, @@ -256,19 +205,21 @@ "KeepListStructure": false } ], + "FunctionSignature": "FFITarget.WrapperObject.ID", "Replication": "Auto", "Description": "WrapperObject.ID: int" }, { - "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "ConcreteType": "Dynamo.Graph.Nodes.CustomNodes.Function, DynamoCore", + "FunctionSignature": "9c65f412-0637-4601-ba90-9de2f539224f", + "FunctionType": "Graph", + "Id": "a30bd8fce103453f8796e215acb19c2c", "NodeType": "FunctionNode", - "FunctionSignature": "FFITarget.WrapperObject.ID", - "Id": "8cfce012280342f3bd688520d68a7f66", "Inputs": [ { - "Id": "d5cfa698e209433a8c4efd66b711d98c", - "Name": "wrapperObject", - "Description": "FFITarget.WrapperObject", + "Id": "5ea4920f059c44978c725b39ec63ae88", + "Name": "someInput", + "Description": "var[]..[]", "UsingDefaultValue": false, "Level": 2, "UseLevels": false, @@ -277,9 +228,18 @@ ], "Outputs": [ { - "Id": "bad1c4ea3f9242f2b2a7c9da5c5d6a66", - "Name": "int", - "Description": "int", + "Id": "71310b84e6d940f09aebca55ef79cbac", + "Name": "out2", + "Description": "return value", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "b2ea1dbd522446a2ad9f46ac069bba56", + "Name": "out1", + "Description": "return value", "UsingDefaultValue": false, "Level": 2, "UseLevels": false, @@ -287,73 +247,160 @@ } ], "Replication": "Auto", - "Description": "WrapperObject.ID: int" + "Description": "testing nested element binding" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CustomNodes.Function, DynamoCore", + "FunctionSignature": "9c65f412-0637-4601-ba90-9de2f539224f", + "FunctionType": "Graph", + "Id": "949afd28057040b09d91f18eb64697d8", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "c234a20782ef4f798a96296a1001ba77", + "Name": "someInput", + "Description": "var[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "eca206c78bed4822b006bbf206b3fd9c", + "Name": "out2", + "Description": "return value", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "85829d3e133b4d6b84d2c4bbf68b3d67", + "Name": "out1", + "Description": "return value", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Auto", + "Description": "testing nested element binding" } ], "Connectors": [ - { - "Start": "d959a76782cb472bbe5dae220136d396", - "End": "57657d3625f54b7c8fc3b6e5612618a7", - "Id": "3490d7fe3a8143f8b0da79608cec2db7" - }, - { - "Start": "28031b992d1f4923959eb2b0562a545d", - "End": "7957f66d0e56481e9c7673de24179110", - "Id": "fead1997c72544b79c6085f0047faf4c" - }, { "Start": "12a69844634441d08df8ff2d1b3b0c42", "End": "165c688d1cdf43eb863f95e12721700c", - "Id": "5ca50e2c395e4304b14c86c45480de32" + "Id": "5ca50e2c395e4304b14c86c45480de32", + "IsHidden": "False" }, { "Start": "b06f4f43fa7749b5856af632006d7806", - "End": "a83f8affbd294adab130d8f0af11f68d", - "Id": "79b1c4ec60014662896beb5cd6f9e219" + "End": "5ea4920f059c44978c725b39ec63ae88", + "Id": "e7a072544b8f4ccab4310d1b0f113a6e", + "IsHidden": "False" }, { "Start": "b06f4f43fa7749b5856af632006d7806", - "End": "0a321e2157fe45268bcf46eed08e8cd3", - "Id": "eeeff16f2f3f4eb583e82b66ef370777" + "End": "c234a20782ef4f798a96296a1001ba77", + "Id": "505d9248c00e4ccdbea2e58af50c682d", + "IsHidden": "False" }, { "Start": "94b68073cf42449abbd5ecb25fb6fcbc", "End": "7178d1186aee4a20b03be1e20ad0da64", - "Id": "fe46ec09fbe24401934b70dec0521e7a" + "Id": "fe46ec09fbe24401934b70dec0521e7a", + "IsHidden": "False" }, { - "Start": "2aa9090e1843495295c4ce3cddd9459c", + "Start": "71310b84e6d940f09aebca55ef79cbac", + "End": "57657d3625f54b7c8fc3b6e5612618a7", + "Id": "19a407fada9446bfb059e142506b7102", + "IsHidden": "False" + }, + { + "Start": "b2ea1dbd522446a2ad9f46ac069bba56", + "End": "7957f66d0e56481e9c7673de24179110", + "Id": "22c59f7fd76d4033a7ddfce28a56de3c", + "IsHidden": "False" + }, + { + "Start": "eca206c78bed4822b006bbf206b3fd9c", "End": "d5cfa698e209433a8c4efd66b711d98c", - "Id": "bf0d54c88f41487e984f4ec706685b2c" + "Id": "f0a48535e6b247bba7ce1132ac4e874b", + "IsHidden": "False" }, { - "Start": "af8d68ecd22b45a1afe7c12190cf3300", + "Start": "85829d3e133b4d6b84d2c4bbf68b3d67", "End": "8adfa0547e0d4784b59d352c45a9b4b9", - "Id": "b2e0d33b549f4ad2a8f432ae785116c0" + "Id": "d58b3311fb814f00ad0c62252f70bf6c", + "IsHidden": "False" } ], "Dependencies": [ "9c65f412-0637-4601-ba90-9de2f539224f" ], + "NodeLibraryDependencies": [ + { + "Name": "FFITarget.dll", + "ReferenceType": "ZeroTouch", + "Nodes": [ + "da39dbe5f59649b18c2fb6ca54acba7b", + "2366239164a9441a8c4dcd981d9cf542", + "342f96575f8942c890867d88495fb0db", + "e464dfe1dfcf43698eb5e8efc11d1aae", + "08448232ee094aad8280e9a99ed44f46", + "8cfce012280342f3bd688520d68a7f66" + ] + }, + { + "Name": "element_binding_nested.dyf", + "ReferenceType": "DYFFile", + "Nodes": [ + "a30bd8fce103453f8796e215acb19c2c", + "949afd28057040b09d91f18eb64697d8" + ] + } + ], + "Thumbnail": null, + "GraphDocumentationURL": null, + "ExtensionWorkspaceData": [ + { + "ExtensionGuid": "28992e1d-abb9-417f-8b1b-05e053bee670", + "Name": "Properties", + "Version": "3.0", + "Data": {} + } + ], + "Author": "None provided", + "Linting": { + "activeLinter": "None", + "activeLinterId": "7b75fb44-43fd-4631-a878-29f4d5d8399a", + "warningCount": 0, + "errorCount": 0 + }, "Bindings": [ { - "NodeId": "a3cceaa6-01de-4485-beb7-2eea39a46f65", + "NodeId": "e464dfe1-dfcf-4369-8eb5-e8efc11d1aae", "Binding": { - "__func_9c65f41206374601ba909de2f539224f_InClassDecl-1_InFunctionScope-1_Instance0_a3cceaa6-01de-4485-beb7-2eea39a46f65;WrapperObject_InClassDecl-1_InFunctionScope1000_Instance0_54062f33-ce19-49a3-a373-5d4a253e26a5": "PFNPQVAtRU5WOkVudmVsb3BlIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOlNPQVAtRU5DPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyIgeG1sbnM6U09BUC1FTlY9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW52ZWxvcGUvIiB4bWxuczpjbHI9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vc29hcC9lbmNvZGluZy9jbHIvMS4wIiBTT0FQLUVOVjplbmNvZGluZ1N0eWxlPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyI+CjxTT0FQLUVOVjpCb2R5Pgo8YTE6Q2FsbFNpdGVfeDAwMkJfVHJhY2VTZXJpYWxpc2VySGVscGVyIGlkPSJyZWYtMSIgeG1sbnM6YTE9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vY2xyL25zYXNzZW0vUHJvdG9Db3JlL1Byb3RvQ29yZSUyQyUyMFZlcnNpb24lM0QyLjIuMC40NTY1JTJDJTIwQ3VsdHVyZSUzRG5ldXRyYWwlMkMlMjBQdWJsaWNLZXlUb2tlbiUzRG51bGwiPgo8TnVtYmVyT2ZFbGVtZW50cz4xPC9OdW1iZXJPZkVsZW1lbnRzPgo8QmFzZS0wX0hhc0RhdGE+dHJ1ZTwvQmFzZS0wX0hhc0RhdGE+CjxCYXNlLTBfRGF0YSBpZD0icmVmLTMiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrQ2p4VFQwRlFMVVZPVmpwQ2IyUjVQZ284WVRFNlNVUkliMnhrWlhJZ2FXUTlJbkpsWmkweElpQjRiV3h1Y3pwaE1UMGlhSFIwY0RvdkwzTmphR1Z0WVhNdWJXbGpjbTl6YjJaMExtTnZiUzlqYkhJdmJuTmhjM05sYlM5R1JrbFVZWEpuWlhRdlJrWkpWR0Z5WjJWMEpUSkRKVEl3Vm1WeWMybHZiaVV6UkRJdU1pNHdMalExTVRZbE1rTWxNakJEZFd4MGRYSmxKVE5FYm1WMWRISmhiQ1V5UXlVeU1GQjFZbXhwWTB0bGVWUnZhMlZ1SlRORWJuVnNiQ0krQ2p4cGJuUkpSRDR4TVRFeE1URThMMmx1ZEVsRVBnbzhMMkV4T2tsRVNHOXNaR1Z5UGdvOEwxTlBRVkF0UlU1V09rSnZaSGsrQ2p3dlUwOUJVQzFGVGxZNlJXNTJaV3h2Y0dVKzwvQmFzZS0wX0RhdGE+CjxCYXNlLTBfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wX0hhc05lc3RlZERhdGE+CjwvYTE6Q2FsbFNpdGVfeDAwMkJfVHJhY2VTZXJpYWxpc2VySGVscGVyPgo8L1NPQVAtRU5WOkJvZHk+CjwvU09BUC1FTlY6RW52ZWxvcGU+Cg==", - "__func_9c65f41206374601ba909de2f539224f_InClassDecl-1_InFunctionScope-1_Instance0_a3cceaa6-01de-4485-beb7-2eea39a46f65;WrapperObject_InClassDecl-1_InFunctionScope1000_Instance0_3f04f5f4-f54d-4071-af6f-7d5db4e7706e": "PFNPQVAtRU5WOkVudmVsb3BlIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOlNPQVAtRU5DPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyIgeG1sbnM6U09BUC1FTlY9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW52ZWxvcGUvIiB4bWxuczpjbHI9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vc29hcC9lbmNvZGluZy9jbHIvMS4wIiBTT0FQLUVOVjplbmNvZGluZ1N0eWxlPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyI+CjxTT0FQLUVOVjpCb2R5Pgo8YTE6Q2FsbFNpdGVfeDAwMkJfVHJhY2VTZXJpYWxpc2VySGVscGVyIGlkPSJyZWYtMSIgeG1sbnM6YTE9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vY2xyL25zYXNzZW0vUHJvdG9Db3JlL1Byb3RvQ29yZSUyQyUyMFZlcnNpb24lM0QyLjIuMC40NTY1JTJDJTIwQ3VsdHVyZSUzRG5ldXRyYWwlMkMlMjBQdWJsaWNLZXlUb2tlbiUzRG51bGwiPgo8TnVtYmVyT2ZFbGVtZW50cz4xPC9OdW1iZXJPZkVsZW1lbnRzPgo8QmFzZS0wX0hhc0RhdGE+dHJ1ZTwvQmFzZS0wX0hhc0RhdGE+CjxCYXNlLTBfRGF0YSBpZD0icmVmLTMiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrQ2p4VFQwRlFMVVZPVmpwQ2IyUjVQZ284WVRFNlNVUkliMnhrWlhJZ2FXUTlJbkpsWmkweElpQjRiV3h1Y3pwaE1UMGlhSFIwY0RvdkwzTmphR1Z0WVhNdWJXbGpjbTl6YjJaMExtTnZiUzlqYkhJdmJuTmhjM05sYlM5R1JrbFVZWEpuWlhRdlJrWkpWR0Z5WjJWMEpUSkRKVEl3Vm1WeWMybHZiaVV6UkRJdU1pNHdMalExTVRZbE1rTWxNakJEZFd4MGRYSmxKVE5FYm1WMWRISmhiQ1V5UXlVeU1GQjFZbXhwWTB0bGVWUnZhMlZ1SlRORWJuVnNiQ0krQ2p4cGJuUkpSRDR5TWpJeU1qSThMMmx1ZEVsRVBnbzhMMkV4T2tsRVNHOXNaR1Z5UGdvOEwxTlBRVkF0UlU1V09rSnZaSGsrQ2p3dlUwOUJVQzFGVGxZNlJXNTJaV3h2Y0dVKzwvQmFzZS0wX0RhdGE+CjxCYXNlLTBfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wX0hhc05lc3RlZERhdGE+CjwvYTE6Q2FsbFNpdGVfeDAwMkJfVHJhY2VTZXJpYWxpc2VySGVscGVyPgo8L1NPQVAtRU5WOkJvZHk+CjwvU09BUC1FTlY6RW52ZWxvcGU+Cg==" + "WrapperObject_InClassDecl-1_InFunctionScope-1_Instance0_e464dfe1-dfcf-4369-8eb5-e8efc11d1aae": "H4sIAAAAAAAACouuVkpJLElUslKqjlHydIlRsjKsVaqNBQAtUt3xFwAAAA==" } }, { - "NodeId": "e464dfe1-dfcf-4369-8eb5-e8efc11d1aae", + "NodeId": "a30bd8fc-e103-453f-8796-e215acb19c2c", "Binding": { - "WrapperObject_InClassDecl-1_InFunctionScope-1_Instance0_e464dfe1-dfcf-4369-8eb5-e8efc11d1aae": "PFNPQVAtRU5WOkVudmVsb3BlIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOlNPQVAtRU5DPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyIgeG1sbnM6U09BUC1FTlY9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW52ZWxvcGUvIiB4bWxuczpjbHI9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vc29hcC9lbmNvZGluZy9jbHIvMS4wIiBTT0FQLUVOVjplbmNvZGluZ1N0eWxlPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyI+DQo8U09BUC1FTlY6Qm9keT4NCjxhMTpDYWxsU2l0ZV94MDAyQl9UcmFjZVNlcmlhbGlzZXJIZWxwZXIgaWQ9InJlZi0xIiB4bWxuczphMT0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9jbHIvbnNhc3NlbS9Qcm90b0NvcmUvUHJvdG9Db3JlJTJDJTIwVmVyc2lvbiUzRDIuMi4wLjQ1NjUlMkMlMjBDdWx0dXJlJTNEbmV1dHJhbCUyQyUyMFB1YmxpY0tleVRva2VuJTNEbnVsbCI+DQo8TnVtYmVyT2ZFbGVtZW50cz4xPC9OdW1iZXJPZkVsZW1lbnRzPg0KPEJhc2UtMF9IYXNEYXRhPnRydWU8L0Jhc2UtMF9IYXNEYXRhPg0KPEJhc2UtMF9EYXRhIGlkPSJyZWYtMyI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVORFV4TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR6UEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wX0RhdGE+DQo8QmFzZS0wX0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMF9IYXNOZXN0ZWREYXRhPg0KPC9hMTpDYWxsU2l0ZV94MDAyQl9UcmFjZVNlcmlhbGlzZXJIZWxwZXI+DQo8L1NPQVAtRU5WOkJvZHk+DQo8L1NPQVAtRU5WOkVudmVsb3BlPg0K" + "__func_9c65f41206374601ba909de2f539224f_InClassDecl-1_InFunctionScope-1_Instance0_a30bd8fc-e103-453f-8796-e215acb19c2c;WrapperObject_InClassDecl-1_InFunctionScope1080_Instance0_54062f33-ce19-49a3-a373-5d4a253e26a5": "H4sIAAAAAAAACouuVkpJLElUslKqjlHydIlRsjKrVaqNBQA9jv1DFwAAAA==", + "__func_9c65f41206374601ba909de2f539224f_InClassDecl-1_InFunctionScope-1_Instance0_a30bd8fc-e103-453f-8796-e215acb19c2c;WrapperObject_InClassDecl-1_InFunctionScope1080_Instance0_3f04f5f4-f54d-4071-af6f-7d5db4e7706e": "H4sIAAAAAAAACouuVkpJLElUslKqjlHydIlRsjKvVaqNBQCNp51+FwAAAA==" } }, { - "NodeId": "7d799d54-8e03-44aa-b8de-bfb468b50166", + "NodeId": "949afd28-0570-40b0-9d91-f18eb64697d8", "Binding": { - "__func_9c65f41206374601ba909de2f539224f_InClassDecl-1_InFunctionScope-1_Instance0_7d799d54-8e03-44aa-b8de-bfb468b50166;WrapperObject_InClassDecl-1_InFunctionScope1000_Instance0_54062f33-ce19-49a3-a373-5d4a253e26a5": "PFNPQVAtRU5WOkVudmVsb3BlIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOlNPQVAtRU5DPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyIgeG1sbnM6U09BUC1FTlY9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW52ZWxvcGUvIiB4bWxuczpjbHI9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vc29hcC9lbmNvZGluZy9jbHIvMS4wIiBTT0FQLUVOVjplbmNvZGluZ1N0eWxlPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyI+CjxTT0FQLUVOVjpCb2R5Pgo8YTE6Q2FsbFNpdGVfeDAwMkJfVHJhY2VTZXJpYWxpc2VySGVscGVyIGlkPSJyZWYtMSIgeG1sbnM6YTE9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vY2xyL25zYXNzZW0vUHJvdG9Db3JlL1Byb3RvQ29yZSUyQyUyMFZlcnNpb24lM0QyLjIuMC40NTY1JTJDJTIwQ3VsdHVyZSUzRG5ldXRyYWwlMkMlMjBQdWJsaWNLZXlUb2tlbiUzRG51bGwiPgo8TnVtYmVyT2ZFbGVtZW50cz4xPC9OdW1iZXJPZkVsZW1lbnRzPgo8QmFzZS0wX0hhc0RhdGE+dHJ1ZTwvQmFzZS0wX0hhc0RhdGE+CjxCYXNlLTBfRGF0YSBpZD0icmVmLTMiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrQ2p4VFQwRlFMVVZPVmpwQ2IyUjVQZ284WVRFNlNVUkliMnhrWlhJZ2FXUTlJbkpsWmkweElpQjRiV3h1Y3pwaE1UMGlhSFIwY0RvdkwzTmphR1Z0WVhNdWJXbGpjbTl6YjJaMExtTnZiUzlqYkhJdmJuTmhjM05sYlM5R1JrbFVZWEpuWlhRdlJrWkpWR0Z5WjJWMEpUSkRKVEl3Vm1WeWMybHZiaVV6UkRJdU1pNHdMalExTVRZbE1rTWxNakJEZFd4MGRYSmxKVE5FYm1WMWRISmhiQ1V5UXlVeU1GQjFZbXhwWTB0bGVWUnZhMlZ1SlRORWJuVnNiQ0krQ2p4cGJuUkpSRDR6TXpNek16TThMMmx1ZEVsRVBnbzhMMkV4T2tsRVNHOXNaR1Z5UGdvOEwxTlBRVkF0UlU1V09rSnZaSGsrQ2p3dlUwOUJVQzFGVGxZNlJXNTJaV3h2Y0dVKzwvQmFzZS0wX0RhdGE+CjxCYXNlLTBfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wX0hhc05lc3RlZERhdGE+CjwvYTE6Q2FsbFNpdGVfeDAwMkJfVHJhY2VTZXJpYWxpc2VySGVscGVyPgo8L1NPQVAtRU5WOkJvZHk+CjwvU09BUC1FTlY6RW52ZWxvcGU+Cg==", - "__func_9c65f41206374601ba909de2f539224f_InClassDecl-1_InFunctionScope-1_Instance0_7d799d54-8e03-44aa-b8de-bfb468b50166;WrapperObject_InClassDecl-1_InFunctionScope1000_Instance0_3f04f5f4-f54d-4071-af6f-7d5db4e7706e": "PFNPQVAtRU5WOkVudmVsb3BlIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOlNPQVAtRU5DPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyIgeG1sbnM6U09BUC1FTlY9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW52ZWxvcGUvIiB4bWxuczpjbHI9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vc29hcC9lbmNvZGluZy9jbHIvMS4wIiBTT0FQLUVOVjplbmNvZGluZ1N0eWxlPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyI+CjxTT0FQLUVOVjpCb2R5Pgo8YTE6Q2FsbFNpdGVfeDAwMkJfVHJhY2VTZXJpYWxpc2VySGVscGVyIGlkPSJyZWYtMSIgeG1sbnM6YTE9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vY2xyL25zYXNzZW0vUHJvdG9Db3JlL1Byb3RvQ29yZSUyQyUyMFZlcnNpb24lM0QyLjIuMC40NTY1JTJDJTIwQ3VsdHVyZSUzRG5ldXRyYWwlMkMlMjBQdWJsaWNLZXlUb2tlbiUzRG51bGwiPgo8TnVtYmVyT2ZFbGVtZW50cz4xPC9OdW1iZXJPZkVsZW1lbnRzPgo8QmFzZS0wX0hhc0RhdGE+dHJ1ZTwvQmFzZS0wX0hhc0RhdGE+CjxCYXNlLTBfRGF0YSBpZD0icmVmLTMiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrQ2p4VFQwRlFMVVZPVmpwQ2IyUjVQZ284WVRFNlNVUkliMnhrWlhJZ2FXUTlJbkpsWmkweElpQjRiV3h1Y3pwaE1UMGlhSFIwY0RvdkwzTmphR1Z0WVhNdWJXbGpjbTl6YjJaMExtTnZiUzlqYkhJdmJuTmhjM05sYlM5R1JrbFVZWEpuWlhRdlJrWkpWR0Z5WjJWMEpUSkRKVEl3Vm1WeWMybHZiaVV6UkRJdU1pNHdMalExTVRZbE1rTWxNakJEZFd4MGRYSmxKVE5FYm1WMWRISmhiQ1V5UXlVeU1GQjFZbXhwWTB0bGVWUnZhMlZ1SlRORWJuVnNiQ0krQ2p4cGJuUkpSRDQwTkRRME5EUThMMmx1ZEVsRVBnbzhMMkV4T2tsRVNHOXNaR1Z5UGdvOEwxTlBRVkF0UlU1V09rSnZaSGsrQ2p3dlUwOUJVQzFGVGxZNlJXNTJaV3h2Y0dVKzwvQmFzZS0wX0RhdGE+CjxCYXNlLTBfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wX0hhc05lc3RlZERhdGE+CjwvYTE6Q2FsbFNpdGVfeDAwMkJfVHJhY2VTZXJpYWxpc2VySGVscGVyPgo8L1NPQVAtRU5WOkJvZHk+CjwvU09BUC1FTlY6RW52ZWxvcGU+Cg==" + "__func_9c65f41206374601ba909de2f539224f_InClassDecl-1_InFunctionScope-1_Instance0_949afd28-0570-40b0-9d91-f18eb64697d8;WrapperObject_InClassDecl-1_InFunctionScope1080_Instance0_54062f33-ce19-49a3-a373-5d4a253e26a5": "H4sIAAAAAAAACouuVkpJLElUslKqjlHydIlRsjI0qFWqjQUAwI2fQxgAAAA=", + "__func_9c65f41206374601ba909de2f539224f_InClassDecl-1_InFunctionScope-1_Instance0_949afd28-0570-40b0-9d91-f18eb64697d8;WrapperObject_InClassDecl-1_InFunctionScope1080_Instance0_3f04f5f4-f54d-4071-af6f-7d5db4e7706e": "H4sIAAAAAAAACouuVkpJLElUslKqjlHydIlRsjI0rFWqjQUAcKT/fhgAAAA=" } } ], @@ -362,12 +409,12 @@ "ScaleFactor": 1.0, "HasRunWithoutCrash": true, "IsVisibleInDynamoLibrary": true, - "Version": "2.2.0.4565", + "Version": "3.0.0.5795", "RunType": "Manual", "RunPeriod": "1000" }, "Camera": { - "Name": "Background Preview", + "Name": "_Background Preview", "EyeX": -17.0, "EyeY": 24.0, "EyeZ": 50.0, @@ -378,101 +425,102 @@ "UpY": 1.0, "UpZ": 0.0 }, + "ConnectorPins": [], "NodeViews": [ { - "ShowGeometry": true, - "Name": "element_binding_nested", - "Id": "a3cceaa601de4485beb72eea39a46f65", - "IsSetAsInput": false, - "IsSetAsOutput": false, - "Excluded": false, - "X": 400.5, - "Y": 419.25 - }, - { - "ShowGeometry": true, - "Name": "WrapperObject.ID_111111", "Id": "da39dbe5f59649b18c2fb6ca54acba7b", + "Name": "WrapperObject.ID_6", "IsSetAsInput": false, "IsSetAsOutput": false, "Excluded": false, + "ShowGeometry": true, "X": 825.5, - "Y": 286.25 + "Y": 214.43991097922856 }, { - "ShowGeometry": true, - "Name": "WrapperObject.ID_222222", "Id": "2366239164a9441a8c4dcd981d9cf542", + "Name": "WrapperObject.ID_7", "IsSetAsInput": false, "IsSetAsOutput": false, "Excluded": false, - "X": 817.5, - "Y": 437.25 + "ShowGeometry": true, + "X": 853.167723723682, + "Y": 400.3953326561401 }, { - "ShowGeometry": true, - "Name": "Code Block", "Id": "247d1b8751c64f8b8ac88e37cad98dff", + "Name": "Code Block", "IsSetAsInput": false, "IsSetAsOutput": false, "Excluded": false, + "ShowGeometry": true, "X": -189.0, "Y": 287.0 }, { - "ShowGeometry": true, - "Name": "WrapperObject.ID", "Id": "342f96575f8942c890867d88495fb0db", + "Name": "WrapperObject.ID", "IsSetAsInput": false, "IsSetAsOutput": false, "Excluded": false, - "X": -59.5, - "Y": 490.25 + "ShowGeometry": true, + "X": -74.93026706231456, + "Y": 620.2203264094954 }, { - "ShowGeometry": true, - "Name": "WrapperObject.WrapperObject", "Id": "e464dfe1dfcf43698eb5e8efc11d1aae", + "Name": "WrapperObject.WrapperObject", "IsSetAsInput": false, "IsSetAsOutput": false, "Excluded": false, + "ShowGeometry": true, "X": -56.5, "Y": 393.25 }, { - "ShowGeometry": true, - "Name": "element_binding_nested", - "Id": "7d799d548e0344aab8debfb468b50166", + "Id": "08448232ee094aad8280e9a99ed44f46", + "Name": "WrapperObject.ID_11", "IsSetAsInput": false, "IsSetAsOutput": false, "Excluded": false, - "X": 400.5, - "Y": 558.25 + "ShowGeometry": true, + "X": 848.1824925816022, + "Y": 828.5229970326409 }, { - "ShowGeometry": true, - "Name": "WrapperObject.ID_444444", - "Id": "08448232ee094aad8280e9a99ed44f46", + "Id": "8cfce012280342f3bd688520d68a7f66", + "Name": "WrapperObject.ID_10", "IsSetAsInput": false, "IsSetAsOutput": false, "Excluded": false, - "X": 837.5, - "Y": 744.25 + "ShowGeometry": true, + "X": 835.5, + "Y": 624.25 }, { + "Id": "a30bd8fce103453f8796e215acb19c2c", + "Name": "element_binding_nested", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, "ShowGeometry": true, - "Name": "WrapperObject.ID_333333", - "Id": "8cfce012280342f3bd688520d68a7f66", + "X": 417.0741839762611, + "Y": 542.3041543026707 + }, + { + "Id": "949afd28057040b09d91f18eb64697d8", + "Name": "element_binding_nested", "IsSetAsInput": false, "IsSetAsOutput": false, "Excluded": false, - "X": 835.5, - "Y": 624.25 + "ShowGeometry": true, + "X": 441.5403757212908, + "Y": 761.4360508727391 } ], "Annotations": [], - "X": -435.0, - "Y": -220.0, - "Zoom": 1.0 + "X": 351.35540214191775, + "Y": -239.63010853515328, + "Zoom": 0.7658293928515519 } -} \ No newline at end of file +} diff --git a/test/core/callsite/element_binding_customNodes_modified_multiple_pre3.0.dyn b/test/core/callsite/element_binding_customNodes_modified_multiple_pre3.0.dyn new file mode 100644 index 00000000000..b68bf9aa877 --- /dev/null +++ b/test/core/callsite/element_binding_customNodes_modified_multiple_pre3.0.dyn @@ -0,0 +1,478 @@ +{ + "Uuid": "ce4b7a61-2ef7-46ba-965c-e5a69dc6d6a1", + "IsCustomNode": false, + "Description": null, + "Name": "element_binding_customNodes_modified_multiple", + "ElementResolver": { + "ResolutionMap": {} + }, + "Inputs": [], + "Outputs": [], + "Nodes": [ + { + "ConcreteType": "Dynamo.Graph.Nodes.CustomNodes.Function, DynamoCore", + "FunctionSignature": "9c65f412-0637-4601-ba90-9de2f539224f", + "FunctionType": "Graph", + "NodeType": "FunctionNode", + "Id": "a3cceaa601de4485beb72eea39a46f65", + "Inputs": [ + { + "Id": "a83f8affbd294adab130d8f0af11f68d", + "Name": "someInput", + "Description": "var[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "d959a76782cb472bbe5dae220136d396", + "Name": "out2", + "Description": "return value", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "28031b992d1f4923959eb2b0562a545d", + "Name": "out1", + "Description": "return value", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Auto", + "Description": "testing nested element binding" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "NodeType": "FunctionNode", + "FunctionSignature": "FFITarget.WrapperObject.ID", + "Id": "da39dbe5f59649b18c2fb6ca54acba7b", + "Inputs": [ + { + "Id": "57657d3625f54b7c8fc3b6e5612618a7", + "Name": "wrapperObject", + "Description": "FFITarget.WrapperObject", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "537d03bde70b47d0b02b879668df989d", + "Name": "int", + "Description": "int", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Auto", + "Description": "WrapperObject.ID: int" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "NodeType": "FunctionNode", + "FunctionSignature": "FFITarget.WrapperObject.ID", + "Id": "2366239164a9441a8c4dcd981d9cf542", + "Inputs": [ + { + "Id": "7957f66d0e56481e9c7673de24179110", + "Name": "wrapperObject", + "Description": "FFITarget.WrapperObject", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "f45a46c44e7a48a793862160ab38365c", + "Name": "int", + "Description": "int", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Auto", + "Description": "WrapperObject.ID: int" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "NodeType": "CodeBlockNode", + "Code": "100;", + "Id": "247d1b8751c64f8b8ac88e37cad98dff", + "Inputs": [], + "Outputs": [ + { + "Id": "12a69844634441d08df8ff2d1b3b0c42", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "NodeType": "FunctionNode", + "FunctionSignature": "FFITarget.WrapperObject.ID", + "Id": "342f96575f8942c890867d88495fb0db", + "Inputs": [ + { + "Id": "7178d1186aee4a20b03be1e20ad0da64", + "Name": "wrapperObject", + "Description": "FFITarget.WrapperObject", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "b06f4f43fa7749b5856af632006d7806", + "Name": "int", + "Description": "int", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Auto", + "Description": "WrapperObject.ID: int" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "NodeType": "FunctionNode", + "FunctionSignature": "FFITarget.WrapperObject.WrapperObject@int", + "Id": "e464dfe1dfcf43698eb5e8efc11d1aae", + "Inputs": [ + { + "Id": "165c688d1cdf43eb863f95e12721700c", + "Name": "x", + "Description": "int", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "94b68073cf42449abbd5ecb25fb6fcbc", + "Name": "WrapperObject", + "Description": "WrapperObject", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Auto", + "Description": "WrapperObject.WrapperObject (x: int): WrapperObject" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CustomNodes.Function, DynamoCore", + "FunctionSignature": "9c65f412-0637-4601-ba90-9de2f539224f", + "FunctionType": "Graph", + "NodeType": "FunctionNode", + "Id": "7d799d548e0344aab8debfb468b50166", + "Inputs": [ + { + "Id": "0a321e2157fe45268bcf46eed08e8cd3", + "Name": "someInput", + "Description": "var[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "2aa9090e1843495295c4ce3cddd9459c", + "Name": "out2", + "Description": "return value", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "af8d68ecd22b45a1afe7c12190cf3300", + "Name": "out1", + "Description": "return value", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Auto", + "Description": "testing nested element binding" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "NodeType": "FunctionNode", + "FunctionSignature": "FFITarget.WrapperObject.ID", + "Id": "08448232ee094aad8280e9a99ed44f46", + "Inputs": [ + { + "Id": "8adfa0547e0d4784b59d352c45a9b4b9", + "Name": "wrapperObject", + "Description": "FFITarget.WrapperObject", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "c7ee12320e614211bf681715342f894a", + "Name": "int", + "Description": "int", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Auto", + "Description": "WrapperObject.ID: int" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "NodeType": "FunctionNode", + "FunctionSignature": "FFITarget.WrapperObject.ID", + "Id": "8cfce012280342f3bd688520d68a7f66", + "Inputs": [ + { + "Id": "d5cfa698e209433a8c4efd66b711d98c", + "Name": "wrapperObject", + "Description": "FFITarget.WrapperObject", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "bad1c4ea3f9242f2b2a7c9da5c5d6a66", + "Name": "int", + "Description": "int", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Auto", + "Description": "WrapperObject.ID: int" + } + ], + "Connectors": [ + { + "Start": "d959a76782cb472bbe5dae220136d396", + "End": "57657d3625f54b7c8fc3b6e5612618a7", + "Id": "3490d7fe3a8143f8b0da79608cec2db7" + }, + { + "Start": "28031b992d1f4923959eb2b0562a545d", + "End": "7957f66d0e56481e9c7673de24179110", + "Id": "fead1997c72544b79c6085f0047faf4c" + }, + { + "Start": "12a69844634441d08df8ff2d1b3b0c42", + "End": "165c688d1cdf43eb863f95e12721700c", + "Id": "5ca50e2c395e4304b14c86c45480de32" + }, + { + "Start": "b06f4f43fa7749b5856af632006d7806", + "End": "a83f8affbd294adab130d8f0af11f68d", + "Id": "79b1c4ec60014662896beb5cd6f9e219" + }, + { + "Start": "b06f4f43fa7749b5856af632006d7806", + "End": "0a321e2157fe45268bcf46eed08e8cd3", + "Id": "eeeff16f2f3f4eb583e82b66ef370777" + }, + { + "Start": "94b68073cf42449abbd5ecb25fb6fcbc", + "End": "7178d1186aee4a20b03be1e20ad0da64", + "Id": "fe46ec09fbe24401934b70dec0521e7a" + }, + { + "Start": "2aa9090e1843495295c4ce3cddd9459c", + "End": "d5cfa698e209433a8c4efd66b711d98c", + "Id": "bf0d54c88f41487e984f4ec706685b2c" + }, + { + "Start": "af8d68ecd22b45a1afe7c12190cf3300", + "End": "8adfa0547e0d4784b59d352c45a9b4b9", + "Id": "b2e0d33b549f4ad2a8f432ae785116c0" + } + ], + "Dependencies": [ + "9c65f412-0637-4601-ba90-9de2f539224f" + ], + "Bindings": [ + { + "NodeId": "a3cceaa6-01de-4485-beb7-2eea39a46f65", + "Binding": { + "__func_9c65f41206374601ba909de2f539224f_InClassDecl-1_InFunctionScope-1_Instance0_a3cceaa6-01de-4485-beb7-2eea39a46f65;WrapperObject_InClassDecl-1_InFunctionScope1000_Instance0_54062f33-ce19-49a3-a373-5d4a253e26a5": "PFNPQVAtRU5WOkVudmVsb3BlIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOlNPQVAtRU5DPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyIgeG1sbnM6U09BUC1FTlY9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW52ZWxvcGUvIiB4bWxuczpjbHI9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vc29hcC9lbmNvZGluZy9jbHIvMS4wIiBTT0FQLUVOVjplbmNvZGluZ1N0eWxlPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyI+CjxTT0FQLUVOVjpCb2R5Pgo8YTE6Q2FsbFNpdGVfeDAwMkJfVHJhY2VTZXJpYWxpc2VySGVscGVyIGlkPSJyZWYtMSIgeG1sbnM6YTE9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vY2xyL25zYXNzZW0vUHJvdG9Db3JlL1Byb3RvQ29yZSUyQyUyMFZlcnNpb24lM0QyLjIuMC40NTY1JTJDJTIwQ3VsdHVyZSUzRG5ldXRyYWwlMkMlMjBQdWJsaWNLZXlUb2tlbiUzRG51bGwiPgo8TnVtYmVyT2ZFbGVtZW50cz4xPC9OdW1iZXJPZkVsZW1lbnRzPgo8QmFzZS0wX0hhc0RhdGE+dHJ1ZTwvQmFzZS0wX0hhc0RhdGE+CjxCYXNlLTBfRGF0YSBpZD0icmVmLTMiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrQ2p4VFQwRlFMVVZPVmpwQ2IyUjVQZ284WVRFNlNVUkliMnhrWlhJZ2FXUTlJbkpsWmkweElpQjRiV3h1Y3pwaE1UMGlhSFIwY0RvdkwzTmphR1Z0WVhNdWJXbGpjbTl6YjJaMExtTnZiUzlqYkhJdmJuTmhjM05sYlM5R1JrbFVZWEpuWlhRdlJrWkpWR0Z5WjJWMEpUSkRKVEl3Vm1WeWMybHZiaVV6UkRJdU1pNHdMalExTVRZbE1rTWxNakJEZFd4MGRYSmxKVE5FYm1WMWRISmhiQ1V5UXlVeU1GQjFZbXhwWTB0bGVWUnZhMlZ1SlRORWJuVnNiQ0krQ2p4cGJuUkpSRDR4TVRFeE1URThMMmx1ZEVsRVBnbzhMMkV4T2tsRVNHOXNaR1Z5UGdvOEwxTlBRVkF0UlU1V09rSnZaSGsrQ2p3dlUwOUJVQzFGVGxZNlJXNTJaV3h2Y0dVKzwvQmFzZS0wX0RhdGE+CjxCYXNlLTBfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wX0hhc05lc3RlZERhdGE+CjwvYTE6Q2FsbFNpdGVfeDAwMkJfVHJhY2VTZXJpYWxpc2VySGVscGVyPgo8L1NPQVAtRU5WOkJvZHk+CjwvU09BUC1FTlY6RW52ZWxvcGU+Cg==", + "__func_9c65f41206374601ba909de2f539224f_InClassDecl-1_InFunctionScope-1_Instance0_a3cceaa6-01de-4485-beb7-2eea39a46f65;WrapperObject_InClassDecl-1_InFunctionScope1000_Instance0_3f04f5f4-f54d-4071-af6f-7d5db4e7706e": "PFNPQVAtRU5WOkVudmVsb3BlIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOlNPQVAtRU5DPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyIgeG1sbnM6U09BUC1FTlY9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW52ZWxvcGUvIiB4bWxuczpjbHI9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vc29hcC9lbmNvZGluZy9jbHIvMS4wIiBTT0FQLUVOVjplbmNvZGluZ1N0eWxlPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyI+CjxTT0FQLUVOVjpCb2R5Pgo8YTE6Q2FsbFNpdGVfeDAwMkJfVHJhY2VTZXJpYWxpc2VySGVscGVyIGlkPSJyZWYtMSIgeG1sbnM6YTE9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vY2xyL25zYXNzZW0vUHJvdG9Db3JlL1Byb3RvQ29yZSUyQyUyMFZlcnNpb24lM0QyLjIuMC40NTY1JTJDJTIwQ3VsdHVyZSUzRG5ldXRyYWwlMkMlMjBQdWJsaWNLZXlUb2tlbiUzRG51bGwiPgo8TnVtYmVyT2ZFbGVtZW50cz4xPC9OdW1iZXJPZkVsZW1lbnRzPgo8QmFzZS0wX0hhc0RhdGE+dHJ1ZTwvQmFzZS0wX0hhc0RhdGE+CjxCYXNlLTBfRGF0YSBpZD0icmVmLTMiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrQ2p4VFQwRlFMVVZPVmpwQ2IyUjVQZ284WVRFNlNVUkliMnhrWlhJZ2FXUTlJbkpsWmkweElpQjRiV3h1Y3pwaE1UMGlhSFIwY0RvdkwzTmphR1Z0WVhNdWJXbGpjbTl6YjJaMExtTnZiUzlqYkhJdmJuTmhjM05sYlM5R1JrbFVZWEpuWlhRdlJrWkpWR0Z5WjJWMEpUSkRKVEl3Vm1WeWMybHZiaVV6UkRJdU1pNHdMalExTVRZbE1rTWxNakJEZFd4MGRYSmxKVE5FYm1WMWRISmhiQ1V5UXlVeU1GQjFZbXhwWTB0bGVWUnZhMlZ1SlRORWJuVnNiQ0krQ2p4cGJuUkpSRDR5TWpJeU1qSThMMmx1ZEVsRVBnbzhMMkV4T2tsRVNHOXNaR1Z5UGdvOEwxTlBRVkF0UlU1V09rSnZaSGsrQ2p3dlUwOUJVQzFGVGxZNlJXNTJaV3h2Y0dVKzwvQmFzZS0wX0RhdGE+CjxCYXNlLTBfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wX0hhc05lc3RlZERhdGE+CjwvYTE6Q2FsbFNpdGVfeDAwMkJfVHJhY2VTZXJpYWxpc2VySGVscGVyPgo8L1NPQVAtRU5WOkJvZHk+CjwvU09BUC1FTlY6RW52ZWxvcGU+Cg==" + } + }, + { + "NodeId": "e464dfe1-dfcf-4369-8eb5-e8efc11d1aae", + "Binding": { + "WrapperObject_InClassDecl-1_InFunctionScope-1_Instance0_e464dfe1-dfcf-4369-8eb5-e8efc11d1aae": "PFNPQVAtRU5WOkVudmVsb3BlIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOlNPQVAtRU5DPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyIgeG1sbnM6U09BUC1FTlY9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW52ZWxvcGUvIiB4bWxuczpjbHI9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vc29hcC9lbmNvZGluZy9jbHIvMS4wIiBTT0FQLUVOVjplbmNvZGluZ1N0eWxlPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyI+DQo8U09BUC1FTlY6Qm9keT4NCjxhMTpDYWxsU2l0ZV94MDAyQl9UcmFjZVNlcmlhbGlzZXJIZWxwZXIgaWQ9InJlZi0xIiB4bWxuczphMT0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9jbHIvbnNhc3NlbS9Qcm90b0NvcmUvUHJvdG9Db3JlJTJDJTIwVmVyc2lvbiUzRDIuMi4wLjQ1NjUlMkMlMjBDdWx0dXJlJTNEbmV1dHJhbCUyQyUyMFB1YmxpY0tleVRva2VuJTNEbnVsbCI+DQo8TnVtYmVyT2ZFbGVtZW50cz4xPC9OdW1iZXJPZkVsZW1lbnRzPg0KPEJhc2UtMF9IYXNEYXRhPnRydWU8L0Jhc2UtMF9IYXNEYXRhPg0KPEJhc2UtMF9EYXRhIGlkPSJyZWYtMyI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVORFV4TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR6UEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wX0RhdGE+DQo8QmFzZS0wX0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMF9IYXNOZXN0ZWREYXRhPg0KPC9hMTpDYWxsU2l0ZV94MDAyQl9UcmFjZVNlcmlhbGlzZXJIZWxwZXI+DQo8L1NPQVAtRU5WOkJvZHk+DQo8L1NPQVAtRU5WOkVudmVsb3BlPg0K" + } + }, + { + "NodeId": "7d799d54-8e03-44aa-b8de-bfb468b50166", + "Binding": { + "__func_9c65f41206374601ba909de2f539224f_InClassDecl-1_InFunctionScope-1_Instance0_7d799d54-8e03-44aa-b8de-bfb468b50166;WrapperObject_InClassDecl-1_InFunctionScope1000_Instance0_54062f33-ce19-49a3-a373-5d4a253e26a5": "PFNPQVAtRU5WOkVudmVsb3BlIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOlNPQVAtRU5DPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyIgeG1sbnM6U09BUC1FTlY9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW52ZWxvcGUvIiB4bWxuczpjbHI9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vc29hcC9lbmNvZGluZy9jbHIvMS4wIiBTT0FQLUVOVjplbmNvZGluZ1N0eWxlPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyI+CjxTT0FQLUVOVjpCb2R5Pgo8YTE6Q2FsbFNpdGVfeDAwMkJfVHJhY2VTZXJpYWxpc2VySGVscGVyIGlkPSJyZWYtMSIgeG1sbnM6YTE9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vY2xyL25zYXNzZW0vUHJvdG9Db3JlL1Byb3RvQ29yZSUyQyUyMFZlcnNpb24lM0QyLjIuMC40NTY1JTJDJTIwQ3VsdHVyZSUzRG5ldXRyYWwlMkMlMjBQdWJsaWNLZXlUb2tlbiUzRG51bGwiPgo8TnVtYmVyT2ZFbGVtZW50cz4xPC9OdW1iZXJPZkVsZW1lbnRzPgo8QmFzZS0wX0hhc0RhdGE+dHJ1ZTwvQmFzZS0wX0hhc0RhdGE+CjxCYXNlLTBfRGF0YSBpZD0icmVmLTMiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrQ2p4VFQwRlFMVVZPVmpwQ2IyUjVQZ284WVRFNlNVUkliMnhrWlhJZ2FXUTlJbkpsWmkweElpQjRiV3h1Y3pwaE1UMGlhSFIwY0RvdkwzTmphR1Z0WVhNdWJXbGpjbTl6YjJaMExtTnZiUzlqYkhJdmJuTmhjM05sYlM5R1JrbFVZWEpuWlhRdlJrWkpWR0Z5WjJWMEpUSkRKVEl3Vm1WeWMybHZiaVV6UkRJdU1pNHdMalExTVRZbE1rTWxNakJEZFd4MGRYSmxKVE5FYm1WMWRISmhiQ1V5UXlVeU1GQjFZbXhwWTB0bGVWUnZhMlZ1SlRORWJuVnNiQ0krQ2p4cGJuUkpSRDR6TXpNek16TThMMmx1ZEVsRVBnbzhMMkV4T2tsRVNHOXNaR1Z5UGdvOEwxTlBRVkF0UlU1V09rSnZaSGsrQ2p3dlUwOUJVQzFGVGxZNlJXNTJaV3h2Y0dVKzwvQmFzZS0wX0RhdGE+CjxCYXNlLTBfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wX0hhc05lc3RlZERhdGE+CjwvYTE6Q2FsbFNpdGVfeDAwMkJfVHJhY2VTZXJpYWxpc2VySGVscGVyPgo8L1NPQVAtRU5WOkJvZHk+CjwvU09BUC1FTlY6RW52ZWxvcGU+Cg==", + "__func_9c65f41206374601ba909de2f539224f_InClassDecl-1_InFunctionScope-1_Instance0_7d799d54-8e03-44aa-b8de-bfb468b50166;WrapperObject_InClassDecl-1_InFunctionScope1000_Instance0_3f04f5f4-f54d-4071-af6f-7d5db4e7706e": "PFNPQVAtRU5WOkVudmVsb3BlIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOlNPQVAtRU5DPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyIgeG1sbnM6U09BUC1FTlY9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW52ZWxvcGUvIiB4bWxuczpjbHI9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vc29hcC9lbmNvZGluZy9jbHIvMS4wIiBTT0FQLUVOVjplbmNvZGluZ1N0eWxlPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyI+CjxTT0FQLUVOVjpCb2R5Pgo8YTE6Q2FsbFNpdGVfeDAwMkJfVHJhY2VTZXJpYWxpc2VySGVscGVyIGlkPSJyZWYtMSIgeG1sbnM6YTE9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vY2xyL25zYXNzZW0vUHJvdG9Db3JlL1Byb3RvQ29yZSUyQyUyMFZlcnNpb24lM0QyLjIuMC40NTY1JTJDJTIwQ3VsdHVyZSUzRG5ldXRyYWwlMkMlMjBQdWJsaWNLZXlUb2tlbiUzRG51bGwiPgo8TnVtYmVyT2ZFbGVtZW50cz4xPC9OdW1iZXJPZkVsZW1lbnRzPgo8QmFzZS0wX0hhc0RhdGE+dHJ1ZTwvQmFzZS0wX0hhc0RhdGE+CjxCYXNlLTBfRGF0YSBpZD0icmVmLTMiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrQ2p4VFQwRlFMVVZPVmpwQ2IyUjVQZ284WVRFNlNVUkliMnhrWlhJZ2FXUTlJbkpsWmkweElpQjRiV3h1Y3pwaE1UMGlhSFIwY0RvdkwzTmphR1Z0WVhNdWJXbGpjbTl6YjJaMExtTnZiUzlqYkhJdmJuTmhjM05sYlM5R1JrbFVZWEpuWlhRdlJrWkpWR0Z5WjJWMEpUSkRKVEl3Vm1WeWMybHZiaVV6UkRJdU1pNHdMalExTVRZbE1rTWxNakJEZFd4MGRYSmxKVE5FYm1WMWRISmhiQ1V5UXlVeU1GQjFZbXhwWTB0bGVWUnZhMlZ1SlRORWJuVnNiQ0krQ2p4cGJuUkpSRDQwTkRRME5EUThMMmx1ZEVsRVBnbzhMMkV4T2tsRVNHOXNaR1Z5UGdvOEwxTlBRVkF0UlU1V09rSnZaSGsrQ2p3dlUwOUJVQzFGVGxZNlJXNTJaV3h2Y0dVKzwvQmFzZS0wX0RhdGE+CjxCYXNlLTBfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wX0hhc05lc3RlZERhdGE+CjwvYTE6Q2FsbFNpdGVfeDAwMkJfVHJhY2VTZXJpYWxpc2VySGVscGVyPgo8L1NPQVAtRU5WOkJvZHk+CjwvU09BUC1FTlY6RW52ZWxvcGU+Cg==" + } + } + ], + "View": { + "Dynamo": { + "ScaleFactor": 1.0, + "HasRunWithoutCrash": true, + "IsVisibleInDynamoLibrary": true, + "Version": "2.2.0.4565", + "RunType": "Manual", + "RunPeriod": "1000" + }, + "Camera": { + "Name": "Background Preview", + "EyeX": -17.0, + "EyeY": 24.0, + "EyeZ": 50.0, + "LookX": 12.0, + "LookY": -13.0, + "LookZ": -58.0, + "UpX": 0.0, + "UpY": 1.0, + "UpZ": 0.0 + }, + "NodeViews": [ + { + "ShowGeometry": true, + "Name": "element_binding_nested", + "Id": "a3cceaa601de4485beb72eea39a46f65", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "X": 400.5, + "Y": 419.25 + }, + { + "ShowGeometry": true, + "Name": "WrapperObject.ID_111111", + "Id": "da39dbe5f59649b18c2fb6ca54acba7b", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "X": 825.5, + "Y": 286.25 + }, + { + "ShowGeometry": true, + "Name": "WrapperObject.ID_222222", + "Id": "2366239164a9441a8c4dcd981d9cf542", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "X": 817.5, + "Y": 437.25 + }, + { + "ShowGeometry": true, + "Name": "Code Block", + "Id": "247d1b8751c64f8b8ac88e37cad98dff", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "X": -189.0, + "Y": 287.0 + }, + { + "ShowGeometry": true, + "Name": "WrapperObject.ID", + "Id": "342f96575f8942c890867d88495fb0db", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "X": -59.5, + "Y": 490.25 + }, + { + "ShowGeometry": true, + "Name": "WrapperObject.WrapperObject", + "Id": "e464dfe1dfcf43698eb5e8efc11d1aae", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "X": -56.5, + "Y": 393.25 + }, + { + "ShowGeometry": true, + "Name": "element_binding_nested", + "Id": "7d799d548e0344aab8debfb468b50166", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "X": 400.5, + "Y": 558.25 + }, + { + "ShowGeometry": true, + "Name": "WrapperObject.ID_444444", + "Id": "08448232ee094aad8280e9a99ed44f46", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "X": 837.5, + "Y": 744.25 + }, + { + "ShowGeometry": true, + "Name": "WrapperObject.ID_333333", + "Id": "8cfce012280342f3bd688520d68a7f66", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "X": 835.5, + "Y": 624.25 + } + ], + "Annotations": [], + "X": -435.0, + "Y": -220.0, + "Zoom": 1.0 + } +} \ No newline at end of file diff --git a/test/core/callsite/element_binding_large.dyn b/test/core/callsite/element_binding_large.dyn index 82ed6d1438d..6b43e366c72 100644 --- a/test/core/callsite/element_binding_large.dyn +++ b/test/core/callsite/element_binding_large.dyn @@ -11,14 +11,13 @@ "Nodes": [ { "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "056d9c584f3b42acabec727e64188fae", "NodeType": "FunctionNode", - "FunctionSignature": "FFITarget.WrapperObject.WrapperObject@int", - "Id": "5ad33880a88e47f0a5a156d1edbfae2b", "Inputs": [ { - "Id": "ea47ad627e9b4c6386e1902aedcf4dd7", - "Name": "x", - "Description": "int", + "Id": "9188e52217974b68aa52d0dabda48c27", + "Name": "wrapperObject", + "Description": "FFITarget.WrapperObject", "UsingDefaultValue": false, "Level": 2, "UseLevels": false, @@ -27,38 +26,47 @@ ], "Outputs": [ { - "Id": "e542c2e87996414e9df1d1dfccea188c", - "Name": "WrapperObject", - "Description": "WrapperObject", + "Id": "39b9175be4104a6dabf66507bb59e6ff", + "Name": "int", + "Description": "int", "UsingDefaultValue": false, "Level": 2, "UseLevels": false, "KeepListStructure": false } ], + "FunctionSignature": "FFITarget.WrapperObject.ID", "Replication": "Auto", - "Description": "WrapperObject.WrapperObject (x: int): WrapperObject" + "Description": "WrapperObject.ID: int" }, { - "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", - "NodeType": "FunctionNode", - "FunctionSignature": "FFITarget.WrapperObject.ID", - "Id": "056d9c584f3b42acabec727e64188fae", - "Inputs": [ + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "56c98070e24545b883c0ee1d3e82b958", + "NodeType": "CodeBlockNode", + "Inputs": [], + "Outputs": [ { - "Id": "9188e52217974b68aa52d0dabda48c27", - "Name": "wrapperObject", - "Description": "FFITarget.WrapperObject", + "Id": "9ac62d2f6d4842768fa0d2417e391977", + "Name": "", + "Description": "Value of expression at line 1", "UsingDefaultValue": false, "Level": 2, "UseLevels": false, "KeepListStructure": false } ], - "Outputs": [ + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "0..1500;" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "181afb69460d458daf520b409ca26796", + "NodeType": "FunctionNode", + "Inputs": [ { - "Id": "39b9175be4104a6dabf66507bb59e6ff", - "Name": "int", + "Id": "ef5053d73df047ccb0dcde106acf8c3b", + "Name": "x", "Description": "int", "UsingDefaultValue": false, "Level": 2, @@ -66,48 +74,69 @@ "KeepListStructure": false } ], - "Replication": "Auto", - "Description": "WrapperObject.ID: int" - }, - { - "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", - "NodeType": "CodeBlockNode", - "Code": "0..1500;", - "Id": "56c98070e24545b883c0ee1d3e82b958", - "Inputs": [], "Outputs": [ { - "Id": "9ac62d2f6d4842768fa0d2417e391977", - "Name": "", - "Description": "Value of expression at line 1", + "Id": "81a7087d593f4b83862b3d4ae3af2ccf", + "Name": "WrapperObject", + "Description": "WrapperObject", "UsingDefaultValue": false, "Level": 2, "UseLevels": false, "KeepListStructure": false } ], - "Replication": "Disabled", - "Description": "Allows for DesignScript code to be authored directly" + "FunctionSignature": "FFITarget.WrapperObject.WrapperObject@int", + "Replication": "Auto", + "Description": "WrapperObject.WrapperObject (x: int): WrapperObject" } ], "Connectors": [ { - "Start": "e542c2e87996414e9df1d1dfccea188c", - "End": "9188e52217974b68aa52d0dabda48c27", - "Id": "aaac57a7df6b4a70b927165e6db36355" + "Start": "9ac62d2f6d4842768fa0d2417e391977", + "End": "ef5053d73df047ccb0dcde106acf8c3b", + "Id": "e668042ce17f4034823c9e78d2827270", + "IsHidden": "False" }, { - "Start": "9ac62d2f6d4842768fa0d2417e391977", - "End": "ea47ad627e9b4c6386e1902aedcf4dd7", - "Id": "c304413e330b4fc5af285d935693773e" + "Start": "81a7087d593f4b83862b3d4ae3af2ccf", + "End": "9188e52217974b68aa52d0dabda48c27", + "Id": "039a152970a34c48ac04348928476a06", + "IsHidden": "False" } ], "Dependencies": [], + "NodeLibraryDependencies": [ + { + "Name": "FFITarget.dll", + "ReferenceType": "ZeroTouch", + "Nodes": [ + "056d9c584f3b42acabec727e64188fae", + "181afb69460d458daf520b409ca26796" + ] + } + ], + "Thumbnail": null, + "GraphDocumentationURL": null, + "ExtensionWorkspaceData": [ + { + "ExtensionGuid": "28992e1d-abb9-417f-8b1b-05e053bee670", + "Name": "Properties", + "Version": "3.0", + "Data": {} + } + ], + "Author": "None provided", + "Linting": { + "activeLinter": "None", + "activeLinterId": "7b75fb44-43fd-4631-a878-29f4d5d8399a", + "warningCount": 0, + "errorCount": 0 + }, "Bindings": [ { - "NodeId": "5ad33880-a88e-47f0-a5a1-56d1edbfae2b", + "NodeId": "181afb69-460d-458d-af52-0b409ca26796", "Binding": { - "WrapperObject_InClassDecl-1_InFunctionScope-1_Instance0_5ad33880-a88e-47f0-a5a1-56d1edbfae2b": "PFNPQVAtRU5WOkVudmVsb3BlIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOlNPQVAtRU5DPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyIgeG1sbnM6U09BUC1FTlY9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW52ZWxvcGUvIiB4bWxuczpjbHI9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vc29hcC9lbmNvZGluZy9jbHIvMS4wIiBTT0FQLUVOVjplbmNvZGluZ1N0eWxlPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyI+DQo8U09BUC1FTlY6Qm9keT4NCjxhMTpDYWxsU2l0ZV94MDAyQl9UcmFjZVNlcmlhbGlzZXJIZWxwZXIgaWQ9InJlZi0xIiB4bWxuczphMT0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9jbHIvbnNhc3NlbS9Qcm90b0NvcmUvUHJvdG9Db3JlJTJDJTIwVmVyc2lvbiUzRDIuMi4wLjQwMDYlMkMlMjBDdWx0dXJlJTNEbmV1dHJhbCUyQyUyMFB1YmxpY0tleVRva2VuJTNEbnVsbCI+DQo8TnVtYmVyT2ZFbGVtZW50cz4xPC9OdW1iZXJPZkVsZW1lbnRzPg0KPEJhc2UtMF9IYXNEYXRhPmZhbHNlPC9CYXNlLTBfSGFzRGF0YT4NCjxCYXNlLTBfSGFzTmVzdGVkRGF0YT50cnVlPC9CYXNlLTBfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTBfTmVzdGVkRGF0YUNvdW50PjE1MDE8L0Jhc2UtMF9OZXN0ZWREYXRhQ291bnQ+DQo8QmFzZS0wLTBfSGFzRGF0YT50cnVlPC9CYXNlLTAtMF9IYXNEYXRhPg0KPEJhc2UtMC0wX0RhdGEgaWQ9InJlZi0zIj5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENDJQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMF9EYXRhPg0KPEJhc2UtMC0wX0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0wX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTFfSGFzRGF0YT50cnVlPC9CYXNlLTAtMV9IYXNEYXRhPg0KPEJhc2UtMC0xX0RhdGEgaWQ9InJlZi00Ij5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENDNQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMV9EYXRhPg0KPEJhc2UtMC0xX0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTJfSGFzRGF0YT50cnVlPC9CYXNlLTAtMl9IYXNEYXRhPg0KPEJhc2UtMC0yX0RhdGEgaWQ9InJlZi01Ij5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENDRQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMl9EYXRhPg0KPEJhc2UtMC0yX0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0yX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTNfSGFzRGF0YT50cnVlPC9CYXNlLTAtM19IYXNEYXRhPg0KPEJhc2UtMC0zX0RhdGEgaWQ9InJlZi02Ij5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENDVQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtM19EYXRhPg0KPEJhc2UtMC0zX0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0zX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTRfSGFzRGF0YT50cnVlPC9CYXNlLTAtNF9IYXNEYXRhPg0KPEJhc2UtMC00X0RhdGEgaWQ9InJlZi03Ij5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNRHd2YVc1MFNVUStEUW84TDJFeE9rbEVTRzlzWkdWeVBnMEtQQzlUVDBGUUxVVk9WanBDYjJSNVBnMEtQQzlUVDBGUUxVVk9WanBGYm5abGJHOXdaVDROQ2c9PTwvQmFzZS0wLTRfRGF0YT4NCjxCYXNlLTAtNF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNF9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC01X0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTVfSGFzRGF0YT4NCjxCYXNlLTAtNV9EYXRhIGlkPSJyZWYtOCI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TVR3dmFXNTBTVVErRFFvOEwyRXhPa2xFU0c5c1pHVnlQZzBLUEM5VFQwRlFMVVZPVmpwQ2IyUjVQZzBLUEM5VFQwRlFMVVZPVmpwRmJuWmxiRzl3WlQ0TkNnPT08L0Jhc2UtMC01X0RhdGE+DQo8QmFzZS0wLTVfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTVfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtNl9IYXNEYXRhPnRydWU8L0Jhc2UtMC02X0hhc0RhdGE+DQo8QmFzZS0wLTZfRGF0YSBpZD0icmVmLTkiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE1qd3ZhVzUwU1VRK0RRbzhMMkV4T2tsRVNHOXNaR1Z5UGcwS1BDOVRUMEZRTFVWT1ZqcENiMlI1UGcwS1BDOVRUMEZRTFVWT1ZqcEZiblpsYkc5d1pUNE5DZz09PC9CYXNlLTAtNl9EYXRhPg0KPEJhc2UtMC02X0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC02X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTdfSGFzRGF0YT50cnVlPC9CYXNlLTAtN19IYXNEYXRhPg0KPEJhc2UtMC03X0RhdGEgaWQ9InJlZi0xMCI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TXp3dmFXNTBTVVErRFFvOEwyRXhPa2xFU0c5c1pHVnlQZzBLUEM5VFQwRlFMVVZPVmpwQ2IyUjVQZzBLUEM5VFQwRlFMVVZPVmpwRmJuWmxiRzl3WlQ0TkNnPT08L0Jhc2UtMC03X0RhdGE+DQo8QmFzZS0wLTdfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTdfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtOF9IYXNEYXRhPnRydWU8L0Jhc2UtMC04X0hhc0RhdGE+DQo8QmFzZS0wLThfRGF0YSBpZD0icmVmLTExIj5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhORHd2YVc1MFNVUStEUW84TDJFeE9rbEVTRzlzWkdWeVBnMEtQQzlUVDBGUUxVVk9WanBDYjJSNVBnMEtQQzlUVDBGUUxVVk9WanBGYm5abGJHOXdaVDROQ2c9PTwvQmFzZS0wLThfRGF0YT4NCjxCYXNlLTAtOF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtOF9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC05X0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTlfSGFzRGF0YT4NCjxCYXNlLTAtOV9EYXRhIGlkPSJyZWYtMTIiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE5Ud3ZhVzUwU1VRK0RRbzhMMkV4T2tsRVNHOXNaR1Z5UGcwS1BDOVRUMEZRTFVWT1ZqcENiMlI1UGcwS1BDOVRUMEZRTFVWT1ZqcEZiblpsYkc5d1pUNE5DZz09PC9CYXNlLTAtOV9EYXRhPg0KPEJhc2UtMC05X0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC05X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEwX0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTEwX0hhc0RhdGE+DQo8QmFzZS0wLTEwX0RhdGEgaWQ9InJlZi0xMyI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4Tmp3dmFXNTBTVVErRFFvOEwyRXhPa2xFU0c5c1pHVnlQZzBLUEM5VFQwRlFMVVZPVmpwQ2IyUjVQZzBLUEM5VFQwRlFMVVZPVmpwRmJuWmxiRzl3WlQ0TkNnPT08L0Jhc2UtMC0xMF9EYXRhPg0KPEJhc2UtMC0xMF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTBfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTFfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTFfSGFzRGF0YT4NCjxCYXNlLTAtMTFfRGF0YSBpZD0icmVmLTE0Ij5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhOend2YVc1MFNVUStEUW84TDJFeE9rbEVTRzlzWkdWeVBnMEtQQzlUVDBGUUxVVk9WanBDYjJSNVBnMEtQQzlUVDBGUUxVVk9WanBGYm5abGJHOXdaVDROQ2c9PTwvQmFzZS0wLTExX0RhdGE+DQo8QmFzZS0wLTExX0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMV9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMl9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMl9IYXNEYXRhPg0KPEJhc2UtMC0xMl9EYXRhIGlkPSJyZWYtMTUiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE9Ed3ZhVzUwU1VRK0RRbzhMMkV4T2tsRVNHOXNaR1Z5UGcwS1BDOVRUMEZRTFVWT1ZqcENiMlI1UGcwS1BDOVRUMEZRTFVWT1ZqcEZiblpsYkc5d1pUNE5DZz09PC9CYXNlLTAtMTJfRGF0YT4NCjxCYXNlLTAtMTJfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTEyX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEzX0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTEzX0hhc0RhdGE+DQo8QmFzZS0wLTEzX0RhdGEgaWQ9InJlZi0xNiI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4T1R3dmFXNTBTVVErRFFvOEwyRXhPa2xFU0c5c1pHVnlQZzBLUEM5VFQwRlFMVVZPVmpwQ2IyUjVQZzBLUEM5VFQwRlFMVVZPVmpwRmJuWmxiRzl3WlQ0TkNnPT08L0Jhc2UtMC0xM19EYXRhPg0KPEJhc2UtMC0xM19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTNfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTRfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTRfSGFzRGF0YT4NCjxCYXNlLTAtMTRfRGF0YSBpZD0icmVmLTE3Ij5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHlNRHd2YVc1MFNVUStEUW84TDJFeE9rbEVTRzlzWkdWeVBnMEtQQzlUVDBGUUxVVk9WanBDYjJSNVBnMEtQQzlUVDBGUUxVVk9WanBGYm5abGJHOXdaVDROQ2c9PTwvQmFzZS0wLTE0X0RhdGE+DQo8QmFzZS0wLTE0X0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xNF9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xNV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xNV9IYXNEYXRhPg0KPEJhc2UtMC0xNV9EYXRhIGlkPSJyZWYtMTgiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eU1Ud3ZhVzUwU1VRK0RRbzhMMkV4T2tsRVNHOXNaR1Z5UGcwS1BDOVRUMEZRTFVWT1ZqcENiMlI1UGcwS1BDOVRUMEZRTFVWT1ZqcEZiblpsYkc5d1pUNE5DZz09PC9CYXNlLTAtMTVfRGF0YT4NCjxCYXNlLTAtMTVfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTE1X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTE2X0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTE2X0hhc0RhdGE+DQo8QmFzZS0wLTE2X0RhdGEgaWQ9InJlZi0xOSI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR5TWp3dmFXNTBTVVErRFFvOEwyRXhPa2xFU0c5c1pHVnlQZzBLUEM5VFQwRlFMVVZPVmpwQ2IyUjVQZzBLUEM5VFQwRlFMVVZPVmpwRmJuWmxiRzl3WlQ0TkNnPT08L0Jhc2UtMC0xNl9EYXRhPg0KPEJhc2UtMC0xNl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTZfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTdfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTdfSGFzRGF0YT4NCjxCYXNlLTAtMTdfRGF0YSBpZD0icmVmLTIwIj5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHlNend2YVc1MFNVUStEUW84TDJFeE9rbEVTRzlzWkdWeVBnMEtQQzlUVDBGUUxVVk9WanBDYjJSNVBnMEtQQzlUVDBGUUxVVk9WanBGYm5abGJHOXdaVDROQ2c9PTwvQmFzZS0wLTE3X0RhdGE+DQo8QmFzZS0wLTE3X0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xN19IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xOF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xOF9IYXNEYXRhPg0KPEJhc2UtMC0xOF9EYXRhIGlkPSJyZWYtMjEiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eU5Ed3ZhVzUwU1VRK0RRbzhMMkV4T2tsRVNHOXNaR1Z5UGcwS1BDOVRUMEZRTFVWT1ZqcENiMlI1UGcwS1BDOVRUMEZRTFVWT1ZqcEZiblpsYkc5d1pUNE5DZz09PC9CYXNlLTAtMThfRGF0YT4NCjxCYXNlLTAtMThfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTE4X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTE5X0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTE5X0hhc0RhdGE+DQo8QmFzZS0wLTE5X0RhdGEgaWQ9InJlZi0yMiI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR5TlR3dmFXNTBTVVErRFFvOEwyRXhPa2xFU0c5c1pHVnlQZzBLUEM5VFQwRlFMVVZPVmpwQ2IyUjVQZzBLUEM5VFQwRlFMVVZPVmpwRmJuWmxiRzl3WlQ0TkNnPT08L0Jhc2UtMC0xOV9EYXRhPg0KPEJhc2UtMC0xOV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTlfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMjBfSGFzRGF0YT50cnVlPC9CYXNlLTAtMjBfSGFzRGF0YT4NCjxCYXNlLTAtMjBfRGF0YSBpZD0icmVmLTIzIj5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHlOand2YVc1MFNVUStEUW84TDJFeE9rbEVTRzlzWkdWeVBnMEtQQzlUVDBGUUxVVk9WanBDYjJSNVBnMEtQQzlUVDBGUUxVVk9WanBGYm5abGJHOXdaVDROQ2c9PTwvQmFzZS0wLTIwX0RhdGE+DQo8QmFzZS0wLTIwX0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0yMF9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0yMV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0yMV9IYXNEYXRhPg0KPEJhc2UtMC0yMV9EYXRhIGlkPSJyZWYtMjQiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eU56d3ZhVzUwU1VRK0RRbzhMMkV4T2tsRVNHOXNaR1Z5UGcwS1BDOVRUMEZRTFVWT1ZqcENiMlI1UGcwS1BDOVRUMEZRTFVWT1ZqcEZiblpsYkc5d1pUNE5DZz09PC9CYXNlLTAtMjFfRGF0YT4NCjxCYXNlLTAtMjFfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTIxX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTIyX0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTIyX0hhc0RhdGE+DQo8QmFzZS0wLTIyX0RhdGEgaWQ9InJlZi0yNSI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR5T0R3dmFXNTBTVVErRFFvOEwyRXhPa2xFU0c5c1pHVnlQZzBLUEM5VFQwRlFMVVZPVmpwQ2IyUjVQZzBLUEM5VFQwRlFMVVZPVmpwRmJuWmxiRzl3WlQ0TkNnPT08L0Jhc2UtMC0yMl9EYXRhPg0KPEJhc2UtMC0yMl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMjJfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMjNfSGFzRGF0YT50cnVlPC9CYXNlLTAtMjNfSGFzRGF0YT4NCjxCYXNlLTAtMjNfRGF0YSBpZD0icmVmLTI2Ij5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHlPVHd2YVc1MFNVUStEUW84TDJFeE9rbEVTRzlzWkdWeVBnMEtQQzlUVDBGUUxVVk9WanBDYjJSNVBnMEtQQzlUVDBGUUxVVk9WanBGYm5abGJHOXdaVDROQ2c9PTwvQmFzZS0wLTIzX0RhdGE+DQo8QmFzZS0wLTIzX0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0yM19IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0yNF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0yNF9IYXNEYXRhPg0KPEJhc2UtMC0yNF9EYXRhIGlkPSJyZWYtMjciPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ek1Ed3ZhVzUwU1VRK0RRbzhMMkV4T2tsRVNHOXNaR1Z5UGcwS1BDOVRUMEZRTFVWT1ZqcENiMlI1UGcwS1BDOVRUMEZRTFVWT1ZqcEZiblpsYkc5d1pUNE5DZz09PC9CYXNlLTAtMjRfRGF0YT4NCjxCYXNlLTAtMjRfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTI0X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTI1X0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTI1X0hhc0RhdGE+DQo8QmFzZS0wLTI1X0RhdGEgaWQ9InJlZi0yOCI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR6TVR3dmFXNTBTVVErRFFvOEwyRXhPa2xFU0c5c1pHVnlQZzBLUEM5VFQwRlFMVVZPVmpwQ2IyUjVQZzBLUEM5VFQwRlFMVVZPVmpwRmJuWmxiRzl3WlQ0TkNnPT08L0Jhc2UtMC0yNV9EYXRhPg0KPEJhc2UtMC0yNV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMjVfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMjZfSGFzRGF0YT50cnVlPC9CYXNlLTAtMjZfSGFzRGF0YT4NCjxCYXNlLTAtMjZfRGF0YSBpZD0icmVmLTI5Ij5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHpNand2YVc1MFNVUStEUW84TDJFeE9rbEVTRzlzWkdWeVBnMEtQQzlUVDBGUUxVVk9WanBDYjJSNVBnMEtQQzlUVDBGUUxVVk9WanBGYm5abGJHOXdaVDROQ2c9PTwvQmFzZS0wLTI2X0RhdGE+DQo8QmFzZS0wLTI2X0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0yNl9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0yN19IYXNEYXRhPnRydWU8L0Jhc2UtMC0yN19IYXNEYXRhPg0KPEJhc2UtMC0yN19EYXRhIGlkPSJyZWYtMzAiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ek16d3ZhVzUwU1VRK0RRbzhMMkV4T2tsRVNHOXNaR1Z5UGcwS1BDOVRUMEZRTFVWT1ZqcENiMlI1UGcwS1BDOVRUMEZRTFVWT1ZqcEZiblpsYkc5d1pUNE5DZz09PC9CYXNlLTAtMjdfRGF0YT4NCjxCYXNlLTAtMjdfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTI3X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTI4X0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTI4X0hhc0RhdGE+DQo8QmFzZS0wLTI4X0RhdGEgaWQ9InJlZi0zMSI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR6TkR3dmFXNTBTVVErRFFvOEwyRXhPa2xFU0c5c1pHVnlQZzBLUEM5VFQwRlFMVVZPVmpwQ2IyUjVQZzBLUEM5VFQwRlFMVVZPVmpwRmJuWmxiRzl3WlQ0TkNnPT08L0Jhc2UtMC0yOF9EYXRhPg0KPEJhc2UtMC0yOF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMjhfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMjlfSGFzRGF0YT50cnVlPC9CYXNlLTAtMjlfSGFzRGF0YT4NCjxCYXNlLTAtMjlfRGF0YSBpZD0icmVmLTMyIj5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHpOVHd2YVc1MFNVUStEUW84TDJFeE9rbEVTRzlzWkdWeVBnMEtQQzlUVDBGUUxVVk9WanBDYjJSNVBnMEtQQzlUVDBGUUxVVk9WanBGYm5abGJHOXdaVDROQ2c9PTwvQmFzZS0wLTI5X0RhdGE+DQo8QmFzZS0wLTI5X0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0yOV9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0zMF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0zMF9IYXNEYXRhPg0KPEJhc2UtMC0zMF9EYXRhIGlkPSJyZWYtMzMiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ek5qd3ZhVzUwU1VRK0RRbzhMMkV4T2tsRVNHOXNaR1Z5UGcwS1BDOVRUMEZRTFVWT1ZqcENiMlI1UGcwS1BDOVRUMEZRTFVWT1ZqcEZiblpsYkc5d1pUNE5DZz09PC9CYXNlLTAtMzBfRGF0YT4NCjxCYXNlLTAtMzBfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTMwX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTMxX0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTMxX0hhc0RhdGE+DQo8QmFzZS0wLTMxX0RhdGEgaWQ9InJlZi0zNCI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR6Tnp3dmFXNTBTVVErRFFvOEwyRXhPa2xFU0c5c1pHVnlQZzBLUEM5VFQwRlFMVVZPVmpwQ2IyUjVQZzBLUEM5VFQwRlFMVVZPVmpwRmJuWmxiRzl3WlQ0TkNnPT08L0Jhc2UtMC0zMV9EYXRhPg0KPEJhc2UtMC0zMV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMzFfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMzJfSGFzRGF0YT50cnVlPC9CYXNlLTAtMzJfSGFzRGF0YT4NCjxCYXNlLTAtMzJfRGF0YSBpZD0icmVmLTM1Ij5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHpPRHd2YVc1MFNVUStEUW84TDJFeE9rbEVTRzlzWkdWeVBnMEtQQzlUVDBGUUxVVk9WanBDYjJSNVBnMEtQQzlUVDBGUUxVVk9WanBGYm5abGJHOXdaVDROQ2c9PTwvQmFzZS0wLTMyX0RhdGE+DQo8QmFzZS0wLTMyX0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0zMl9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0zM19IYXNEYXRhPnRydWU8L0Jhc2UtMC0zM19IYXNEYXRhPg0KPEJhc2UtMC0zM19EYXRhIGlkPSJyZWYtMzYiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ek9Ud3ZhVzUwU1VRK0RRbzhMMkV4T2tsRVNHOXNaR1Z5UGcwS1BDOVRUMEZRTFVWT1ZqcENiMlI1UGcwS1BDOVRUMEZRTFVWT1ZqcEZiblpsYkc5d1pUNE5DZz09PC9CYXNlLTAtMzNfRGF0YT4NCjxCYXNlLTAtMzNfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTMzX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTM0X0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTM0X0hhc0RhdGE+DQo8QmFzZS0wLTM0X0RhdGEgaWQ9InJlZi0zNyI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDQwTUR3dmFXNTBTVVErRFFvOEwyRXhPa2xFU0c5c1pHVnlQZzBLUEM5VFQwRlFMVVZPVmpwQ2IyUjVQZzBLUEM5VFQwRlFMVVZPVmpwRmJuWmxiRzl3WlQ0TkNnPT08L0Jhc2UtMC0zNF9EYXRhPg0KPEJhc2UtMC0zNF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMzRfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMzVfSGFzRGF0YT50cnVlPC9CYXNlLTAtMzVfSGFzRGF0YT4NCjxCYXNlLTAtMzVfRGF0YSBpZD0icmVmLTM4Ij5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENDBNVHd2YVc1MFNVUStEUW84TDJFeE9rbEVTRzlzWkdWeVBnMEtQQzlUVDBGUUxVVk9WanBDYjJSNVBnMEtQQzlUVDBGUUxVVk9WanBGYm5abGJHOXdaVDROQ2c9PTwvQmFzZS0wLTM1X0RhdGE+DQo8QmFzZS0wLTM1X0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0zNV9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0zNl9IYXNEYXRhPnRydWU8L0Jhc2UtMC0zNl9IYXNEYXRhPg0KPEJhc2UtMC0zNl9EYXRhIGlkPSJyZWYtMzkiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ME1qd3ZhVzUwU1VRK0RRbzhMMkV4T2tsRVNHOXNaR1Z5UGcwS1BDOVRUMEZRTFVWT1ZqcENiMlI1UGcwS1BDOVRUMEZRTFVWT1ZqcEZiblpsYkc5d1pUNE5DZz09PC9CYXNlLTAtMzZfRGF0YT4NCjxCYXNlLTAtMzZfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTM2X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTM3X0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTM3X0hhc0RhdGE+DQo8QmFzZS0wLTM3X0RhdGEgaWQ9InJlZi00MCI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDQwTXp3dmFXNTBTVVErRFFvOEwyRXhPa2xFU0c5c1pHVnlQZzBLUEM5VFQwRlFMVVZPVmpwQ2IyUjVQZzBLUEM5VFQwRlFMVVZPVmpwRmJuWmxiRzl3WlQ0TkNnPT08L0Jhc2UtMC0zN19EYXRhPg0KPEJhc2UtMC0zN19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMzdfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMzhfSGFzRGF0YT50cnVlPC9CYXNlLTAtMzhfSGFzRGF0YT4NCjxCYXNlLTAtMzhfRGF0YSBpZD0icmVmLTQxIj5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENDBORHd2YVc1MFNVUStEUW84TDJFeE9rbEVTRzlzWkdWeVBnMEtQQzlUVDBGUUxVVk9WanBDYjJSNVBnMEtQQzlUVDBGUUxVVk9WanBGYm5abGJHOXdaVDROQ2c9PTwvQmFzZS0wLTM4X0RhdGE+DQo8QmFzZS0wLTM4X0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0zOF9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0zOV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0zOV9IYXNEYXRhPg0KPEJhc2UtMC0zOV9EYXRhIGlkPSJyZWYtNDIiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ME5Ud3ZhVzUwU1VRK0RRbzhMMkV4T2tsRVNHOXNaR1Z5UGcwS1BDOVRUMEZRTFVWT1ZqcENiMlI1UGcwS1BDOVRUMEZRTFVWT1ZqcEZiblpsYkc5d1pUNE5DZz09PC9CYXNlLTAtMzlfRGF0YT4NCjxCYXNlLTAtMzlfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTM5X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTQwX0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTQwX0hhc0RhdGE+DQo8QmFzZS0wLTQwX0RhdGEgaWQ9InJlZi00MyI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDQwTmp3dmFXNTBTVVErRFFvOEwyRXhPa2xFU0c5c1pHVnlQZzBLUEM5VFQwRlFMVVZPVmpwQ2IyUjVQZzBLUEM5VFQwRlFMVVZPVmpwRmJuWmxiRzl3WlQ0TkNnPT08L0Jhc2UtMC00MF9EYXRhPg0KPEJhc2UtMC00MF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNDBfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtNDFfSGFzRGF0YT50cnVlPC9CYXNlLTAtNDFfSGFzRGF0YT4NCjxCYXNlLTAtNDFfRGF0YSBpZD0icmVmLTQ0Ij5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENDBOend2YVc1MFNVUStEUW84TDJFeE9rbEVTRzlzWkdWeVBnMEtQQzlUVDBGUUxVVk9WanBDYjJSNVBnMEtQQzlUVDBGUUxVVk9WanBGYm5abGJHOXdaVDROQ2c9PTwvQmFzZS0wLTQxX0RhdGE+DQo8QmFzZS0wLTQxX0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC00MV9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC00Ml9IYXNEYXRhPnRydWU8L0Jhc2UtMC00Ml9IYXNEYXRhPg0KPEJhc2UtMC00Ml9EYXRhIGlkPSJyZWYtNDUiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ME9Ed3ZhVzUwU1VRK0RRbzhMMkV4T2tsRVNHOXNaR1Z5UGcwS1BDOVRUMEZRTFVWT1ZqcENiMlI1UGcwS1BDOVRUMEZRTFVWT1ZqcEZiblpsYkc5d1pUNE5DZz09PC9CYXNlLTAtNDJfRGF0YT4NCjxCYXNlLTAtNDJfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTQyX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTQzX0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTQzX0hhc0RhdGE+DQo8QmFzZS0wLTQzX0RhdGEgaWQ9InJlZi00NiI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDQwT1R3dmFXNTBTVVErRFFvOEwyRXhPa2xFU0c5c1pHVnlQZzBLUEM5VFQwRlFMVVZPVmpwQ2IyUjVQZzBLUEM5VFQwRlFMVVZPVmpwRmJuWmxiRzl3WlQ0TkNnPT08L0Jhc2UtMC00M19EYXRhPg0KPEJhc2UtMC00M19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNDNfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtNDRfSGFzRGF0YT50cnVlPC9CYXNlLTAtNDRfSGFzRGF0YT4NCjxCYXNlLTAtNDRfRGF0YSBpZD0icmVmLTQ3Ij5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENDFNRHd2YVc1MFNVUStEUW84TDJFeE9rbEVTRzlzWkdWeVBnMEtQQzlUVDBGUUxVVk9WanBDYjJSNVBnMEtQQzlUVDBGUUxVVk9WanBGYm5abGJHOXdaVDROQ2c9PTwvQmFzZS0wLTQ0X0RhdGE+DQo8QmFzZS0wLTQ0X0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC00NF9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC00NV9IYXNEYXRhPnRydWU8L0Jhc2UtMC00NV9IYXNEYXRhPg0KPEJhc2UtMC00NV9EYXRhIGlkPSJyZWYtNDgiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0MU1Ud3ZhVzUwU1VRK0RRbzhMMkV4T2tsRVNHOXNaR1Z5UGcwS1BDOVRUMEZRTFVWT1ZqcENiMlI1UGcwS1BDOVRUMEZRTFVWT1ZqcEZiblpsYkc5d1pUNE5DZz09PC9CYXNlLTAtNDVfRGF0YT4NCjxCYXNlLTAtNDVfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTQ1X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTQ2X0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTQ2X0hhc0RhdGE+DQo8QmFzZS0wLTQ2X0RhdGEgaWQ9InJlZi00OSI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDQxTWp3dmFXNTBTVVErRFFvOEwyRXhPa2xFU0c5c1pHVnlQZzBLUEM5VFQwRlFMVVZPVmpwQ2IyUjVQZzBLUEM5VFQwRlFMVVZPVmpwRmJuWmxiRzl3WlQ0TkNnPT08L0Jhc2UtMC00Nl9EYXRhPg0KPEJhc2UtMC00Nl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNDZfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtNDdfSGFzRGF0YT50cnVlPC9CYXNlLTAtNDdfSGFzRGF0YT4NCjxCYXNlLTAtNDdfRGF0YSBpZD0icmVmLTUwIj5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENDFNend2YVc1MFNVUStEUW84TDJFeE9rbEVTRzlzWkdWeVBnMEtQQzlUVDBGUUxVVk9WanBDYjJSNVBnMEtQQzlUVDBGUUxVVk9WanBGYm5abGJHOXdaVDROQ2c9PTwvQmFzZS0wLTQ3X0RhdGE+DQo8QmFzZS0wLTQ3X0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC00N19IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC00OF9IYXNEYXRhPnRydWU8L0Jhc2UtMC00OF9IYXNEYXRhPg0KPEJhc2UtMC00OF9EYXRhIGlkPSJyZWYtNTEiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0MU5Ed3ZhVzUwU1VRK0RRbzhMMkV4T2tsRVNHOXNaR1Z5UGcwS1BDOVRUMEZRTFVWT1ZqcENiMlI1UGcwS1BDOVRUMEZRTFVWT1ZqcEZiblpsYkc5d1pUNE5DZz09PC9CYXNlLTAtNDhfRGF0YT4NCjxCYXNlLTAtNDhfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTQ4X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTQ5X0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTQ5X0hhc0RhdGE+DQo8QmFzZS0wLTQ5X0RhdGEgaWQ9InJlZi01MiI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDQxTlR3dmFXNTBTVVErRFFvOEwyRXhPa2xFU0c5c1pHVnlQZzBLUEM5VFQwRlFMVVZPVmpwQ2IyUjVQZzBLUEM5VFQwRlFMVVZPVmpwRmJuWmxiRzl3WlQ0TkNnPT08L0Jhc2UtMC00OV9EYXRhPg0KPEJhc2UtMC00OV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNDlfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtNTBfSGFzRGF0YT50cnVlPC9CYXNlLTAtNTBfSGFzRGF0YT4NCjxCYXNlLTAtNTBfRGF0YSBpZD0icmVmLTUzIj5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENDFOand2YVc1MFNVUStEUW84TDJFeE9rbEVTRzlzWkdWeVBnMEtQQzlUVDBGUUxVVk9WanBDYjJSNVBnMEtQQzlUVDBGUUxVVk9WanBGYm5abGJHOXdaVDROQ2c9PTwvQmFzZS0wLTUwX0RhdGE+DQo8QmFzZS0wLTUwX0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC01MF9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC01MV9IYXNEYXRhPnRydWU8L0Jhc2UtMC01MV9IYXNEYXRhPg0KPEJhc2UtMC01MV9EYXRhIGlkPSJyZWYtNTQiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0MU56d3ZhVzUwU1VRK0RRbzhMMkV4T2tsRVNHOXNaR1Z5UGcwS1BDOVRUMEZRTFVWT1ZqcENiMlI1UGcwS1BDOVRUMEZRTFVWT1ZqcEZiblpsYkc5d1pUNE5DZz09PC9CYXNlLTAtNTFfRGF0YT4NCjxCYXNlLTAtNTFfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTUxX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTUyX0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTUyX0hhc0RhdGE+DQo8QmFzZS0wLTUyX0RhdGEgaWQ9InJlZi01NSI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDQxT0R3dmFXNTBTVVErRFFvOEwyRXhPa2xFU0c5c1pHVnlQZzBLUEM5VFQwRlFMVVZPVmpwQ2IyUjVQZzBLUEM5VFQwRlFMVVZPVmpwRmJuWmxiRzl3WlQ0TkNnPT08L0Jhc2UtMC01Ml9EYXRhPg0KPEJhc2UtMC01Ml9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNTJfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtNTNfSGFzRGF0YT50cnVlPC9CYXNlLTAtNTNfSGFzRGF0YT4NCjxCYXNlLTAtNTNfRGF0YSBpZD0icmVmLTU2Ij5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENDFPVHd2YVc1MFNVUStEUW84TDJFeE9rbEVTRzlzWkdWeVBnMEtQQzlUVDBGUUxVVk9WanBDYjJSNVBnMEtQQzlUVDBGUUxVVk9WanBGYm5abGJHOXdaVDROQ2c9PTwvQmFzZS0wLTUzX0RhdGE+DQo8QmFzZS0wLTUzX0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC01M19IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC01NF9IYXNEYXRhPnRydWU8L0Jhc2UtMC01NF9IYXNEYXRhPg0KPEJhc2UtMC01NF9EYXRhIGlkPSJyZWYtNTciPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0Mk1Ed3ZhVzUwU1VRK0RRbzhMMkV4T2tsRVNHOXNaR1Z5UGcwS1BDOVRUMEZRTFVWT1ZqcENiMlI1UGcwS1BDOVRUMEZRTFVWT1ZqcEZiblpsYkc5d1pUNE5DZz09PC9CYXNlLTAtNTRfRGF0YT4NCjxCYXNlLTAtNTRfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTU0X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTU1X0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTU1X0hhc0RhdGE+DQo8QmFzZS0wLTU1X0RhdGEgaWQ9InJlZi01OCI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDQyTVR3dmFXNTBTVVErRFFvOEwyRXhPa2xFU0c5c1pHVnlQZzBLUEM5VFQwRlFMVVZPVmpwQ2IyUjVQZzBLUEM5VFQwRlFMVVZPVmpwRmJuWmxiRzl3WlQ0TkNnPT08L0Jhc2UtMC01NV9EYXRhPg0KPEJhc2UtMC01NV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNTVfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtNTZfSGFzRGF0YT50cnVlPC9CYXNlLTAtNTZfSGFzRGF0YT4NCjxCYXNlLTAtNTZfRGF0YSBpZD0icmVmLTU5Ij5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENDJNand2YVc1MFNVUStEUW84TDJFeE9rbEVTRzlzWkdWeVBnMEtQQzlUVDBGUUxVVk9WanBDYjJSNVBnMEtQQzlUVDBGUUxVVk9WanBGYm5abGJHOXdaVDROQ2c9PTwvQmFzZS0wLTU2X0RhdGE+DQo8QmFzZS0wLTU2X0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC01Nl9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC01N19IYXNEYXRhPnRydWU8L0Jhc2UtMC01N19IYXNEYXRhPg0KPEJhc2UtMC01N19EYXRhIGlkPSJyZWYtNjAiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0Mk16d3ZhVzUwU1VRK0RRbzhMMkV4T2tsRVNHOXNaR1Z5UGcwS1BDOVRUMEZRTFVWT1ZqcENiMlI1UGcwS1BDOVRUMEZRTFVWT1ZqcEZiblpsYkc5d1pUNE5DZz09PC9CYXNlLTAtNTdfRGF0YT4NCjxCYXNlLTAtNTdfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTU3X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTU4X0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTU4X0hhc0RhdGE+DQo8QmFzZS0wLTU4X0RhdGEgaWQ9InJlZi02MSI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDQyTkR3dmFXNTBTVVErRFFvOEwyRXhPa2xFU0c5c1pHVnlQZzBLUEM5VFQwRlFMVVZPVmpwQ2IyUjVQZzBLUEM5VFQwRlFMVVZPVmpwRmJuWmxiRzl3WlQ0TkNnPT08L0Jhc2UtMC01OF9EYXRhPg0KPEJhc2UtMC01OF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNThfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtNTlfSGFzRGF0YT50cnVlPC9CYXNlLTAtNTlfSGFzRGF0YT4NCjxCYXNlLTAtNTlfRGF0YSBpZD0icmVmLTYyIj5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENDJOVHd2YVc1MFNVUStEUW84TDJFeE9rbEVTRzlzWkdWeVBnMEtQQzlUVDBGUUxVVk9WanBDYjJSNVBnMEtQQzlUVDBGUUxVVk9WanBGYm5abGJHOXdaVDROQ2c9PTwvQmFzZS0wLTU5X0RhdGE+DQo8QmFzZS0wLTU5X0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC01OV9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC02MF9IYXNEYXRhPnRydWU8L0Jhc2UtMC02MF9IYXNEYXRhPg0KPEJhc2UtMC02MF9EYXRhIGlkPSJyZWYtNjMiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0Mk5qd3ZhVzUwU1VRK0RRbzhMMkV4T2tsRVNHOXNaR1Z5UGcwS1BDOVRUMEZRTFVWT1ZqcENiMlI1UGcwS1BDOVRUMEZRTFVWT1ZqcEZiblpsYkc5d1pUNE5DZz09PC9CYXNlLTAtNjBfRGF0YT4NCjxCYXNlLTAtNjBfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTYwX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTYxX0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTYxX0hhc0RhdGE+DQo8QmFzZS0wLTYxX0RhdGEgaWQ9InJlZi02NCI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDQyTnp3dmFXNTBTVVErRFFvOEwyRXhPa2xFU0c5c1pHVnlQZzBLUEM5VFQwRlFMVVZPVmpwQ2IyUjVQZzBLUEM5VFQwRlFMVVZPVmpwRmJuWmxiRzl3WlQ0TkNnPT08L0Jhc2UtMC02MV9EYXRhPg0KPEJhc2UtMC02MV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNjFfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtNjJfSGFzRGF0YT50cnVlPC9CYXNlLTAtNjJfSGFzRGF0YT4NCjxCYXNlLTAtNjJfRGF0YSBpZD0icmVmLTY1Ij5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENDJPRHd2YVc1MFNVUStEUW84TDJFeE9rbEVTRzlzWkdWeVBnMEtQQzlUVDBGUUxVVk9WanBDYjJSNVBnMEtQQzlUVDBGUUxVVk9WanBGYm5abGJHOXdaVDROQ2c9PTwvQmFzZS0wLTYyX0RhdGE+DQo8QmFzZS0wLTYyX0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC02Ml9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC02M19IYXNEYXRhPnRydWU8L0Jhc2UtMC02M19IYXNEYXRhPg0KPEJhc2UtMC02M19EYXRhIGlkPSJyZWYtNjYiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0Mk9Ud3ZhVzUwU1VRK0RRbzhMMkV4T2tsRVNHOXNaR1Z5UGcwS1BDOVRUMEZRTFVWT1ZqcENiMlI1UGcwS1BDOVRUMEZRTFVWT1ZqcEZiblpsYkc5d1pUNE5DZz09PC9CYXNlLTAtNjNfRGF0YT4NCjxCYXNlLTAtNjNfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTYzX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTY0X0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTY0X0hhc0RhdGE+DQo8QmFzZS0wLTY0X0RhdGEgaWQ9InJlZi02NyI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDQzTUR3dmFXNTBTVVErRFFvOEwyRXhPa2xFU0c5c1pHVnlQZzBLUEM5VFQwRlFMVVZPVmpwQ2IyUjVQZzBLUEM5VFQwRlFMVVZPVmpwRmJuWmxiRzl3WlQ0TkNnPT08L0Jhc2UtMC02NF9EYXRhPg0KPEJhc2UtMC02NF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNjRfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtNjVfSGFzRGF0YT50cnVlPC9CYXNlLTAtNjVfSGFzRGF0YT4NCjxCYXNlLTAtNjVfRGF0YSBpZD0icmVmLTY4Ij5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENDNNVHd2YVc1MFNVUStEUW84TDJFeE9rbEVTRzlzWkdWeVBnMEtQQzlUVDBGUUxVVk9WanBDYjJSNVBnMEtQQzlUVDBGUUxVVk9WanBGYm5abGJHOXdaVDROQ2c9PTwvQmFzZS0wLTY1X0RhdGE+DQo8QmFzZS0wLTY1X0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC02NV9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC02Nl9IYXNEYXRhPnRydWU8L0Jhc2UtMC02Nl9IYXNEYXRhPg0KPEJhc2UtMC02Nl9EYXRhIGlkPSJyZWYtNjkiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0M01qd3ZhVzUwU1VRK0RRbzhMMkV4T2tsRVNHOXNaR1Z5UGcwS1BDOVRUMEZRTFVWT1ZqcENiMlI1UGcwS1BDOVRUMEZRTFVWT1ZqcEZiblpsYkc5d1pUNE5DZz09PC9CYXNlLTAtNjZfRGF0YT4NCjxCYXNlLTAtNjZfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTY2X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTY3X0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTY3X0hhc0RhdGE+DQo8QmFzZS0wLTY3X0RhdGEgaWQ9InJlZi03MCI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDQzTXp3dmFXNTBTVVErRFFvOEwyRXhPa2xFU0c5c1pHVnlQZzBLUEM5VFQwRlFMVVZPVmpwQ2IyUjVQZzBLUEM5VFQwRlFMVVZPVmpwRmJuWmxiRzl3WlQ0TkNnPT08L0Jhc2UtMC02N19EYXRhPg0KPEJhc2UtMC02N19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNjdfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtNjhfSGFzRGF0YT50cnVlPC9CYXNlLTAtNjhfSGFzRGF0YT4NCjxCYXNlLTAtNjhfRGF0YSBpZD0icmVmLTcxIj5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENDNORHd2YVc1MFNVUStEUW84TDJFeE9rbEVTRzlzWkdWeVBnMEtQQzlUVDBGUUxVVk9WanBDYjJSNVBnMEtQQzlUVDBGUUxVVk9WanBGYm5abGJHOXdaVDROQ2c9PTwvQmFzZS0wLTY4X0RhdGE+DQo8QmFzZS0wLTY4X0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC02OF9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC02OV9IYXNEYXRhPnRydWU8L0Jhc2UtMC02OV9IYXNEYXRhPg0KPEJhc2UtMC02OV9EYXRhIGlkPSJyZWYtNzIiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0M05Ud3ZhVzUwU1VRK0RRbzhMMkV4T2tsRVNHOXNaR1Z5UGcwS1BDOVRUMEZRTFVWT1ZqcENiMlI1UGcwS1BDOVRUMEZRTFVWT1ZqcEZiblpsYkc5d1pUNE5DZz09PC9CYXNlLTAtNjlfRGF0YT4NCjxCYXNlLTAtNjlfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTY5X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTcwX0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTcwX0hhc0RhdGE+DQo8QmFzZS0wLTcwX0RhdGEgaWQ9InJlZi03MyI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDQzTmp3dmFXNTBTVVErRFFvOEwyRXhPa2xFU0c5c1pHVnlQZzBLUEM5VFQwRlFMVVZPVmpwQ2IyUjVQZzBLUEM5VFQwRlFMVVZPVmpwRmJuWmxiRzl3WlQ0TkNnPT08L0Jhc2UtMC03MF9EYXRhPg0KPEJhc2UtMC03MF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNzBfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtNzFfSGFzRGF0YT50cnVlPC9CYXNlLTAtNzFfSGFzRGF0YT4NCjxCYXNlLTAtNzFfRGF0YSBpZD0icmVmLTc0Ij5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENDNOend2YVc1MFNVUStEUW84TDJFeE9rbEVTRzlzWkdWeVBnMEtQQzlUVDBGUUxVVk9WanBDYjJSNVBnMEtQQzlUVDBGUUxVVk9WanBGYm5abGJHOXdaVDROQ2c9PTwvQmFzZS0wLTcxX0RhdGE+DQo8QmFzZS0wLTcxX0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC03MV9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC03Ml9IYXNEYXRhPnRydWU8L0Jhc2UtMC03Ml9IYXNEYXRhPg0KPEJhc2UtMC03Ml9EYXRhIGlkPSJyZWYtNzUiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0M09Ed3ZhVzUwU1VRK0RRbzhMMkV4T2tsRVNHOXNaR1Z5UGcwS1BDOVRUMEZRTFVWT1ZqcENiMlI1UGcwS1BDOVRUMEZRTFVWT1ZqcEZiblpsYkc5d1pUNE5DZz09PC9CYXNlLTAtNzJfRGF0YT4NCjxCYXNlLTAtNzJfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTcyX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTczX0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTczX0hhc0RhdGE+DQo8QmFzZS0wLTczX0RhdGEgaWQ9InJlZi03NiI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDQzT1R3dmFXNTBTVVErRFFvOEwyRXhPa2xFU0c5c1pHVnlQZzBLUEM5VFQwRlFMVVZPVmpwQ2IyUjVQZzBLUEM5VFQwRlFMVVZPVmpwRmJuWmxiRzl3WlQ0TkNnPT08L0Jhc2UtMC03M19EYXRhPg0KPEJhc2UtMC03M19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNzNfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtNzRfSGFzRGF0YT50cnVlPC9CYXNlLTAtNzRfSGFzRGF0YT4NCjxCYXNlLTAtNzRfRGF0YSBpZD0icmVmLTc3Ij5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENDRNRHd2YVc1MFNVUStEUW84TDJFeE9rbEVTRzlzWkdWeVBnMEtQQzlUVDBGUUxVVk9WanBDYjJSNVBnMEtQQzlUVDBGUUxVVk9WanBGYm5abGJHOXdaVDROQ2c9PTwvQmFzZS0wLTc0X0RhdGE+DQo8QmFzZS0wLTc0X0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC03NF9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC03NV9IYXNEYXRhPnRydWU8L0Jhc2UtMC03NV9IYXNEYXRhPg0KPEJhc2UtMC03NV9EYXRhIGlkPSJyZWYtNzgiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NE1Ud3ZhVzUwU1VRK0RRbzhMMkV4T2tsRVNHOXNaR1Z5UGcwS1BDOVRUMEZRTFVWT1ZqcENiMlI1UGcwS1BDOVRUMEZRTFVWT1ZqcEZiblpsYkc5d1pUNE5DZz09PC9CYXNlLTAtNzVfRGF0YT4NCjxCYXNlLTAtNzVfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTc1X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTc2X0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTc2X0hhc0RhdGE+DQo8QmFzZS0wLTc2X0RhdGEgaWQ9InJlZi03OSI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDQ0TWp3dmFXNTBTVVErRFFvOEwyRXhPa2xFU0c5c1pHVnlQZzBLUEM5VFQwRlFMVVZPVmpwQ2IyUjVQZzBLUEM5VFQwRlFMVVZPVmpwRmJuWmxiRzl3WlQ0TkNnPT08L0Jhc2UtMC03Nl9EYXRhPg0KPEJhc2UtMC03Nl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNzZfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtNzdfSGFzRGF0YT50cnVlPC9CYXNlLTAtNzdfSGFzRGF0YT4NCjxCYXNlLTAtNzdfRGF0YSBpZD0icmVmLTgwIj5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENDRNend2YVc1MFNVUStEUW84TDJFeE9rbEVTRzlzWkdWeVBnMEtQQzlUVDBGUUxVVk9WanBDYjJSNVBnMEtQQzlUVDBGUUxVVk9WanBGYm5abGJHOXdaVDROQ2c9PTwvQmFzZS0wLTc3X0RhdGE+DQo8QmFzZS0wLTc3X0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC03N19IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC03OF9IYXNEYXRhPnRydWU8L0Jhc2UtMC03OF9IYXNEYXRhPg0KPEJhc2UtMC03OF9EYXRhIGlkPSJyZWYtODEiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NE5Ed3ZhVzUwU1VRK0RRbzhMMkV4T2tsRVNHOXNaR1Z5UGcwS1BDOVRUMEZRTFVWT1ZqcENiMlI1UGcwS1BDOVRUMEZRTFVWT1ZqcEZiblpsYkc5d1pUNE5DZz09PC9CYXNlLTAtNzhfRGF0YT4NCjxCYXNlLTAtNzhfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTc4X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTc5X0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTc5X0hhc0RhdGE+DQo8QmFzZS0wLTc5X0RhdGEgaWQ9InJlZi04MiI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDQ0TlR3dmFXNTBTVVErRFFvOEwyRXhPa2xFU0c5c1pHVnlQZzBLUEM5VFQwRlFMVVZPVmpwQ2IyUjVQZzBLUEM5VFQwRlFMVVZPVmpwRmJuWmxiRzl3WlQ0TkNnPT08L0Jhc2UtMC03OV9EYXRhPg0KPEJhc2UtMC03OV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNzlfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtODBfSGFzRGF0YT50cnVlPC9CYXNlLTAtODBfSGFzRGF0YT4NCjxCYXNlLTAtODBfRGF0YSBpZD0icmVmLTgzIj5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENDROand2YVc1MFNVUStEUW84TDJFeE9rbEVTRzlzWkdWeVBnMEtQQzlUVDBGUUxVVk9WanBDYjJSNVBnMEtQQzlUVDBGUUxVVk9WanBGYm5abGJHOXdaVDROQ2c9PTwvQmFzZS0wLTgwX0RhdGE+DQo8QmFzZS0wLTgwX0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC04MF9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC04MV9IYXNEYXRhPnRydWU8L0Jhc2UtMC04MV9IYXNEYXRhPg0KPEJhc2UtMC04MV9EYXRhIGlkPSJyZWYtODQiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NE56d3ZhVzUwU1VRK0RRbzhMMkV4T2tsRVNHOXNaR1Z5UGcwS1BDOVRUMEZRTFVWT1ZqcENiMlI1UGcwS1BDOVRUMEZRTFVWT1ZqcEZiblpsYkc5d1pUNE5DZz09PC9CYXNlLTAtODFfRGF0YT4NCjxCYXNlLTAtODFfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTgxX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTgyX0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTgyX0hhc0RhdGE+DQo8QmFzZS0wLTgyX0RhdGEgaWQ9InJlZi04NSI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDQ0T0R3dmFXNTBTVVErRFFvOEwyRXhPa2xFU0c5c1pHVnlQZzBLUEM5VFQwRlFMVVZPVmpwQ2IyUjVQZzBLUEM5VFQwRlFMVVZPVmpwRmJuWmxiRzl3WlQ0TkNnPT08L0Jhc2UtMC04Ml9EYXRhPg0KPEJhc2UtMC04Ml9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtODJfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtODNfSGFzRGF0YT50cnVlPC9CYXNlLTAtODNfSGFzRGF0YT4NCjxCYXNlLTAtODNfRGF0YSBpZD0icmVmLTg2Ij5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENDRPVHd2YVc1MFNVUStEUW84TDJFeE9rbEVTRzlzWkdWeVBnMEtQQzlUVDBGUUxVVk9WanBDYjJSNVBnMEtQQzlUVDBGUUxVVk9WanBGYm5abGJHOXdaVDROQ2c9PTwvQmFzZS0wLTgzX0RhdGE+DQo8QmFzZS0wLTgzX0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC04M19IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC04NF9IYXNEYXRhPnRydWU8L0Jhc2UtMC04NF9IYXNEYXRhPg0KPEJhc2UtMC04NF9EYXRhIGlkPSJyZWYtODciPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NU1Ed3ZhVzUwU1VRK0RRbzhMMkV4T2tsRVNHOXNaR1Z5UGcwS1BDOVRUMEZRTFVWT1ZqcENiMlI1UGcwS1BDOVRUMEZRTFVWT1ZqcEZiblpsYkc5d1pUNE5DZz09PC9CYXNlLTAtODRfRGF0YT4NCjxCYXNlLTAtODRfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTg0X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTg1X0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTg1X0hhc0RhdGE+DQo8QmFzZS0wLTg1X0RhdGEgaWQ9InJlZi04OCI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDQ1TVR3dmFXNTBTVVErRFFvOEwyRXhPa2xFU0c5c1pHVnlQZzBLUEM5VFQwRlFMVVZPVmpwQ2IyUjVQZzBLUEM5VFQwRlFMVVZPVmpwRmJuWmxiRzl3WlQ0TkNnPT08L0Jhc2UtMC04NV9EYXRhPg0KPEJhc2UtMC04NV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtODVfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtODZfSGFzRGF0YT50cnVlPC9CYXNlLTAtODZfSGFzRGF0YT4NCjxCYXNlLTAtODZfRGF0YSBpZD0icmVmLTg5Ij5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENDVNand2YVc1MFNVUStEUW84TDJFeE9rbEVTRzlzWkdWeVBnMEtQQzlUVDBGUUxVVk9WanBDYjJSNVBnMEtQQzlUVDBGUUxVVk9WanBGYm5abGJHOXdaVDROQ2c9PTwvQmFzZS0wLTg2X0RhdGE+DQo8QmFzZS0wLTg2X0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC04Nl9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC04N19IYXNEYXRhPnRydWU8L0Jhc2UtMC04N19IYXNEYXRhPg0KPEJhc2UtMC04N19EYXRhIGlkPSJyZWYtOTAiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NU16d3ZhVzUwU1VRK0RRbzhMMkV4T2tsRVNHOXNaR1Z5UGcwS1BDOVRUMEZRTFVWT1ZqcENiMlI1UGcwS1BDOVRUMEZRTFVWT1ZqcEZiblpsYkc5d1pUNE5DZz09PC9CYXNlLTAtODdfRGF0YT4NCjxCYXNlLTAtODdfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTg3X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTg4X0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTg4X0hhc0RhdGE+DQo8QmFzZS0wLTg4X0RhdGEgaWQ9InJlZi05MSI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDQ1TkR3dmFXNTBTVVErRFFvOEwyRXhPa2xFU0c5c1pHVnlQZzBLUEM5VFQwRlFMVVZPVmpwQ2IyUjVQZzBLUEM5VFQwRlFMVVZPVmpwRmJuWmxiRzl3WlQ0TkNnPT08L0Jhc2UtMC04OF9EYXRhPg0KPEJhc2UtMC04OF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtODhfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtODlfSGFzRGF0YT50cnVlPC9CYXNlLTAtODlfSGFzRGF0YT4NCjxCYXNlLTAtODlfRGF0YSBpZD0icmVmLTkyIj5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENDVOVHd2YVc1MFNVUStEUW84TDJFeE9rbEVTRzlzWkdWeVBnMEtQQzlUVDBGUUxVVk9WanBDYjJSNVBnMEtQQzlUVDBGUUxVVk9WanBGYm5abGJHOXdaVDROQ2c9PTwvQmFzZS0wLTg5X0RhdGE+DQo8QmFzZS0wLTg5X0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC04OV9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC05MF9IYXNEYXRhPnRydWU8L0Jhc2UtMC05MF9IYXNEYXRhPg0KPEJhc2UtMC05MF9EYXRhIGlkPSJyZWYtOTMiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NU5qd3ZhVzUwU1VRK0RRbzhMMkV4T2tsRVNHOXNaR1Z5UGcwS1BDOVRUMEZRTFVWT1ZqcENiMlI1UGcwS1BDOVRUMEZRTFVWT1ZqcEZiblpsYkc5d1pUNE5DZz09PC9CYXNlLTAtOTBfRGF0YT4NCjxCYXNlLTAtOTBfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTkwX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTkxX0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTkxX0hhc0RhdGE+DQo8QmFzZS0wLTkxX0RhdGEgaWQ9InJlZi05NCI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDQ1Tnp3dmFXNTBTVVErRFFvOEwyRXhPa2xFU0c5c1pHVnlQZzBLUEM5VFQwRlFMVVZPVmpwQ2IyUjVQZzBLUEM5VFQwRlFMVVZPVmpwRmJuWmxiRzl3WlQ0TkNnPT08L0Jhc2UtMC05MV9EYXRhPg0KPEJhc2UtMC05MV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtOTFfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtOTJfSGFzRGF0YT50cnVlPC9CYXNlLTAtOTJfSGFzRGF0YT4NCjxCYXNlLTAtOTJfRGF0YSBpZD0icmVmLTk1Ij5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENDVPRHd2YVc1MFNVUStEUW84TDJFeE9rbEVTRzlzWkdWeVBnMEtQQzlUVDBGUUxVVk9WanBDYjJSNVBnMEtQQzlUVDBGUUxVVk9WanBGYm5abGJHOXdaVDROQ2c9PTwvQmFzZS0wLTkyX0RhdGE+DQo8QmFzZS0wLTkyX0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC05Ml9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC05M19IYXNEYXRhPnRydWU8L0Jhc2UtMC05M19IYXNEYXRhPg0KPEJhc2UtMC05M19EYXRhIGlkPSJyZWYtOTYiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NU9Ud3ZhVzUwU1VRK0RRbzhMMkV4T2tsRVNHOXNaR1Z5UGcwS1BDOVRUMEZRTFVWT1ZqcENiMlI1UGcwS1BDOVRUMEZRTFVWT1ZqcEZiblpsYkc5d1pUNE5DZz09PC9CYXNlLTAtOTNfRGF0YT4NCjxCYXNlLTAtOTNfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTkzX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTk0X0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTk0X0hhc0RhdGE+DQo8QmFzZS0wLTk0X0RhdGEgaWQ9InJlZi05NyI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TURBOEwybHVkRWxFUGcwS1BDOWhNVHBKUkVodmJHUmxjajROQ2p3dlUwOUJVQzFGVGxZNlFtOWtlVDROQ2p3dlUwOUJVQzFGVGxZNlJXNTJaV3h2Y0dVK0RRbz08L0Jhc2UtMC05NF9EYXRhPg0KPEJhc2UtMC05NF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtOTRfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtOTVfSGFzRGF0YT50cnVlPC9CYXNlLTAtOTVfSGFzRGF0YT4NCjxCYXNlLTAtOTVfRGF0YSBpZD0icmVmLTk4Ij5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNREU4TDJsdWRFbEVQZzBLUEM5aE1UcEpSRWh2YkdSbGNqNE5Dand2VTA5QlVDMUZUbFk2UW05a2VUNE5Dand2VTA5QlVDMUZUbFk2Ulc1MlpXeHZjR1UrRFFvPTwvQmFzZS0wLTk1X0RhdGE+DQo8QmFzZS0wLTk1X0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC05NV9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC05Nl9IYXNEYXRhPnRydWU8L0Jhc2UtMC05Nl9IYXNEYXRhPg0KPEJhc2UtMC05Nl9EYXRhIGlkPSJyZWYtOTkiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE1ESThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtOTZfRGF0YT4NCjxCYXNlLTAtOTZfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTk2X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTk3X0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTk3X0hhc0RhdGE+DQo8QmFzZS0wLTk3X0RhdGEgaWQ9InJlZi0xMDAiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE1ETThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtOTdfRGF0YT4NCjxCYXNlLTAtOTdfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTk3X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTk4X0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTk4X0hhc0RhdGE+DQo8QmFzZS0wLTk4X0RhdGEgaWQ9InJlZi0xMDEiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE1EUThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtOThfRGF0YT4NCjxCYXNlLTAtOThfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTk4X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTk5X0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTk5X0hhc0RhdGE+DQo8QmFzZS0wLTk5X0RhdGEgaWQ9InJlZi0xMDIiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE1EVThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtOTlfRGF0YT4NCjxCYXNlLTAtOTlfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTk5X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEwMF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMDBfSGFzRGF0YT4NCjxCYXNlLTAtMTAwX0RhdGEgaWQ9InJlZi0xMDMiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE1EWThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMTAwX0RhdGE+DQo8QmFzZS0wLTEwMF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTAwX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEwMV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMDFfSGFzRGF0YT4NCjxCYXNlLTAtMTAxX0RhdGEgaWQ9InJlZi0xMDQiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE1EYzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMTAxX0RhdGE+DQo8QmFzZS0wLTEwMV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTAxX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEwMl9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMDJfSGFzRGF0YT4NCjxCYXNlLTAtMTAyX0RhdGEgaWQ9InJlZi0xMDUiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE1EZzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMTAyX0RhdGE+DQo8QmFzZS0wLTEwMl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTAyX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEwM19IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMDNfSGFzRGF0YT4NCjxCYXNlLTAtMTAzX0RhdGEgaWQ9InJlZi0xMDYiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE1EazhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMTAzX0RhdGE+DQo8QmFzZS0wLTEwM19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTAzX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEwNF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMDRfSGFzRGF0YT4NCjxCYXNlLTAtMTA0X0RhdGEgaWQ9InJlZi0xMDciPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE1UQThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMTA0X0RhdGE+DQo8QmFzZS0wLTEwNF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTA0X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEwNV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMDVfSGFzRGF0YT4NCjxCYXNlLTAtMTA1X0RhdGEgaWQ9InJlZi0xMDgiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE1URThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMTA1X0RhdGE+DQo8QmFzZS0wLTEwNV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTA1X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEwNl9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMDZfSGFzRGF0YT4NCjxCYXNlLTAtMTA2X0RhdGEgaWQ9InJlZi0xMDkiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE1USThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMTA2X0RhdGE+DQo8QmFzZS0wLTEwNl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTA2X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEwN19IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMDdfSGFzRGF0YT4NCjxCYXNlLTAtMTA3X0RhdGEgaWQ9InJlZi0xMTAiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE1UTThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMTA3X0RhdGE+DQo8QmFzZS0wLTEwN19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTA3X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEwOF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMDhfSGFzRGF0YT4NCjxCYXNlLTAtMTA4X0RhdGEgaWQ9InJlZi0xMTEiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE1UUThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMTA4X0RhdGE+DQo8QmFzZS0wLTEwOF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTA4X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEwOV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMDlfSGFzRGF0YT4NCjxCYXNlLTAtMTA5X0RhdGEgaWQ9InJlZi0xMTIiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE1UVThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMTA5X0RhdGE+DQo8QmFzZS0wLTEwOV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTA5X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTExMF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMTBfSGFzRGF0YT4NCjxCYXNlLTAtMTEwX0RhdGEgaWQ9InJlZi0xMTMiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE1UWThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMTEwX0RhdGE+DQo8QmFzZS0wLTExMF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTEwX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTExMV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMTFfSGFzRGF0YT4NCjxCYXNlLTAtMTExX0RhdGEgaWQ9InJlZi0xMTQiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE1UYzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMTExX0RhdGE+DQo8QmFzZS0wLTExMV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTExX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTExMl9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMTJfSGFzRGF0YT4NCjxCYXNlLTAtMTEyX0RhdGEgaWQ9InJlZi0xMTUiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE1UZzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMTEyX0RhdGE+DQo8QmFzZS0wLTExMl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTEyX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTExM19IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMTNfSGFzRGF0YT4NCjxCYXNlLTAtMTEzX0RhdGEgaWQ9InJlZi0xMTYiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE1UazhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMTEzX0RhdGE+DQo8QmFzZS0wLTExM19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTEzX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTExNF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMTRfSGFzRGF0YT4NCjxCYXNlLTAtMTE0X0RhdGEgaWQ9InJlZi0xMTciPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE1qQThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMTE0X0RhdGE+DQo8QmFzZS0wLTExNF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTE0X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTExNV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMTVfSGFzRGF0YT4NCjxCYXNlLTAtMTE1X0RhdGEgaWQ9InJlZi0xMTgiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE1qRThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMTE1X0RhdGE+DQo8QmFzZS0wLTExNV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTE1X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTExNl9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMTZfSGFzRGF0YT4NCjxCYXNlLTAtMTE2X0RhdGEgaWQ9InJlZi0xMTkiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE1qSThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMTE2X0RhdGE+DQo8QmFzZS0wLTExNl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTE2X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTExN19IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMTdfSGFzRGF0YT4NCjxCYXNlLTAtMTE3X0RhdGEgaWQ9InJlZi0xMjAiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE1qTThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMTE3X0RhdGE+DQo8QmFzZS0wLTExN19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTE3X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTExOF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMThfSGFzRGF0YT4NCjxCYXNlLTAtMTE4X0RhdGEgaWQ9InJlZi0xMjEiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE1qUThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMTE4X0RhdGE+DQo8QmFzZS0wLTExOF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTE4X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTExOV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMTlfSGFzRGF0YT4NCjxCYXNlLTAtMTE5X0RhdGEgaWQ9InJlZi0xMjIiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE1qVThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMTE5X0RhdGE+DQo8QmFzZS0wLTExOV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTE5X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEyMF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMjBfSGFzRGF0YT4NCjxCYXNlLTAtMTIwX0RhdGEgaWQ9InJlZi0xMjMiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE1qWThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMTIwX0RhdGE+DQo8QmFzZS0wLTEyMF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTIwX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEyMV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMjFfSGFzRGF0YT4NCjxCYXNlLTAtMTIxX0RhdGEgaWQ9InJlZi0xMjQiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE1qYzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMTIxX0RhdGE+DQo8QmFzZS0wLTEyMV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTIxX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEyMl9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMjJfSGFzRGF0YT4NCjxCYXNlLTAtMTIyX0RhdGEgaWQ9InJlZi0xMjUiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE1qZzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMTIyX0RhdGE+DQo8QmFzZS0wLTEyMl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTIyX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEyM19IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMjNfSGFzRGF0YT4NCjxCYXNlLTAtMTIzX0RhdGEgaWQ9InJlZi0xMjYiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE1qazhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMTIzX0RhdGE+DQo8QmFzZS0wLTEyM19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTIzX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEyNF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMjRfSGFzRGF0YT4NCjxCYXNlLTAtMTI0X0RhdGEgaWQ9InJlZi0xMjciPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE16QThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMTI0X0RhdGE+DQo8QmFzZS0wLTEyNF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTI0X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEyNV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMjVfSGFzRGF0YT4NCjxCYXNlLTAtMTI1X0RhdGEgaWQ9InJlZi0xMjgiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE16RThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMTI1X0RhdGE+DQo8QmFzZS0wLTEyNV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTI1X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEyNl9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMjZfSGFzRGF0YT4NCjxCYXNlLTAtMTI2X0RhdGEgaWQ9InJlZi0xMjkiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE16SThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMTI2X0RhdGE+DQo8QmFzZS0wLTEyNl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTI2X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEyN19IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMjdfSGFzRGF0YT4NCjxCYXNlLTAtMTI3X0RhdGEgaWQ9InJlZi0xMzAiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE16TThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMTI3X0RhdGE+DQo8QmFzZS0wLTEyN19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTI3X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEyOF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMjhfSGFzRGF0YT4NCjxCYXNlLTAtMTI4X0RhdGEgaWQ9InJlZi0xMzEiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE16UThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMTI4X0RhdGE+DQo8QmFzZS0wLTEyOF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTI4X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEyOV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMjlfSGFzRGF0YT4NCjxCYXNlLTAtMTI5X0RhdGEgaWQ9InJlZi0xMzIiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE16VThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMTI5X0RhdGE+DQo8QmFzZS0wLTEyOV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTI5X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEzMF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMzBfSGFzRGF0YT4NCjxCYXNlLTAtMTMwX0RhdGEgaWQ9InJlZi0xMzMiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE16WThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMTMwX0RhdGE+DQo8QmFzZS0wLTEzMF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTMwX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEzMV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMzFfSGFzRGF0YT4NCjxCYXNlLTAtMTMxX0RhdGEgaWQ9InJlZi0xMzQiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE16YzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMTMxX0RhdGE+DQo8QmFzZS0wLTEzMV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTMxX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEzMl9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMzJfSGFzRGF0YT4NCjxCYXNlLTAtMTMyX0RhdGEgaWQ9InJlZi0xMzUiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE16ZzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMTMyX0RhdGE+DQo8QmFzZS0wLTEzMl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTMyX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEzM19IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMzNfSGFzRGF0YT4NCjxCYXNlLTAtMTMzX0RhdGEgaWQ9InJlZi0xMzYiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE16azhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMTMzX0RhdGE+DQo8QmFzZS0wLTEzM19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTMzX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEzNF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMzRfSGFzRGF0YT4NCjxCYXNlLTAtMTM0X0RhdGEgaWQ9InJlZi0xMzciPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE5EQThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMTM0X0RhdGE+DQo8QmFzZS0wLTEzNF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTM0X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEzNV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMzVfSGFzRGF0YT4NCjxCYXNlLTAtMTM1X0RhdGEgaWQ9InJlZi0xMzgiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE5ERThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMTM1X0RhdGE+DQo8QmFzZS0wLTEzNV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTM1X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEzNl9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMzZfSGFzRGF0YT4NCjxCYXNlLTAtMTM2X0RhdGEgaWQ9InJlZi0xMzkiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE5ESThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMTM2X0RhdGE+DQo8QmFzZS0wLTEzNl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTM2X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEzN19IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMzdfSGFzRGF0YT4NCjxCYXNlLTAtMTM3X0RhdGEgaWQ9InJlZi0xNDAiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE5ETThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMTM3X0RhdGE+DQo8QmFzZS0wLTEzN19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTM3X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEzOF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMzhfSGFzRGF0YT4NCjxCYXNlLTAtMTM4X0RhdGEgaWQ9InJlZi0xNDEiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE5EUThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMTM4X0RhdGE+DQo8QmFzZS0wLTEzOF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTM4X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEzOV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMzlfSGFzRGF0YT4NCjxCYXNlLTAtMTM5X0RhdGEgaWQ9InJlZi0xNDIiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE5EVThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMTM5X0RhdGE+DQo8QmFzZS0wLTEzOV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTM5X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTE0MF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xNDBfSGFzRGF0YT4NCjxCYXNlLTAtMTQwX0RhdGEgaWQ9InJlZi0xNDMiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE5EWThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMTQwX0RhdGE+DQo8QmFzZS0wLTE0MF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTQwX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTE0MV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xNDFfSGFzRGF0YT4NCjxCYXNlLTAtMTQxX0RhdGEgaWQ9InJlZi0xNDQiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE5EYzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMTQxX0RhdGE+DQo8QmFzZS0wLTE0MV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTQxX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTE0Ml9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xNDJfSGFzRGF0YT4NCjxCYXNlLTAtMTQyX0RhdGEgaWQ9InJlZi0xNDUiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE5EZzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMTQyX0RhdGE+DQo8QmFzZS0wLTE0Ml9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTQyX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTE0M19IYXNEYXRhPnRydWU8L0Jhc2UtMC0xNDNfSGFzRGF0YT4NCjxCYXNlLTAtMTQzX0RhdGEgaWQ9InJlZi0xNDYiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE5EazhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMTQzX0RhdGE+DQo8QmFzZS0wLTE0M19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTQzX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTE0NF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xNDRfSGFzRGF0YT4NCjxCYXNlLTAtMTQ0X0RhdGEgaWQ9InJlZi0xNDciPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE5UQThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMTQ0X0RhdGE+DQo8QmFzZS0wLTE0NF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTQ0X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTE0NV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xNDVfSGFzRGF0YT4NCjxCYXNlLTAtMTQ1X0RhdGEgaWQ9InJlZi0xNDgiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE5URThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMTQ1X0RhdGE+DQo8QmFzZS0wLTE0NV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTQ1X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTE0Nl9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xNDZfSGFzRGF0YT4NCjxCYXNlLTAtMTQ2X0RhdGEgaWQ9InJlZi0xNDkiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE5USThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMTQ2X0RhdGE+DQo8QmFzZS0wLTE0Nl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTQ2X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTE0N19IYXNEYXRhPnRydWU8L0Jhc2UtMC0xNDdfSGFzRGF0YT4NCjxCYXNlLTAtMTQ3X0RhdGEgaWQ9InJlZi0xNTAiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE5UTThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMTQ3X0RhdGE+DQo8QmFzZS0wLTE0N19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTQ3X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTE0OF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xNDhfSGFzRGF0YT4NCjxCYXNlLTAtMTQ4X0RhdGEgaWQ9InJlZi0xNTEiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE5UUThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMTQ4X0RhdGE+DQo8QmFzZS0wLTE0OF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTQ4X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTE0OV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xNDlfSGFzRGF0YT4NCjxCYXNlLTAtMTQ5X0RhdGEgaWQ9InJlZi0xNTIiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE5UVThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMTQ5X0RhdGE+DQo8QmFzZS0wLTE0OV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTQ5X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTE1MF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xNTBfSGFzRGF0YT4NCjxCYXNlLTAtMTUwX0RhdGEgaWQ9InJlZi0xNTMiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE5UWThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMTUwX0RhdGE+DQo8QmFzZS0wLTE1MF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTUwX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTE1MV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xNTFfSGFzRGF0YT4NCjxCYXNlLTAtMTUxX0RhdGEgaWQ9InJlZi0xNTQiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE5UYzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMTUxX0RhdGE+DQo8QmFzZS0wLTE1MV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTUxX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTE1Ml9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xNTJfSGFzRGF0YT4NCjxCYXNlLTAtMTUyX0RhdGEgaWQ9InJlZi0xNTUiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE5UZzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMTUyX0RhdGE+DQo8QmFzZS0wLTE1Ml9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTUyX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTE1M19IYXNEYXRhPnRydWU8L0Jhc2UtMC0xNTNfSGFzRGF0YT4NCjxCYXNlLTAtMTUzX0RhdGEgaWQ9InJlZi0xNTYiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE5UazhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMTUzX0RhdGE+DQo8QmFzZS0wLTE1M19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTUzX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTE1NF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xNTRfSGFzRGF0YT4NCjxCYXNlLTAtMTU0X0RhdGEgaWQ9InJlZi0xNTciPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE5qQThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMTU0X0RhdGE+DQo8QmFzZS0wLTE1NF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTU0X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTE1NV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xNTVfSGFzRGF0YT4NCjxCYXNlLTAtMTU1X0RhdGEgaWQ9InJlZi0xNTgiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE5qRThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMTU1X0RhdGE+DQo8QmFzZS0wLTE1NV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTU1X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTE1Nl9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xNTZfSGFzRGF0YT4NCjxCYXNlLTAtMTU2X0RhdGEgaWQ9InJlZi0xNTkiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE5qSThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMTU2X0RhdGE+DQo8QmFzZS0wLTE1Nl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTU2X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTE1N19IYXNEYXRhPnRydWU8L0Jhc2UtMC0xNTdfSGFzRGF0YT4NCjxCYXNlLTAtMTU3X0RhdGEgaWQ9InJlZi0xNjAiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE5qTThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMTU3X0RhdGE+DQo8QmFzZS0wLTE1N19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTU3X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTE1OF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xNThfSGFzRGF0YT4NCjxCYXNlLTAtMTU4X0RhdGEgaWQ9InJlZi0xNjEiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE5qUThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMTU4X0RhdGE+DQo8QmFzZS0wLTE1OF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTU4X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTE1OV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xNTlfSGFzRGF0YT4NCjxCYXNlLTAtMTU5X0RhdGEgaWQ9InJlZi0xNjIiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE5qVThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMTU5X0RhdGE+DQo8QmFzZS0wLTE1OV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTU5X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTE2MF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xNjBfSGFzRGF0YT4NCjxCYXNlLTAtMTYwX0RhdGEgaWQ9InJlZi0xNjMiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE5qWThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMTYwX0RhdGE+DQo8QmFzZS0wLTE2MF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTYwX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTE2MV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xNjFfSGFzRGF0YT4NCjxCYXNlLTAtMTYxX0RhdGEgaWQ9InJlZi0xNjQiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE5qYzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMTYxX0RhdGE+DQo8QmFzZS0wLTE2MV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTYxX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTE2Ml9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xNjJfSGFzRGF0YT4NCjxCYXNlLTAtMTYyX0RhdGEgaWQ9InJlZi0xNjUiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE5qZzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMTYyX0RhdGE+DQo8QmFzZS0wLTE2Ml9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTYyX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTE2M19IYXNEYXRhPnRydWU8L0Jhc2UtMC0xNjNfSGFzRGF0YT4NCjxCYXNlLTAtMTYzX0RhdGEgaWQ9InJlZi0xNjYiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE5qazhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMTYzX0RhdGE+DQo8QmFzZS0wLTE2M19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTYzX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTE2NF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xNjRfSGFzRGF0YT4NCjxCYXNlLTAtMTY0X0RhdGEgaWQ9InJlZi0xNjciPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE56QThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMTY0X0RhdGE+DQo8QmFzZS0wLTE2NF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTY0X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTE2NV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xNjVfSGFzRGF0YT4NCjxCYXNlLTAtMTY1X0RhdGEgaWQ9InJlZi0xNjgiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE56RThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMTY1X0RhdGE+DQo8QmFzZS0wLTE2NV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTY1X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTE2Nl9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xNjZfSGFzRGF0YT4NCjxCYXNlLTAtMTY2X0RhdGEgaWQ9InJlZi0xNjkiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE56SThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMTY2X0RhdGE+DQo8QmFzZS0wLTE2Nl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTY2X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTE2N19IYXNEYXRhPnRydWU8L0Jhc2UtMC0xNjdfSGFzRGF0YT4NCjxCYXNlLTAtMTY3X0RhdGEgaWQ9InJlZi0xNzAiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE56TThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMTY3X0RhdGE+DQo8QmFzZS0wLTE2N19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTY3X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTE2OF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xNjhfSGFzRGF0YT4NCjxCYXNlLTAtMTY4X0RhdGEgaWQ9InJlZi0xNzEiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE56UThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMTY4X0RhdGE+DQo8QmFzZS0wLTE2OF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTY4X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTE2OV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xNjlfSGFzRGF0YT4NCjxCYXNlLTAtMTY5X0RhdGEgaWQ9InJlZi0xNzIiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE56VThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMTY5X0RhdGE+DQo8QmFzZS0wLTE2OV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTY5X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTE3MF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xNzBfSGFzRGF0YT4NCjxCYXNlLTAtMTcwX0RhdGEgaWQ9InJlZi0xNzMiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE56WThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMTcwX0RhdGE+DQo8QmFzZS0wLTE3MF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTcwX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTE3MV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xNzFfSGFzRGF0YT4NCjxCYXNlLTAtMTcxX0RhdGEgaWQ9InJlZi0xNzQiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE56YzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMTcxX0RhdGE+DQo8QmFzZS0wLTE3MV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTcxX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTE3Ml9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xNzJfSGFzRGF0YT4NCjxCYXNlLTAtMTcyX0RhdGEgaWQ9InJlZi0xNzUiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE56ZzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMTcyX0RhdGE+DQo8QmFzZS0wLTE3Ml9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTcyX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTE3M19IYXNEYXRhPnRydWU8L0Jhc2UtMC0xNzNfSGFzRGF0YT4NCjxCYXNlLTAtMTczX0RhdGEgaWQ9InJlZi0xNzYiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE56azhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMTczX0RhdGE+DQo8QmFzZS0wLTE3M19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTczX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTE3NF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xNzRfSGFzRGF0YT4NCjxCYXNlLTAtMTc0X0RhdGEgaWQ9InJlZi0xNzciPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE9EQThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMTc0X0RhdGE+DQo8QmFzZS0wLTE3NF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTc0X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTE3NV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xNzVfSGFzRGF0YT4NCjxCYXNlLTAtMTc1X0RhdGEgaWQ9InJlZi0xNzgiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE9ERThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMTc1X0RhdGE+DQo8QmFzZS0wLTE3NV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTc1X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTE3Nl9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xNzZfSGFzRGF0YT4NCjxCYXNlLTAtMTc2X0RhdGEgaWQ9InJlZi0xNzkiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE9ESThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMTc2X0RhdGE+DQo8QmFzZS0wLTE3Nl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTc2X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTE3N19IYXNEYXRhPnRydWU8L0Jhc2UtMC0xNzdfSGFzRGF0YT4NCjxCYXNlLTAtMTc3X0RhdGEgaWQ9InJlZi0xODAiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE9ETThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMTc3X0RhdGE+DQo8QmFzZS0wLTE3N19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTc3X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTE3OF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xNzhfSGFzRGF0YT4NCjxCYXNlLTAtMTc4X0RhdGEgaWQ9InJlZi0xODEiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE9EUThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMTc4X0RhdGE+DQo8QmFzZS0wLTE3OF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTc4X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTE3OV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xNzlfSGFzRGF0YT4NCjxCYXNlLTAtMTc5X0RhdGEgaWQ9InJlZi0xODIiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE9EVThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMTc5X0RhdGE+DQo8QmFzZS0wLTE3OV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTc5X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTE4MF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xODBfSGFzRGF0YT4NCjxCYXNlLTAtMTgwX0RhdGEgaWQ9InJlZi0xODMiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE9EWThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMTgwX0RhdGE+DQo8QmFzZS0wLTE4MF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTgwX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTE4MV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xODFfSGFzRGF0YT4NCjxCYXNlLTAtMTgxX0RhdGEgaWQ9InJlZi0xODQiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE9EYzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMTgxX0RhdGE+DQo8QmFzZS0wLTE4MV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTgxX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTE4Ml9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xODJfSGFzRGF0YT4NCjxCYXNlLTAtMTgyX0RhdGEgaWQ9InJlZi0xODUiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE9EZzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMTgyX0RhdGE+DQo8QmFzZS0wLTE4Ml9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTgyX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTE4M19IYXNEYXRhPnRydWU8L0Jhc2UtMC0xODNfSGFzRGF0YT4NCjxCYXNlLTAtMTgzX0RhdGEgaWQ9InJlZi0xODYiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE9EazhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMTgzX0RhdGE+DQo8QmFzZS0wLTE4M19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTgzX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTE4NF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xODRfSGFzRGF0YT4NCjxCYXNlLTAtMTg0X0RhdGEgaWQ9InJlZi0xODciPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE9UQThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMTg0X0RhdGE+DQo8QmFzZS0wLTE4NF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTg0X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTE4NV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xODVfSGFzRGF0YT4NCjxCYXNlLTAtMTg1X0RhdGEgaWQ9InJlZi0xODgiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE9URThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMTg1X0RhdGE+DQo8QmFzZS0wLTE4NV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTg1X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTE4Nl9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xODZfSGFzRGF0YT4NCjxCYXNlLTAtMTg2X0RhdGEgaWQ9InJlZi0xODkiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE9USThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMTg2X0RhdGE+DQo8QmFzZS0wLTE4Nl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTg2X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTE4N19IYXNEYXRhPnRydWU8L0Jhc2UtMC0xODdfSGFzRGF0YT4NCjxCYXNlLTAtMTg3X0RhdGEgaWQ9InJlZi0xOTAiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE9UTThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMTg3X0RhdGE+DQo8QmFzZS0wLTE4N19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTg3X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTE4OF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xODhfSGFzRGF0YT4NCjxCYXNlLTAtMTg4X0RhdGEgaWQ9InJlZi0xOTEiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE9UUThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMTg4X0RhdGE+DQo8QmFzZS0wLTE4OF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTg4X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTE4OV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xODlfSGFzRGF0YT4NCjxCYXNlLTAtMTg5X0RhdGEgaWQ9InJlZi0xOTIiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE9UVThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMTg5X0RhdGE+DQo8QmFzZS0wLTE4OV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTg5X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTE5MF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xOTBfSGFzRGF0YT4NCjxCYXNlLTAtMTkwX0RhdGEgaWQ9InJlZi0xOTMiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE9UWThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMTkwX0RhdGE+DQo8QmFzZS0wLTE5MF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTkwX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTE5MV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xOTFfSGFzRGF0YT4NCjxCYXNlLTAtMTkxX0RhdGEgaWQ9InJlZi0xOTQiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE9UYzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMTkxX0RhdGE+DQo8QmFzZS0wLTE5MV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTkxX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTE5Ml9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xOTJfSGFzRGF0YT4NCjxCYXNlLTAtMTkyX0RhdGEgaWQ9InJlZi0xOTUiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE9UZzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMTkyX0RhdGE+DQo8QmFzZS0wLTE5Ml9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTkyX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTE5M19IYXNEYXRhPnRydWU8L0Jhc2UtMC0xOTNfSGFzRGF0YT4NCjxCYXNlLTAtMTkzX0RhdGEgaWQ9InJlZi0xOTYiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE9UazhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMTkzX0RhdGE+DQo8QmFzZS0wLTE5M19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTkzX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTE5NF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xOTRfSGFzRGF0YT4NCjxCYXNlLTAtMTk0X0RhdGEgaWQ9InJlZi0xOTciPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eU1EQThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMTk0X0RhdGE+DQo8QmFzZS0wLTE5NF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTk0X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTE5NV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xOTVfSGFzRGF0YT4NCjxCYXNlLTAtMTk1X0RhdGEgaWQ9InJlZi0xOTgiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eU1ERThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMTk1X0RhdGE+DQo8QmFzZS0wLTE5NV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTk1X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTE5Nl9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xOTZfSGFzRGF0YT4NCjxCYXNlLTAtMTk2X0RhdGEgaWQ9InJlZi0xOTkiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eU1ESThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMTk2X0RhdGE+DQo8QmFzZS0wLTE5Nl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTk2X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTE5N19IYXNEYXRhPnRydWU8L0Jhc2UtMC0xOTdfSGFzRGF0YT4NCjxCYXNlLTAtMTk3X0RhdGEgaWQ9InJlZi0yMDAiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eU1ETThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMTk3X0RhdGE+DQo8QmFzZS0wLTE5N19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTk3X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTE5OF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xOThfSGFzRGF0YT4NCjxCYXNlLTAtMTk4X0RhdGEgaWQ9InJlZi0yMDEiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eU1EUThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMTk4X0RhdGE+DQo8QmFzZS0wLTE5OF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTk4X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTE5OV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xOTlfSGFzRGF0YT4NCjxCYXNlLTAtMTk5X0RhdGEgaWQ9InJlZi0yMDIiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eU1EVThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMTk5X0RhdGE+DQo8QmFzZS0wLTE5OV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTk5X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTIwMF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0yMDBfSGFzRGF0YT4NCjxCYXNlLTAtMjAwX0RhdGEgaWQ9InJlZi0yMDMiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eU1EWThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMjAwX0RhdGE+DQo8QmFzZS0wLTIwMF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMjAwX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTIwMV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0yMDFfSGFzRGF0YT4NCjxCYXNlLTAtMjAxX0RhdGEgaWQ9InJlZi0yMDQiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eU1EYzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMjAxX0RhdGE+DQo8QmFzZS0wLTIwMV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMjAxX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTIwMl9IYXNEYXRhPnRydWU8L0Jhc2UtMC0yMDJfSGFzRGF0YT4NCjxCYXNlLTAtMjAyX0RhdGEgaWQ9InJlZi0yMDUiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eU1EZzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMjAyX0RhdGE+DQo8QmFzZS0wLTIwMl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMjAyX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTIwM19IYXNEYXRhPnRydWU8L0Jhc2UtMC0yMDNfSGFzRGF0YT4NCjxCYXNlLTAtMjAzX0RhdGEgaWQ9InJlZi0yMDYiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eU1EazhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMjAzX0RhdGE+DQo8QmFzZS0wLTIwM19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMjAzX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTIwNF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0yMDRfSGFzRGF0YT4NCjxCYXNlLTAtMjA0X0RhdGEgaWQ9InJlZi0yMDciPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eU1UQThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMjA0X0RhdGE+DQo8QmFzZS0wLTIwNF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMjA0X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTIwNV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0yMDVfSGFzRGF0YT4NCjxCYXNlLTAtMjA1X0RhdGEgaWQ9InJlZi0yMDgiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eU1URThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMjA1X0RhdGE+DQo8QmFzZS0wLTIwNV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMjA1X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTIwNl9IYXNEYXRhPnRydWU8L0Jhc2UtMC0yMDZfSGFzRGF0YT4NCjxCYXNlLTAtMjA2X0RhdGEgaWQ9InJlZi0yMDkiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eU1USThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMjA2X0RhdGE+DQo8QmFzZS0wLTIwNl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMjA2X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTIwN19IYXNEYXRhPnRydWU8L0Jhc2UtMC0yMDdfSGFzRGF0YT4NCjxCYXNlLTAtMjA3X0RhdGEgaWQ9InJlZi0yMTAiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eU1UTThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMjA3X0RhdGE+DQo8QmFzZS0wLTIwN19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMjA3X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTIwOF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0yMDhfSGFzRGF0YT4NCjxCYXNlLTAtMjA4X0RhdGEgaWQ9InJlZi0yMTEiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eU1UUThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMjA4X0RhdGE+DQo8QmFzZS0wLTIwOF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMjA4X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTIwOV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0yMDlfSGFzRGF0YT4NCjxCYXNlLTAtMjA5X0RhdGEgaWQ9InJlZi0yMTIiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eU1UVThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMjA5X0RhdGE+DQo8QmFzZS0wLTIwOV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMjA5X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTIxMF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0yMTBfSGFzRGF0YT4NCjxCYXNlLTAtMjEwX0RhdGEgaWQ9InJlZi0yMTMiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eU1UWThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMjEwX0RhdGE+DQo8QmFzZS0wLTIxMF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMjEwX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTIxMV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0yMTFfSGFzRGF0YT4NCjxCYXNlLTAtMjExX0RhdGEgaWQ9InJlZi0yMTQiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eU1UYzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMjExX0RhdGE+DQo8QmFzZS0wLTIxMV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMjExX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTIxMl9IYXNEYXRhPnRydWU8L0Jhc2UtMC0yMTJfSGFzRGF0YT4NCjxCYXNlLTAtMjEyX0RhdGEgaWQ9InJlZi0yMTUiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eU1UZzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMjEyX0RhdGE+DQo8QmFzZS0wLTIxMl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMjEyX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTIxM19IYXNEYXRhPnRydWU8L0Jhc2UtMC0yMTNfSGFzRGF0YT4NCjxCYXNlLTAtMjEzX0RhdGEgaWQ9InJlZi0yMTYiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eU1UazhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMjEzX0RhdGE+DQo8QmFzZS0wLTIxM19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMjEzX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTIxNF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0yMTRfSGFzRGF0YT4NCjxCYXNlLTAtMjE0X0RhdGEgaWQ9InJlZi0yMTciPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eU1qQThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMjE0X0RhdGE+DQo8QmFzZS0wLTIxNF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMjE0X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTIxNV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0yMTVfSGFzRGF0YT4NCjxCYXNlLTAtMjE1X0RhdGEgaWQ9InJlZi0yMTgiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eU1qRThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMjE1X0RhdGE+DQo8QmFzZS0wLTIxNV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMjE1X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTIxNl9IYXNEYXRhPnRydWU8L0Jhc2UtMC0yMTZfSGFzRGF0YT4NCjxCYXNlLTAtMjE2X0RhdGEgaWQ9InJlZi0yMTkiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eU1qSThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMjE2X0RhdGE+DQo8QmFzZS0wLTIxNl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMjE2X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTIxN19IYXNEYXRhPnRydWU8L0Jhc2UtMC0yMTdfSGFzRGF0YT4NCjxCYXNlLTAtMjE3X0RhdGEgaWQ9InJlZi0yMjAiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eU1qTThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMjE3X0RhdGE+DQo8QmFzZS0wLTIxN19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMjE3X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTIxOF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0yMThfSGFzRGF0YT4NCjxCYXNlLTAtMjE4X0RhdGEgaWQ9InJlZi0yMjEiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eU1qUThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMjE4X0RhdGE+DQo8QmFzZS0wLTIxOF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMjE4X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTIxOV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0yMTlfSGFzRGF0YT4NCjxCYXNlLTAtMjE5X0RhdGEgaWQ9InJlZi0yMjIiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eU1qVThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMjE5X0RhdGE+DQo8QmFzZS0wLTIxOV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMjE5X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTIyMF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0yMjBfSGFzRGF0YT4NCjxCYXNlLTAtMjIwX0RhdGEgaWQ9InJlZi0yMjMiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eU1qWThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMjIwX0RhdGE+DQo8QmFzZS0wLTIyMF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMjIwX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTIyMV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0yMjFfSGFzRGF0YT4NCjxCYXNlLTAtMjIxX0RhdGEgaWQ9InJlZi0yMjQiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eU1qYzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMjIxX0RhdGE+DQo8QmFzZS0wLTIyMV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMjIxX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTIyMl9IYXNEYXRhPnRydWU8L0Jhc2UtMC0yMjJfSGFzRGF0YT4NCjxCYXNlLTAtMjIyX0RhdGEgaWQ9InJlZi0yMjUiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eU1qZzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMjIyX0RhdGE+DQo8QmFzZS0wLTIyMl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMjIyX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTIyM19IYXNEYXRhPnRydWU8L0Jhc2UtMC0yMjNfSGFzRGF0YT4NCjxCYXNlLTAtMjIzX0RhdGEgaWQ9InJlZi0yMjYiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eU1qazhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMjIzX0RhdGE+DQo8QmFzZS0wLTIyM19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMjIzX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTIyNF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0yMjRfSGFzRGF0YT4NCjxCYXNlLTAtMjI0X0RhdGEgaWQ9InJlZi0yMjciPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eU16QThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMjI0X0RhdGE+DQo8QmFzZS0wLTIyNF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMjI0X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTIyNV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0yMjVfSGFzRGF0YT4NCjxCYXNlLTAtMjI1X0RhdGEgaWQ9InJlZi0yMjgiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eU16RThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMjI1X0RhdGE+DQo8QmFzZS0wLTIyNV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMjI1X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTIyNl9IYXNEYXRhPnRydWU8L0Jhc2UtMC0yMjZfSGFzRGF0YT4NCjxCYXNlLTAtMjI2X0RhdGEgaWQ9InJlZi0yMjkiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eU16SThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMjI2X0RhdGE+DQo8QmFzZS0wLTIyNl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMjI2X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTIyN19IYXNEYXRhPnRydWU8L0Jhc2UtMC0yMjdfSGFzRGF0YT4NCjxCYXNlLTAtMjI3X0RhdGEgaWQ9InJlZi0yMzAiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eU16TThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMjI3X0RhdGE+DQo8QmFzZS0wLTIyN19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMjI3X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTIyOF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0yMjhfSGFzRGF0YT4NCjxCYXNlLTAtMjI4X0RhdGEgaWQ9InJlZi0yMzEiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eU16UThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMjI4X0RhdGE+DQo8QmFzZS0wLTIyOF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMjI4X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTIyOV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0yMjlfSGFzRGF0YT4NCjxCYXNlLTAtMjI5X0RhdGEgaWQ9InJlZi0yMzIiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eU16VThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMjI5X0RhdGE+DQo8QmFzZS0wLTIyOV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMjI5X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTIzMF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0yMzBfSGFzRGF0YT4NCjxCYXNlLTAtMjMwX0RhdGEgaWQ9InJlZi0yMzMiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eU16WThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMjMwX0RhdGE+DQo8QmFzZS0wLTIzMF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMjMwX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTIzMV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0yMzFfSGFzRGF0YT4NCjxCYXNlLTAtMjMxX0RhdGEgaWQ9InJlZi0yMzQiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eU16YzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMjMxX0RhdGE+DQo8QmFzZS0wLTIzMV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMjMxX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTIzMl9IYXNEYXRhPnRydWU8L0Jhc2UtMC0yMzJfSGFzRGF0YT4NCjxCYXNlLTAtMjMyX0RhdGEgaWQ9InJlZi0yMzUiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eU16ZzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMjMyX0RhdGE+DQo8QmFzZS0wLTIzMl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMjMyX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTIzM19IYXNEYXRhPnRydWU8L0Jhc2UtMC0yMzNfSGFzRGF0YT4NCjxCYXNlLTAtMjMzX0RhdGEgaWQ9InJlZi0yMzYiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eU16azhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMjMzX0RhdGE+DQo8QmFzZS0wLTIzM19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMjMzX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTIzNF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0yMzRfSGFzRGF0YT4NCjxCYXNlLTAtMjM0X0RhdGEgaWQ9InJlZi0yMzciPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eU5EQThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMjM0X0RhdGE+DQo8QmFzZS0wLTIzNF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMjM0X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTIzNV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0yMzVfSGFzRGF0YT4NCjxCYXNlLTAtMjM1X0RhdGEgaWQ9InJlZi0yMzgiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eU5ERThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMjM1X0RhdGE+DQo8QmFzZS0wLTIzNV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMjM1X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTIzNl9IYXNEYXRhPnRydWU8L0Jhc2UtMC0yMzZfSGFzRGF0YT4NCjxCYXNlLTAtMjM2X0RhdGEgaWQ9InJlZi0yMzkiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eU5ESThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMjM2X0RhdGE+DQo8QmFzZS0wLTIzNl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMjM2X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTIzN19IYXNEYXRhPnRydWU8L0Jhc2UtMC0yMzdfSGFzRGF0YT4NCjxCYXNlLTAtMjM3X0RhdGEgaWQ9InJlZi0yNDAiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eU5ETThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMjM3X0RhdGE+DQo8QmFzZS0wLTIzN19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMjM3X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTIzOF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0yMzhfSGFzRGF0YT4NCjxCYXNlLTAtMjM4X0RhdGEgaWQ9InJlZi0yNDEiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eU5EUThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMjM4X0RhdGE+DQo8QmFzZS0wLTIzOF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMjM4X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTIzOV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0yMzlfSGFzRGF0YT4NCjxCYXNlLTAtMjM5X0RhdGEgaWQ9InJlZi0yNDIiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eU5EVThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMjM5X0RhdGE+DQo8QmFzZS0wLTIzOV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMjM5X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTI0MF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0yNDBfSGFzRGF0YT4NCjxCYXNlLTAtMjQwX0RhdGEgaWQ9InJlZi0yNDMiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eU5EWThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMjQwX0RhdGE+DQo8QmFzZS0wLTI0MF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMjQwX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTI0MV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0yNDFfSGFzRGF0YT4NCjxCYXNlLTAtMjQxX0RhdGEgaWQ9InJlZi0yNDQiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eU5EYzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMjQxX0RhdGE+DQo8QmFzZS0wLTI0MV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMjQxX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTI0Ml9IYXNEYXRhPnRydWU8L0Jhc2UtMC0yNDJfSGFzRGF0YT4NCjxCYXNlLTAtMjQyX0RhdGEgaWQ9InJlZi0yNDUiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eU5EZzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMjQyX0RhdGE+DQo8QmFzZS0wLTI0Ml9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMjQyX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTI0M19IYXNEYXRhPnRydWU8L0Jhc2UtMC0yNDNfSGFzRGF0YT4NCjxCYXNlLTAtMjQzX0RhdGEgaWQ9InJlZi0yNDYiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eU5EazhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMjQzX0RhdGE+DQo8QmFzZS0wLTI0M19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMjQzX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTI0NF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0yNDRfSGFzRGF0YT4NCjxCYXNlLTAtMjQ0X0RhdGEgaWQ9InJlZi0yNDciPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eU5UQThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMjQ0X0RhdGE+DQo8QmFzZS0wLTI0NF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMjQ0X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTI0NV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0yNDVfSGFzRGF0YT4NCjxCYXNlLTAtMjQ1X0RhdGEgaWQ9InJlZi0yNDgiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eU5URThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMjQ1X0RhdGE+DQo8QmFzZS0wLTI0NV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMjQ1X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTI0Nl9IYXNEYXRhPnRydWU8L0Jhc2UtMC0yNDZfSGFzRGF0YT4NCjxCYXNlLTAtMjQ2X0RhdGEgaWQ9InJlZi0yNDkiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eU5USThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMjQ2X0RhdGE+DQo8QmFzZS0wLTI0Nl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMjQ2X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTI0N19IYXNEYXRhPnRydWU8L0Jhc2UtMC0yNDdfSGFzRGF0YT4NCjxCYXNlLTAtMjQ3X0RhdGEgaWQ9InJlZi0yNTAiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eU5UTThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMjQ3X0RhdGE+DQo8QmFzZS0wLTI0N19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMjQ3X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTI0OF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0yNDhfSGFzRGF0YT4NCjxCYXNlLTAtMjQ4X0RhdGEgaWQ9InJlZi0yNTEiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eU5UUThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMjQ4X0RhdGE+DQo8QmFzZS0wLTI0OF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMjQ4X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTI0OV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0yNDlfSGFzRGF0YT4NCjxCYXNlLTAtMjQ5X0RhdGEgaWQ9InJlZi0yNTIiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eU5UVThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMjQ5X0RhdGE+DQo8QmFzZS0wLTI0OV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMjQ5X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTI1MF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0yNTBfSGFzRGF0YT4NCjxCYXNlLTAtMjUwX0RhdGEgaWQ9InJlZi0yNTMiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eU5UWThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMjUwX0RhdGE+DQo8QmFzZS0wLTI1MF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMjUwX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTI1MV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0yNTFfSGFzRGF0YT4NCjxCYXNlLTAtMjUxX0RhdGEgaWQ9InJlZi0yNTQiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eU5UYzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMjUxX0RhdGE+DQo8QmFzZS0wLTI1MV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMjUxX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTI1Ml9IYXNEYXRhPnRydWU8L0Jhc2UtMC0yNTJfSGFzRGF0YT4NCjxCYXNlLTAtMjUyX0RhdGEgaWQ9InJlZi0yNTUiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eU5UZzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMjUyX0RhdGE+DQo8QmFzZS0wLTI1Ml9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMjUyX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTI1M19IYXNEYXRhPnRydWU8L0Jhc2UtMC0yNTNfSGFzRGF0YT4NCjxCYXNlLTAtMjUzX0RhdGEgaWQ9InJlZi0yNTYiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eU5UazhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMjUzX0RhdGE+DQo8QmFzZS0wLTI1M19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMjUzX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTI1NF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0yNTRfSGFzRGF0YT4NCjxCYXNlLTAtMjU0X0RhdGEgaWQ9InJlZi0yNTciPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eU5qQThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMjU0X0RhdGE+DQo8QmFzZS0wLTI1NF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMjU0X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTI1NV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0yNTVfSGFzRGF0YT4NCjxCYXNlLTAtMjU1X0RhdGEgaWQ9InJlZi0yNTgiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eU5qRThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMjU1X0RhdGE+DQo8QmFzZS0wLTI1NV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMjU1X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTI1Nl9IYXNEYXRhPnRydWU8L0Jhc2UtMC0yNTZfSGFzRGF0YT4NCjxCYXNlLTAtMjU2X0RhdGEgaWQ9InJlZi0yNTkiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eU5qSThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMjU2X0RhdGE+DQo8QmFzZS0wLTI1Nl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMjU2X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTI1N19IYXNEYXRhPnRydWU8L0Jhc2UtMC0yNTdfSGFzRGF0YT4NCjxCYXNlLTAtMjU3X0RhdGEgaWQ9InJlZi0yNjAiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eU5qTThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMjU3X0RhdGE+DQo8QmFzZS0wLTI1N19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMjU3X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTI1OF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0yNThfSGFzRGF0YT4NCjxCYXNlLTAtMjU4X0RhdGEgaWQ9InJlZi0yNjEiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eU5qUThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMjU4X0RhdGE+DQo8QmFzZS0wLTI1OF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMjU4X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTI1OV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0yNTlfSGFzRGF0YT4NCjxCYXNlLTAtMjU5X0RhdGEgaWQ9InJlZi0yNjIiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eU5qVThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMjU5X0RhdGE+DQo8QmFzZS0wLTI1OV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMjU5X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTI2MF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0yNjBfSGFzRGF0YT4NCjxCYXNlLTAtMjYwX0RhdGEgaWQ9InJlZi0yNjMiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eU5qWThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMjYwX0RhdGE+DQo8QmFzZS0wLTI2MF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMjYwX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTI2MV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0yNjFfSGFzRGF0YT4NCjxCYXNlLTAtMjYxX0RhdGEgaWQ9InJlZi0yNjQiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eU5qYzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMjYxX0RhdGE+DQo8QmFzZS0wLTI2MV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMjYxX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTI2Ml9IYXNEYXRhPnRydWU8L0Jhc2UtMC0yNjJfSGFzRGF0YT4NCjxCYXNlLTAtMjYyX0RhdGEgaWQ9InJlZi0yNjUiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eU5qZzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMjYyX0RhdGE+DQo8QmFzZS0wLTI2Ml9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMjYyX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTI2M19IYXNEYXRhPnRydWU8L0Jhc2UtMC0yNjNfSGFzRGF0YT4NCjxCYXNlLTAtMjYzX0RhdGEgaWQ9InJlZi0yNjYiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eU5qazhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMjYzX0RhdGE+DQo8QmFzZS0wLTI2M19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMjYzX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTI2NF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0yNjRfSGFzRGF0YT4NCjxCYXNlLTAtMjY0X0RhdGEgaWQ9InJlZi0yNjciPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eU56QThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMjY0X0RhdGE+DQo8QmFzZS0wLTI2NF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMjY0X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTI2NV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0yNjVfSGFzRGF0YT4NCjxCYXNlLTAtMjY1X0RhdGEgaWQ9InJlZi0yNjgiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eU56RThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMjY1X0RhdGE+DQo8QmFzZS0wLTI2NV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMjY1X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTI2Nl9IYXNEYXRhPnRydWU8L0Jhc2UtMC0yNjZfSGFzRGF0YT4NCjxCYXNlLTAtMjY2X0RhdGEgaWQ9InJlZi0yNjkiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eU56SThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMjY2X0RhdGE+DQo8QmFzZS0wLTI2Nl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMjY2X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTI2N19IYXNEYXRhPnRydWU8L0Jhc2UtMC0yNjdfSGFzRGF0YT4NCjxCYXNlLTAtMjY3X0RhdGEgaWQ9InJlZi0yNzAiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eU56TThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMjY3X0RhdGE+DQo8QmFzZS0wLTI2N19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMjY3X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTI2OF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0yNjhfSGFzRGF0YT4NCjxCYXNlLTAtMjY4X0RhdGEgaWQ9InJlZi0yNzEiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eU56UThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMjY4X0RhdGE+DQo8QmFzZS0wLTI2OF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMjY4X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTI2OV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0yNjlfSGFzRGF0YT4NCjxCYXNlLTAtMjY5X0RhdGEgaWQ9InJlZi0yNzIiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eU56VThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMjY5X0RhdGE+DQo8QmFzZS0wLTI2OV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMjY5X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTI3MF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0yNzBfSGFzRGF0YT4NCjxCYXNlLTAtMjcwX0RhdGEgaWQ9InJlZi0yNzMiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eU56WThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMjcwX0RhdGE+DQo8QmFzZS0wLTI3MF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMjcwX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTI3MV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0yNzFfSGFzRGF0YT4NCjxCYXNlLTAtMjcxX0RhdGEgaWQ9InJlZi0yNzQiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eU56YzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMjcxX0RhdGE+DQo8QmFzZS0wLTI3MV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMjcxX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTI3Ml9IYXNEYXRhPnRydWU8L0Jhc2UtMC0yNzJfSGFzRGF0YT4NCjxCYXNlLTAtMjcyX0RhdGEgaWQ9InJlZi0yNzUiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eU56ZzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMjcyX0RhdGE+DQo8QmFzZS0wLTI3Ml9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMjcyX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTI3M19IYXNEYXRhPnRydWU8L0Jhc2UtMC0yNzNfSGFzRGF0YT4NCjxCYXNlLTAtMjczX0RhdGEgaWQ9InJlZi0yNzYiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eU56azhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMjczX0RhdGE+DQo8QmFzZS0wLTI3M19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMjczX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTI3NF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0yNzRfSGFzRGF0YT4NCjxCYXNlLTAtMjc0X0RhdGEgaWQ9InJlZi0yNzciPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eU9EQThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMjc0X0RhdGE+DQo8QmFzZS0wLTI3NF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMjc0X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTI3NV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0yNzVfSGFzRGF0YT4NCjxCYXNlLTAtMjc1X0RhdGEgaWQ9InJlZi0yNzgiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eU9ERThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMjc1X0RhdGE+DQo8QmFzZS0wLTI3NV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMjc1X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTI3Nl9IYXNEYXRhPnRydWU8L0Jhc2UtMC0yNzZfSGFzRGF0YT4NCjxCYXNlLTAtMjc2X0RhdGEgaWQ9InJlZi0yNzkiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eU9ESThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMjc2X0RhdGE+DQo8QmFzZS0wLTI3Nl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMjc2X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTI3N19IYXNEYXRhPnRydWU8L0Jhc2UtMC0yNzdfSGFzRGF0YT4NCjxCYXNlLTAtMjc3X0RhdGEgaWQ9InJlZi0yODAiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eU9ETThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMjc3X0RhdGE+DQo8QmFzZS0wLTI3N19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMjc3X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTI3OF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0yNzhfSGFzRGF0YT4NCjxCYXNlLTAtMjc4X0RhdGEgaWQ9InJlZi0yODEiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eU9EUThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMjc4X0RhdGE+DQo8QmFzZS0wLTI3OF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMjc4X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTI3OV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0yNzlfSGFzRGF0YT4NCjxCYXNlLTAtMjc5X0RhdGEgaWQ9InJlZi0yODIiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eU9EVThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMjc5X0RhdGE+DQo8QmFzZS0wLTI3OV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMjc5X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTI4MF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0yODBfSGFzRGF0YT4NCjxCYXNlLTAtMjgwX0RhdGEgaWQ9InJlZi0yODMiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eU9EWThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMjgwX0RhdGE+DQo8QmFzZS0wLTI4MF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMjgwX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTI4MV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0yODFfSGFzRGF0YT4NCjxCYXNlLTAtMjgxX0RhdGEgaWQ9InJlZi0yODQiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eU9EYzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMjgxX0RhdGE+DQo8QmFzZS0wLTI4MV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMjgxX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTI4Ml9IYXNEYXRhPnRydWU8L0Jhc2UtMC0yODJfSGFzRGF0YT4NCjxCYXNlLTAtMjgyX0RhdGEgaWQ9InJlZi0yODUiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eU9EZzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMjgyX0RhdGE+DQo8QmFzZS0wLTI4Ml9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMjgyX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTI4M19IYXNEYXRhPnRydWU8L0Jhc2UtMC0yODNfSGFzRGF0YT4NCjxCYXNlLTAtMjgzX0RhdGEgaWQ9InJlZi0yODYiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eU9EazhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMjgzX0RhdGE+DQo8QmFzZS0wLTI4M19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMjgzX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTI4NF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0yODRfSGFzRGF0YT4NCjxCYXNlLTAtMjg0X0RhdGEgaWQ9InJlZi0yODciPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eU9UQThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMjg0X0RhdGE+DQo8QmFzZS0wLTI4NF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMjg0X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTI4NV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0yODVfSGFzRGF0YT4NCjxCYXNlLTAtMjg1X0RhdGEgaWQ9InJlZi0yODgiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eU9URThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMjg1X0RhdGE+DQo8QmFzZS0wLTI4NV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMjg1X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTI4Nl9IYXNEYXRhPnRydWU8L0Jhc2UtMC0yODZfSGFzRGF0YT4NCjxCYXNlLTAtMjg2X0RhdGEgaWQ9InJlZi0yODkiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eU9USThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMjg2X0RhdGE+DQo8QmFzZS0wLTI4Nl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMjg2X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTI4N19IYXNEYXRhPnRydWU8L0Jhc2UtMC0yODdfSGFzRGF0YT4NCjxCYXNlLTAtMjg3X0RhdGEgaWQ9InJlZi0yOTAiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eU9UTThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMjg3X0RhdGE+DQo8QmFzZS0wLTI4N19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMjg3X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTI4OF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0yODhfSGFzRGF0YT4NCjxCYXNlLTAtMjg4X0RhdGEgaWQ9InJlZi0yOTEiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eU9UUThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMjg4X0RhdGE+DQo8QmFzZS0wLTI4OF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMjg4X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTI4OV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0yODlfSGFzRGF0YT4NCjxCYXNlLTAtMjg5X0RhdGEgaWQ9InJlZi0yOTIiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eU9UVThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMjg5X0RhdGE+DQo8QmFzZS0wLTI4OV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMjg5X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTI5MF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0yOTBfSGFzRGF0YT4NCjxCYXNlLTAtMjkwX0RhdGEgaWQ9InJlZi0yOTMiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eU9UWThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMjkwX0RhdGE+DQo8QmFzZS0wLTI5MF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMjkwX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTI5MV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0yOTFfSGFzRGF0YT4NCjxCYXNlLTAtMjkxX0RhdGEgaWQ9InJlZi0yOTQiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eU9UYzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMjkxX0RhdGE+DQo8QmFzZS0wLTI5MV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMjkxX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTI5Ml9IYXNEYXRhPnRydWU8L0Jhc2UtMC0yOTJfSGFzRGF0YT4NCjxCYXNlLTAtMjkyX0RhdGEgaWQ9InJlZi0yOTUiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eU9UZzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMjkyX0RhdGE+DQo8QmFzZS0wLTI5Ml9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMjkyX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTI5M19IYXNEYXRhPnRydWU8L0Jhc2UtMC0yOTNfSGFzRGF0YT4NCjxCYXNlLTAtMjkzX0RhdGEgaWQ9InJlZi0yOTYiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eU9UazhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMjkzX0RhdGE+DQo8QmFzZS0wLTI5M19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMjkzX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTI5NF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0yOTRfSGFzRGF0YT4NCjxCYXNlLTAtMjk0X0RhdGEgaWQ9InJlZi0yOTciPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ek1EQThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMjk0X0RhdGE+DQo8QmFzZS0wLTI5NF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMjk0X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTI5NV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0yOTVfSGFzRGF0YT4NCjxCYXNlLTAtMjk1X0RhdGEgaWQ9InJlZi0yOTgiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ek1ERThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMjk1X0RhdGE+DQo8QmFzZS0wLTI5NV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMjk1X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTI5Nl9IYXNEYXRhPnRydWU8L0Jhc2UtMC0yOTZfSGFzRGF0YT4NCjxCYXNlLTAtMjk2X0RhdGEgaWQ9InJlZi0yOTkiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ek1ESThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMjk2X0RhdGE+DQo8QmFzZS0wLTI5Nl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMjk2X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTI5N19IYXNEYXRhPnRydWU8L0Jhc2UtMC0yOTdfSGFzRGF0YT4NCjxCYXNlLTAtMjk3X0RhdGEgaWQ9InJlZi0zMDAiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ek1ETThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMjk3X0RhdGE+DQo8QmFzZS0wLTI5N19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMjk3X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTI5OF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0yOThfSGFzRGF0YT4NCjxCYXNlLTAtMjk4X0RhdGEgaWQ9InJlZi0zMDEiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ek1EUThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMjk4X0RhdGE+DQo8QmFzZS0wLTI5OF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMjk4X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTI5OV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0yOTlfSGFzRGF0YT4NCjxCYXNlLTAtMjk5X0RhdGEgaWQ9InJlZi0zMDIiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ek1EVThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMjk5X0RhdGE+DQo8QmFzZS0wLTI5OV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMjk5X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTMwMF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0zMDBfSGFzRGF0YT4NCjxCYXNlLTAtMzAwX0RhdGEgaWQ9InJlZi0zMDMiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ek1EWThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMzAwX0RhdGE+DQo8QmFzZS0wLTMwMF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMzAwX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTMwMV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0zMDFfSGFzRGF0YT4NCjxCYXNlLTAtMzAxX0RhdGEgaWQ9InJlZi0zMDQiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ek1EYzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMzAxX0RhdGE+DQo8QmFzZS0wLTMwMV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMzAxX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTMwMl9IYXNEYXRhPnRydWU8L0Jhc2UtMC0zMDJfSGFzRGF0YT4NCjxCYXNlLTAtMzAyX0RhdGEgaWQ9InJlZi0zMDUiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ek1EZzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMzAyX0RhdGE+DQo8QmFzZS0wLTMwMl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMzAyX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTMwM19IYXNEYXRhPnRydWU8L0Jhc2UtMC0zMDNfSGFzRGF0YT4NCjxCYXNlLTAtMzAzX0RhdGEgaWQ9InJlZi0zMDYiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ek1EazhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMzAzX0RhdGE+DQo8QmFzZS0wLTMwM19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMzAzX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTMwNF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0zMDRfSGFzRGF0YT4NCjxCYXNlLTAtMzA0X0RhdGEgaWQ9InJlZi0zMDciPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ek1UQThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMzA0X0RhdGE+DQo8QmFzZS0wLTMwNF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMzA0X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTMwNV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0zMDVfSGFzRGF0YT4NCjxCYXNlLTAtMzA1X0RhdGEgaWQ9InJlZi0zMDgiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ek1URThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMzA1X0RhdGE+DQo8QmFzZS0wLTMwNV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMzA1X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTMwNl9IYXNEYXRhPnRydWU8L0Jhc2UtMC0zMDZfSGFzRGF0YT4NCjxCYXNlLTAtMzA2X0RhdGEgaWQ9InJlZi0zMDkiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ek1USThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMzA2X0RhdGE+DQo8QmFzZS0wLTMwNl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMzA2X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTMwN19IYXNEYXRhPnRydWU8L0Jhc2UtMC0zMDdfSGFzRGF0YT4NCjxCYXNlLTAtMzA3X0RhdGEgaWQ9InJlZi0zMTAiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ek1UTThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMzA3X0RhdGE+DQo8QmFzZS0wLTMwN19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMzA3X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTMwOF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0zMDhfSGFzRGF0YT4NCjxCYXNlLTAtMzA4X0RhdGEgaWQ9InJlZi0zMTEiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ek1UUThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMzA4X0RhdGE+DQo8QmFzZS0wLTMwOF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMzA4X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTMwOV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0zMDlfSGFzRGF0YT4NCjxCYXNlLTAtMzA5X0RhdGEgaWQ9InJlZi0zMTIiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ek1UVThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMzA5X0RhdGE+DQo8QmFzZS0wLTMwOV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMzA5X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTMxMF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0zMTBfSGFzRGF0YT4NCjxCYXNlLTAtMzEwX0RhdGEgaWQ9InJlZi0zMTMiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ek1UWThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMzEwX0RhdGE+DQo8QmFzZS0wLTMxMF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMzEwX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTMxMV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0zMTFfSGFzRGF0YT4NCjxCYXNlLTAtMzExX0RhdGEgaWQ9InJlZi0zMTQiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ek1UYzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMzExX0RhdGE+DQo8QmFzZS0wLTMxMV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMzExX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTMxMl9IYXNEYXRhPnRydWU8L0Jhc2UtMC0zMTJfSGFzRGF0YT4NCjxCYXNlLTAtMzEyX0RhdGEgaWQ9InJlZi0zMTUiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ek1UZzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMzEyX0RhdGE+DQo8QmFzZS0wLTMxMl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMzEyX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTMxM19IYXNEYXRhPnRydWU8L0Jhc2UtMC0zMTNfSGFzRGF0YT4NCjxCYXNlLTAtMzEzX0RhdGEgaWQ9InJlZi0zMTYiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ek1UazhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMzEzX0RhdGE+DQo8QmFzZS0wLTMxM19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMzEzX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTMxNF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0zMTRfSGFzRGF0YT4NCjxCYXNlLTAtMzE0X0RhdGEgaWQ9InJlZi0zMTciPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ek1qQThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMzE0X0RhdGE+DQo8QmFzZS0wLTMxNF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMzE0X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTMxNV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0zMTVfSGFzRGF0YT4NCjxCYXNlLTAtMzE1X0RhdGEgaWQ9InJlZi0zMTgiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ek1qRThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMzE1X0RhdGE+DQo8QmFzZS0wLTMxNV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMzE1X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTMxNl9IYXNEYXRhPnRydWU8L0Jhc2UtMC0zMTZfSGFzRGF0YT4NCjxCYXNlLTAtMzE2X0RhdGEgaWQ9InJlZi0zMTkiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ek1qSThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMzE2X0RhdGE+DQo8QmFzZS0wLTMxNl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMzE2X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTMxN19IYXNEYXRhPnRydWU8L0Jhc2UtMC0zMTdfSGFzRGF0YT4NCjxCYXNlLTAtMzE3X0RhdGEgaWQ9InJlZi0zMjAiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ek1qTThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMzE3X0RhdGE+DQo8QmFzZS0wLTMxN19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMzE3X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTMxOF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0zMThfSGFzRGF0YT4NCjxCYXNlLTAtMzE4X0RhdGEgaWQ9InJlZi0zMjEiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ek1qUThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMzE4X0RhdGE+DQo8QmFzZS0wLTMxOF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMzE4X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTMxOV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0zMTlfSGFzRGF0YT4NCjxCYXNlLTAtMzE5X0RhdGEgaWQ9InJlZi0zMjIiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ek1qVThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMzE5X0RhdGE+DQo8QmFzZS0wLTMxOV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMzE5X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTMyMF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0zMjBfSGFzRGF0YT4NCjxCYXNlLTAtMzIwX0RhdGEgaWQ9InJlZi0zMjMiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ek1qWThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMzIwX0RhdGE+DQo8QmFzZS0wLTMyMF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMzIwX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTMyMV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0zMjFfSGFzRGF0YT4NCjxCYXNlLTAtMzIxX0RhdGEgaWQ9InJlZi0zMjQiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ek1qYzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMzIxX0RhdGE+DQo8QmFzZS0wLTMyMV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMzIxX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTMyMl9IYXNEYXRhPnRydWU8L0Jhc2UtMC0zMjJfSGFzRGF0YT4NCjxCYXNlLTAtMzIyX0RhdGEgaWQ9InJlZi0zMjUiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ek1qZzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMzIyX0RhdGE+DQo8QmFzZS0wLTMyMl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMzIyX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTMyM19IYXNEYXRhPnRydWU8L0Jhc2UtMC0zMjNfSGFzRGF0YT4NCjxCYXNlLTAtMzIzX0RhdGEgaWQ9InJlZi0zMjYiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ek1qazhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMzIzX0RhdGE+DQo8QmFzZS0wLTMyM19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMzIzX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTMyNF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0zMjRfSGFzRGF0YT4NCjxCYXNlLTAtMzI0X0RhdGEgaWQ9InJlZi0zMjciPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ek16QThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMzI0X0RhdGE+DQo8QmFzZS0wLTMyNF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMzI0X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTMyNV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0zMjVfSGFzRGF0YT4NCjxCYXNlLTAtMzI1X0RhdGEgaWQ9InJlZi0zMjgiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ek16RThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMzI1X0RhdGE+DQo8QmFzZS0wLTMyNV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMzI1X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTMyNl9IYXNEYXRhPnRydWU8L0Jhc2UtMC0zMjZfSGFzRGF0YT4NCjxCYXNlLTAtMzI2X0RhdGEgaWQ9InJlZi0zMjkiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ek16SThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMzI2X0RhdGE+DQo8QmFzZS0wLTMyNl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMzI2X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTMyN19IYXNEYXRhPnRydWU8L0Jhc2UtMC0zMjdfSGFzRGF0YT4NCjxCYXNlLTAtMzI3X0RhdGEgaWQ9InJlZi0zMzAiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ek16TThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMzI3X0RhdGE+DQo8QmFzZS0wLTMyN19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMzI3X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTMyOF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0zMjhfSGFzRGF0YT4NCjxCYXNlLTAtMzI4X0RhdGEgaWQ9InJlZi0zMzEiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ek16UThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMzI4X0RhdGE+DQo8QmFzZS0wLTMyOF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMzI4X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTMyOV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0zMjlfSGFzRGF0YT4NCjxCYXNlLTAtMzI5X0RhdGEgaWQ9InJlZi0zMzIiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ek16VThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMzI5X0RhdGE+DQo8QmFzZS0wLTMyOV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMzI5X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTMzMF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0zMzBfSGFzRGF0YT4NCjxCYXNlLTAtMzMwX0RhdGEgaWQ9InJlZi0zMzMiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ek16WThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMzMwX0RhdGE+DQo8QmFzZS0wLTMzMF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMzMwX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTMzMV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0zMzFfSGFzRGF0YT4NCjxCYXNlLTAtMzMxX0RhdGEgaWQ9InJlZi0zMzQiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ek16YzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMzMxX0RhdGE+DQo8QmFzZS0wLTMzMV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMzMxX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTMzMl9IYXNEYXRhPnRydWU8L0Jhc2UtMC0zMzJfSGFzRGF0YT4NCjxCYXNlLTAtMzMyX0RhdGEgaWQ9InJlZi0zMzUiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ek16ZzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMzMyX0RhdGE+DQo8QmFzZS0wLTMzMl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMzMyX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTMzM19IYXNEYXRhPnRydWU8L0Jhc2UtMC0zMzNfSGFzRGF0YT4NCjxCYXNlLTAtMzMzX0RhdGEgaWQ9InJlZi0zMzYiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ek16azhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMzMzX0RhdGE+DQo8QmFzZS0wLTMzM19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMzMzX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTMzNF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0zMzRfSGFzRGF0YT4NCjxCYXNlLTAtMzM0X0RhdGEgaWQ9InJlZi0zMzciPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ek5EQThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMzM0X0RhdGE+DQo8QmFzZS0wLTMzNF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMzM0X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTMzNV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0zMzVfSGFzRGF0YT4NCjxCYXNlLTAtMzM1X0RhdGEgaWQ9InJlZi0zMzgiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ek5ERThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMzM1X0RhdGE+DQo8QmFzZS0wLTMzNV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMzM1X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTMzNl9IYXNEYXRhPnRydWU8L0Jhc2UtMC0zMzZfSGFzRGF0YT4NCjxCYXNlLTAtMzM2X0RhdGEgaWQ9InJlZi0zMzkiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ek5ESThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMzM2X0RhdGE+DQo8QmFzZS0wLTMzNl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMzM2X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTMzN19IYXNEYXRhPnRydWU8L0Jhc2UtMC0zMzdfSGFzRGF0YT4NCjxCYXNlLTAtMzM3X0RhdGEgaWQ9InJlZi0zNDAiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ek5ETThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMzM3X0RhdGE+DQo8QmFzZS0wLTMzN19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMzM3X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTMzOF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0zMzhfSGFzRGF0YT4NCjxCYXNlLTAtMzM4X0RhdGEgaWQ9InJlZi0zNDEiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ek5EUThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMzM4X0RhdGE+DQo8QmFzZS0wLTMzOF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMzM4X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTMzOV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0zMzlfSGFzRGF0YT4NCjxCYXNlLTAtMzM5X0RhdGEgaWQ9InJlZi0zNDIiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ek5EVThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMzM5X0RhdGE+DQo8QmFzZS0wLTMzOV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMzM5X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTM0MF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0zNDBfSGFzRGF0YT4NCjxCYXNlLTAtMzQwX0RhdGEgaWQ9InJlZi0zNDMiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ek5EWThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMzQwX0RhdGE+DQo8QmFzZS0wLTM0MF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMzQwX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTM0MV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0zNDFfSGFzRGF0YT4NCjxCYXNlLTAtMzQxX0RhdGEgaWQ9InJlZi0zNDQiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ek5EYzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMzQxX0RhdGE+DQo8QmFzZS0wLTM0MV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMzQxX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTM0Ml9IYXNEYXRhPnRydWU8L0Jhc2UtMC0zNDJfSGFzRGF0YT4NCjxCYXNlLTAtMzQyX0RhdGEgaWQ9InJlZi0zNDUiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ek5EZzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMzQyX0RhdGE+DQo8QmFzZS0wLTM0Ml9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMzQyX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTM0M19IYXNEYXRhPnRydWU8L0Jhc2UtMC0zNDNfSGFzRGF0YT4NCjxCYXNlLTAtMzQzX0RhdGEgaWQ9InJlZi0zNDYiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ek5EazhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMzQzX0RhdGE+DQo8QmFzZS0wLTM0M19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMzQzX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTM0NF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0zNDRfSGFzRGF0YT4NCjxCYXNlLTAtMzQ0X0RhdGEgaWQ9InJlZi0zNDciPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ek5UQThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMzQ0X0RhdGE+DQo8QmFzZS0wLTM0NF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMzQ0X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTM0NV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0zNDVfSGFzRGF0YT4NCjxCYXNlLTAtMzQ1X0RhdGEgaWQ9InJlZi0zNDgiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ek5URThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMzQ1X0RhdGE+DQo8QmFzZS0wLTM0NV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMzQ1X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTM0Nl9IYXNEYXRhPnRydWU8L0Jhc2UtMC0zNDZfSGFzRGF0YT4NCjxCYXNlLTAtMzQ2X0RhdGEgaWQ9InJlZi0zNDkiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ek5USThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMzQ2X0RhdGE+DQo8QmFzZS0wLTM0Nl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMzQ2X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTM0N19IYXNEYXRhPnRydWU8L0Jhc2UtMC0zNDdfSGFzRGF0YT4NCjxCYXNlLTAtMzQ3X0RhdGEgaWQ9InJlZi0zNTAiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ek5UTThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMzQ3X0RhdGE+DQo8QmFzZS0wLTM0N19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMzQ3X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTM0OF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0zNDhfSGFzRGF0YT4NCjxCYXNlLTAtMzQ4X0RhdGEgaWQ9InJlZi0zNTEiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ek5UUThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMzQ4X0RhdGE+DQo8QmFzZS0wLTM0OF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMzQ4X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTM0OV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0zNDlfSGFzRGF0YT4NCjxCYXNlLTAtMzQ5X0RhdGEgaWQ9InJlZi0zNTIiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ek5UVThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMzQ5X0RhdGE+DQo8QmFzZS0wLTM0OV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMzQ5X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTM1MF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0zNTBfSGFzRGF0YT4NCjxCYXNlLTAtMzUwX0RhdGEgaWQ9InJlZi0zNTMiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ek5UWThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMzUwX0RhdGE+DQo8QmFzZS0wLTM1MF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMzUwX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTM1MV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0zNTFfSGFzRGF0YT4NCjxCYXNlLTAtMzUxX0RhdGEgaWQ9InJlZi0zNTQiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ek5UYzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMzUxX0RhdGE+DQo8QmFzZS0wLTM1MV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMzUxX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTM1Ml9IYXNEYXRhPnRydWU8L0Jhc2UtMC0zNTJfSGFzRGF0YT4NCjxCYXNlLTAtMzUyX0RhdGEgaWQ9InJlZi0zNTUiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ek5UZzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMzUyX0RhdGE+DQo8QmFzZS0wLTM1Ml9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMzUyX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTM1M19IYXNEYXRhPnRydWU8L0Jhc2UtMC0zNTNfSGFzRGF0YT4NCjxCYXNlLTAtMzUzX0RhdGEgaWQ9InJlZi0zNTYiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ek5UazhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMzUzX0RhdGE+DQo8QmFzZS0wLTM1M19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMzUzX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTM1NF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0zNTRfSGFzRGF0YT4NCjxCYXNlLTAtMzU0X0RhdGEgaWQ9InJlZi0zNTciPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ek5qQThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMzU0X0RhdGE+DQo8QmFzZS0wLTM1NF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMzU0X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTM1NV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0zNTVfSGFzRGF0YT4NCjxCYXNlLTAtMzU1X0RhdGEgaWQ9InJlZi0zNTgiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ek5qRThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMzU1X0RhdGE+DQo8QmFzZS0wLTM1NV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMzU1X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTM1Nl9IYXNEYXRhPnRydWU8L0Jhc2UtMC0zNTZfSGFzRGF0YT4NCjxCYXNlLTAtMzU2X0RhdGEgaWQ9InJlZi0zNTkiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ek5qSThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMzU2X0RhdGE+DQo8QmFzZS0wLTM1Nl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMzU2X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTM1N19IYXNEYXRhPnRydWU8L0Jhc2UtMC0zNTdfSGFzRGF0YT4NCjxCYXNlLTAtMzU3X0RhdGEgaWQ9InJlZi0zNjAiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ek5qTThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMzU3X0RhdGE+DQo8QmFzZS0wLTM1N19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMzU3X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTM1OF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0zNThfSGFzRGF0YT4NCjxCYXNlLTAtMzU4X0RhdGEgaWQ9InJlZi0zNjEiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ek5qUThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMzU4X0RhdGE+DQo8QmFzZS0wLTM1OF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMzU4X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTM1OV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0zNTlfSGFzRGF0YT4NCjxCYXNlLTAtMzU5X0RhdGEgaWQ9InJlZi0zNjIiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ek5qVThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMzU5X0RhdGE+DQo8QmFzZS0wLTM1OV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMzU5X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTM2MF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0zNjBfSGFzRGF0YT4NCjxCYXNlLTAtMzYwX0RhdGEgaWQ9InJlZi0zNjMiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ek5qWThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMzYwX0RhdGE+DQo8QmFzZS0wLTM2MF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMzYwX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTM2MV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0zNjFfSGFzRGF0YT4NCjxCYXNlLTAtMzYxX0RhdGEgaWQ9InJlZi0zNjQiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ek5qYzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMzYxX0RhdGE+DQo8QmFzZS0wLTM2MV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMzYxX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTM2Ml9IYXNEYXRhPnRydWU8L0Jhc2UtMC0zNjJfSGFzRGF0YT4NCjxCYXNlLTAtMzYyX0RhdGEgaWQ9InJlZi0zNjUiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ek5qZzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMzYyX0RhdGE+DQo8QmFzZS0wLTM2Ml9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMzYyX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTM2M19IYXNEYXRhPnRydWU8L0Jhc2UtMC0zNjNfSGFzRGF0YT4NCjxCYXNlLTAtMzYzX0RhdGEgaWQ9InJlZi0zNjYiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ek5qazhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMzYzX0RhdGE+DQo8QmFzZS0wLTM2M19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMzYzX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTM2NF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0zNjRfSGFzRGF0YT4NCjxCYXNlLTAtMzY0X0RhdGEgaWQ9InJlZi0zNjciPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ek56QThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMzY0X0RhdGE+DQo8QmFzZS0wLTM2NF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMzY0X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTM2NV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0zNjVfSGFzRGF0YT4NCjxCYXNlLTAtMzY1X0RhdGEgaWQ9InJlZi0zNjgiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ek56RThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMzY1X0RhdGE+DQo8QmFzZS0wLTM2NV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMzY1X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTM2Nl9IYXNEYXRhPnRydWU8L0Jhc2UtMC0zNjZfSGFzRGF0YT4NCjxCYXNlLTAtMzY2X0RhdGEgaWQ9InJlZi0zNjkiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ek56SThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMzY2X0RhdGE+DQo8QmFzZS0wLTM2Nl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMzY2X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTM2N19IYXNEYXRhPnRydWU8L0Jhc2UtMC0zNjdfSGFzRGF0YT4NCjxCYXNlLTAtMzY3X0RhdGEgaWQ9InJlZi0zNzAiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ek56TThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMzY3X0RhdGE+DQo8QmFzZS0wLTM2N19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMzY3X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTM2OF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0zNjhfSGFzRGF0YT4NCjxCYXNlLTAtMzY4X0RhdGEgaWQ9InJlZi0zNzEiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ek56UThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMzY4X0RhdGE+DQo8QmFzZS0wLTM2OF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMzY4X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTM2OV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0zNjlfSGFzRGF0YT4NCjxCYXNlLTAtMzY5X0RhdGEgaWQ9InJlZi0zNzIiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ek56VThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMzY5X0RhdGE+DQo8QmFzZS0wLTM2OV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMzY5X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTM3MF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0zNzBfSGFzRGF0YT4NCjxCYXNlLTAtMzcwX0RhdGEgaWQ9InJlZi0zNzMiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ek56WThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMzcwX0RhdGE+DQo8QmFzZS0wLTM3MF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMzcwX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTM3MV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0zNzFfSGFzRGF0YT4NCjxCYXNlLTAtMzcxX0RhdGEgaWQ9InJlZi0zNzQiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ek56YzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMzcxX0RhdGE+DQo8QmFzZS0wLTM3MV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMzcxX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTM3Ml9IYXNEYXRhPnRydWU8L0Jhc2UtMC0zNzJfSGFzRGF0YT4NCjxCYXNlLTAtMzcyX0RhdGEgaWQ9InJlZi0zNzUiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ek56ZzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMzcyX0RhdGE+DQo8QmFzZS0wLTM3Ml9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMzcyX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTM3M19IYXNEYXRhPnRydWU8L0Jhc2UtMC0zNzNfSGFzRGF0YT4NCjxCYXNlLTAtMzczX0RhdGEgaWQ9InJlZi0zNzYiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ek56azhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMzczX0RhdGE+DQo8QmFzZS0wLTM3M19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMzczX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTM3NF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0zNzRfSGFzRGF0YT4NCjxCYXNlLTAtMzc0X0RhdGEgaWQ9InJlZi0zNzciPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ek9EQThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMzc0X0RhdGE+DQo8QmFzZS0wLTM3NF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMzc0X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTM3NV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0zNzVfSGFzRGF0YT4NCjxCYXNlLTAtMzc1X0RhdGEgaWQ9InJlZi0zNzgiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ek9ERThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMzc1X0RhdGE+DQo8QmFzZS0wLTM3NV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMzc1X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTM3Nl9IYXNEYXRhPnRydWU8L0Jhc2UtMC0zNzZfSGFzRGF0YT4NCjxCYXNlLTAtMzc2X0RhdGEgaWQ9InJlZi0zNzkiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ek9ESThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMzc2X0RhdGE+DQo8QmFzZS0wLTM3Nl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMzc2X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTM3N19IYXNEYXRhPnRydWU8L0Jhc2UtMC0zNzdfSGFzRGF0YT4NCjxCYXNlLTAtMzc3X0RhdGEgaWQ9InJlZi0zODAiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ek9ETThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMzc3X0RhdGE+DQo8QmFzZS0wLTM3N19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMzc3X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTM3OF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0zNzhfSGFzRGF0YT4NCjxCYXNlLTAtMzc4X0RhdGEgaWQ9InJlZi0zODEiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ek9EUThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMzc4X0RhdGE+DQo8QmFzZS0wLTM3OF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMzc4X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTM3OV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0zNzlfSGFzRGF0YT4NCjxCYXNlLTAtMzc5X0RhdGEgaWQ9InJlZi0zODIiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ek9EVThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMzc5X0RhdGE+DQo8QmFzZS0wLTM3OV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMzc5X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTM4MF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0zODBfSGFzRGF0YT4NCjxCYXNlLTAtMzgwX0RhdGEgaWQ9InJlZi0zODMiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ek9EWThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMzgwX0RhdGE+DQo8QmFzZS0wLTM4MF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMzgwX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTM4MV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0zODFfSGFzRGF0YT4NCjxCYXNlLTAtMzgxX0RhdGEgaWQ9InJlZi0zODQiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ek9EYzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMzgxX0RhdGE+DQo8QmFzZS0wLTM4MV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMzgxX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTM4Ml9IYXNEYXRhPnRydWU8L0Jhc2UtMC0zODJfSGFzRGF0YT4NCjxCYXNlLTAtMzgyX0RhdGEgaWQ9InJlZi0zODUiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ek9EZzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMzgyX0RhdGE+DQo8QmFzZS0wLTM4Ml9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMzgyX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTM4M19IYXNEYXRhPnRydWU8L0Jhc2UtMC0zODNfSGFzRGF0YT4NCjxCYXNlLTAtMzgzX0RhdGEgaWQ9InJlZi0zODYiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ek9EazhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMzgzX0RhdGE+DQo8QmFzZS0wLTM4M19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMzgzX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTM4NF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0zODRfSGFzRGF0YT4NCjxCYXNlLTAtMzg0X0RhdGEgaWQ9InJlZi0zODciPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ek9UQThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMzg0X0RhdGE+DQo8QmFzZS0wLTM4NF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMzg0X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTM4NV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0zODVfSGFzRGF0YT4NCjxCYXNlLTAtMzg1X0RhdGEgaWQ9InJlZi0zODgiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ek9URThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMzg1X0RhdGE+DQo8QmFzZS0wLTM4NV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMzg1X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTM4Nl9IYXNEYXRhPnRydWU8L0Jhc2UtMC0zODZfSGFzRGF0YT4NCjxCYXNlLTAtMzg2X0RhdGEgaWQ9InJlZi0zODkiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ek9USThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMzg2X0RhdGE+DQo8QmFzZS0wLTM4Nl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMzg2X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTM4N19IYXNEYXRhPnRydWU8L0Jhc2UtMC0zODdfSGFzRGF0YT4NCjxCYXNlLTAtMzg3X0RhdGEgaWQ9InJlZi0zOTAiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ek9UTThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMzg3X0RhdGE+DQo8QmFzZS0wLTM4N19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMzg3X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTM4OF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0zODhfSGFzRGF0YT4NCjxCYXNlLTAtMzg4X0RhdGEgaWQ9InJlZi0zOTEiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ek9UUThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMzg4X0RhdGE+DQo8QmFzZS0wLTM4OF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMzg4X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTM4OV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0zODlfSGFzRGF0YT4NCjxCYXNlLTAtMzg5X0RhdGEgaWQ9InJlZi0zOTIiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ek9UVThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMzg5X0RhdGE+DQo8QmFzZS0wLTM4OV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMzg5X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTM5MF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0zOTBfSGFzRGF0YT4NCjxCYXNlLTAtMzkwX0RhdGEgaWQ9InJlZi0zOTMiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ek9UWThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMzkwX0RhdGE+DQo8QmFzZS0wLTM5MF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMzkwX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTM5MV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0zOTFfSGFzRGF0YT4NCjxCYXNlLTAtMzkxX0RhdGEgaWQ9InJlZi0zOTQiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ek9UYzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMzkxX0RhdGE+DQo8QmFzZS0wLTM5MV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMzkxX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTM5Ml9IYXNEYXRhPnRydWU8L0Jhc2UtMC0zOTJfSGFzRGF0YT4NCjxCYXNlLTAtMzkyX0RhdGEgaWQ9InJlZi0zOTUiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ek9UZzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMzkyX0RhdGE+DQo8QmFzZS0wLTM5Ml9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMzkyX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTM5M19IYXNEYXRhPnRydWU8L0Jhc2UtMC0zOTNfSGFzRGF0YT4NCjxCYXNlLTAtMzkzX0RhdGEgaWQ9InJlZi0zOTYiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ek9UazhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMzkzX0RhdGE+DQo8QmFzZS0wLTM5M19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMzkzX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTM5NF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0zOTRfSGFzRGF0YT4NCjxCYXNlLTAtMzk0X0RhdGEgaWQ9InJlZi0zOTciPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ME1EQThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMzk0X0RhdGE+DQo8QmFzZS0wLTM5NF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMzk0X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTM5NV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0zOTVfSGFzRGF0YT4NCjxCYXNlLTAtMzk1X0RhdGEgaWQ9InJlZi0zOTgiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ME1ERThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMzk1X0RhdGE+DQo8QmFzZS0wLTM5NV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMzk1X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTM5Nl9IYXNEYXRhPnRydWU8L0Jhc2UtMC0zOTZfSGFzRGF0YT4NCjxCYXNlLTAtMzk2X0RhdGEgaWQ9InJlZi0zOTkiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ME1ESThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMzk2X0RhdGE+DQo8QmFzZS0wLTM5Nl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMzk2X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTM5N19IYXNEYXRhPnRydWU8L0Jhc2UtMC0zOTdfSGFzRGF0YT4NCjxCYXNlLTAtMzk3X0RhdGEgaWQ9InJlZi00MDAiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ME1ETThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMzk3X0RhdGE+DQo8QmFzZS0wLTM5N19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMzk3X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTM5OF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0zOThfSGFzRGF0YT4NCjxCYXNlLTAtMzk4X0RhdGEgaWQ9InJlZi00MDEiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ME1EUThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMzk4X0RhdGE+DQo8QmFzZS0wLTM5OF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMzk4X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTM5OV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0zOTlfSGFzRGF0YT4NCjxCYXNlLTAtMzk5X0RhdGEgaWQ9InJlZi00MDIiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ME1EVThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMzk5X0RhdGE+DQo8QmFzZS0wLTM5OV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMzk5X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTQwMF9IYXNEYXRhPnRydWU8L0Jhc2UtMC00MDBfSGFzRGF0YT4NCjxCYXNlLTAtNDAwX0RhdGEgaWQ9InJlZi00MDMiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ME1EWThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNDAwX0RhdGE+DQo8QmFzZS0wLTQwMF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNDAwX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTQwMV9IYXNEYXRhPnRydWU8L0Jhc2UtMC00MDFfSGFzRGF0YT4NCjxCYXNlLTAtNDAxX0RhdGEgaWQ9InJlZi00MDQiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ME1EYzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNDAxX0RhdGE+DQo8QmFzZS0wLTQwMV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNDAxX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTQwMl9IYXNEYXRhPnRydWU8L0Jhc2UtMC00MDJfSGFzRGF0YT4NCjxCYXNlLTAtNDAyX0RhdGEgaWQ9InJlZi00MDUiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ME1EZzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNDAyX0RhdGE+DQo8QmFzZS0wLTQwMl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNDAyX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTQwM19IYXNEYXRhPnRydWU8L0Jhc2UtMC00MDNfSGFzRGF0YT4NCjxCYXNlLTAtNDAzX0RhdGEgaWQ9InJlZi00MDYiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ME1EazhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNDAzX0RhdGE+DQo8QmFzZS0wLTQwM19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNDAzX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTQwNF9IYXNEYXRhPnRydWU8L0Jhc2UtMC00MDRfSGFzRGF0YT4NCjxCYXNlLTAtNDA0X0RhdGEgaWQ9InJlZi00MDciPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ME1UQThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNDA0X0RhdGE+DQo8QmFzZS0wLTQwNF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNDA0X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTQwNV9IYXNEYXRhPnRydWU8L0Jhc2UtMC00MDVfSGFzRGF0YT4NCjxCYXNlLTAtNDA1X0RhdGEgaWQ9InJlZi00MDgiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ME1URThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNDA1X0RhdGE+DQo8QmFzZS0wLTQwNV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNDA1X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTQwNl9IYXNEYXRhPnRydWU8L0Jhc2UtMC00MDZfSGFzRGF0YT4NCjxCYXNlLTAtNDA2X0RhdGEgaWQ9InJlZi00MDkiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ME1USThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNDA2X0RhdGE+DQo8QmFzZS0wLTQwNl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNDA2X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTQwN19IYXNEYXRhPnRydWU8L0Jhc2UtMC00MDdfSGFzRGF0YT4NCjxCYXNlLTAtNDA3X0RhdGEgaWQ9InJlZi00MTAiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ME1UTThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNDA3X0RhdGE+DQo8QmFzZS0wLTQwN19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNDA3X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTQwOF9IYXNEYXRhPnRydWU8L0Jhc2UtMC00MDhfSGFzRGF0YT4NCjxCYXNlLTAtNDA4X0RhdGEgaWQ9InJlZi00MTEiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ME1UUThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNDA4X0RhdGE+DQo8QmFzZS0wLTQwOF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNDA4X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTQwOV9IYXNEYXRhPnRydWU8L0Jhc2UtMC00MDlfSGFzRGF0YT4NCjxCYXNlLTAtNDA5X0RhdGEgaWQ9InJlZi00MTIiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ME1UVThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNDA5X0RhdGE+DQo8QmFzZS0wLTQwOV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNDA5X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTQxMF9IYXNEYXRhPnRydWU8L0Jhc2UtMC00MTBfSGFzRGF0YT4NCjxCYXNlLTAtNDEwX0RhdGEgaWQ9InJlZi00MTMiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ME1UWThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNDEwX0RhdGE+DQo8QmFzZS0wLTQxMF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNDEwX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTQxMV9IYXNEYXRhPnRydWU8L0Jhc2UtMC00MTFfSGFzRGF0YT4NCjxCYXNlLTAtNDExX0RhdGEgaWQ9InJlZi00MTQiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ME1UYzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNDExX0RhdGE+DQo8QmFzZS0wLTQxMV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNDExX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTQxMl9IYXNEYXRhPnRydWU8L0Jhc2UtMC00MTJfSGFzRGF0YT4NCjxCYXNlLTAtNDEyX0RhdGEgaWQ9InJlZi00MTUiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ME1UZzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNDEyX0RhdGE+DQo8QmFzZS0wLTQxMl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNDEyX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTQxM19IYXNEYXRhPnRydWU8L0Jhc2UtMC00MTNfSGFzRGF0YT4NCjxCYXNlLTAtNDEzX0RhdGEgaWQ9InJlZi00MTYiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ME1UazhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNDEzX0RhdGE+DQo8QmFzZS0wLTQxM19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNDEzX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTQxNF9IYXNEYXRhPnRydWU8L0Jhc2UtMC00MTRfSGFzRGF0YT4NCjxCYXNlLTAtNDE0X0RhdGEgaWQ9InJlZi00MTciPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ME1qQThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNDE0X0RhdGE+DQo8QmFzZS0wLTQxNF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNDE0X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTQxNV9IYXNEYXRhPnRydWU8L0Jhc2UtMC00MTVfSGFzRGF0YT4NCjxCYXNlLTAtNDE1X0RhdGEgaWQ9InJlZi00MTgiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ME1qRThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNDE1X0RhdGE+DQo8QmFzZS0wLTQxNV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNDE1X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTQxNl9IYXNEYXRhPnRydWU8L0Jhc2UtMC00MTZfSGFzRGF0YT4NCjxCYXNlLTAtNDE2X0RhdGEgaWQ9InJlZi00MTkiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ME1qSThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNDE2X0RhdGE+DQo8QmFzZS0wLTQxNl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNDE2X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTQxN19IYXNEYXRhPnRydWU8L0Jhc2UtMC00MTdfSGFzRGF0YT4NCjxCYXNlLTAtNDE3X0RhdGEgaWQ9InJlZi00MjAiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ME1qTThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNDE3X0RhdGE+DQo8QmFzZS0wLTQxN19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNDE3X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTQxOF9IYXNEYXRhPnRydWU8L0Jhc2UtMC00MThfSGFzRGF0YT4NCjxCYXNlLTAtNDE4X0RhdGEgaWQ9InJlZi00MjEiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ME1qUThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNDE4X0RhdGE+DQo8QmFzZS0wLTQxOF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNDE4X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTQxOV9IYXNEYXRhPnRydWU8L0Jhc2UtMC00MTlfSGFzRGF0YT4NCjxCYXNlLTAtNDE5X0RhdGEgaWQ9InJlZi00MjIiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ME1qVThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNDE5X0RhdGE+DQo8QmFzZS0wLTQxOV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNDE5X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTQyMF9IYXNEYXRhPnRydWU8L0Jhc2UtMC00MjBfSGFzRGF0YT4NCjxCYXNlLTAtNDIwX0RhdGEgaWQ9InJlZi00MjMiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ME1qWThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNDIwX0RhdGE+DQo8QmFzZS0wLTQyMF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNDIwX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTQyMV9IYXNEYXRhPnRydWU8L0Jhc2UtMC00MjFfSGFzRGF0YT4NCjxCYXNlLTAtNDIxX0RhdGEgaWQ9InJlZi00MjQiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ME1qYzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNDIxX0RhdGE+DQo8QmFzZS0wLTQyMV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNDIxX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTQyMl9IYXNEYXRhPnRydWU8L0Jhc2UtMC00MjJfSGFzRGF0YT4NCjxCYXNlLTAtNDIyX0RhdGEgaWQ9InJlZi00MjUiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ME1qZzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNDIyX0RhdGE+DQo8QmFzZS0wLTQyMl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNDIyX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTQyM19IYXNEYXRhPnRydWU8L0Jhc2UtMC00MjNfSGFzRGF0YT4NCjxCYXNlLTAtNDIzX0RhdGEgaWQ9InJlZi00MjYiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ME1qazhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNDIzX0RhdGE+DQo8QmFzZS0wLTQyM19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNDIzX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTQyNF9IYXNEYXRhPnRydWU8L0Jhc2UtMC00MjRfSGFzRGF0YT4NCjxCYXNlLTAtNDI0X0RhdGEgaWQ9InJlZi00MjciPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ME16QThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNDI0X0RhdGE+DQo8QmFzZS0wLTQyNF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNDI0X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTQyNV9IYXNEYXRhPnRydWU8L0Jhc2UtMC00MjVfSGFzRGF0YT4NCjxCYXNlLTAtNDI1X0RhdGEgaWQ9InJlZi00MjgiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ME16RThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNDI1X0RhdGE+DQo8QmFzZS0wLTQyNV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNDI1X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTQyNl9IYXNEYXRhPnRydWU8L0Jhc2UtMC00MjZfSGFzRGF0YT4NCjxCYXNlLTAtNDI2X0RhdGEgaWQ9InJlZi00MjkiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ME16SThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNDI2X0RhdGE+DQo8QmFzZS0wLTQyNl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNDI2X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTQyN19IYXNEYXRhPnRydWU8L0Jhc2UtMC00MjdfSGFzRGF0YT4NCjxCYXNlLTAtNDI3X0RhdGEgaWQ9InJlZi00MzAiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ME16TThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNDI3X0RhdGE+DQo8QmFzZS0wLTQyN19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNDI3X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTQyOF9IYXNEYXRhPnRydWU8L0Jhc2UtMC00MjhfSGFzRGF0YT4NCjxCYXNlLTAtNDI4X0RhdGEgaWQ9InJlZi00MzEiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ME16UThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNDI4X0RhdGE+DQo8QmFzZS0wLTQyOF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNDI4X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTQyOV9IYXNEYXRhPnRydWU8L0Jhc2UtMC00MjlfSGFzRGF0YT4NCjxCYXNlLTAtNDI5X0RhdGEgaWQ9InJlZi00MzIiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ME16VThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNDI5X0RhdGE+DQo8QmFzZS0wLTQyOV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNDI5X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTQzMF9IYXNEYXRhPnRydWU8L0Jhc2UtMC00MzBfSGFzRGF0YT4NCjxCYXNlLTAtNDMwX0RhdGEgaWQ9InJlZi00MzMiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ME16WThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNDMwX0RhdGE+DQo8QmFzZS0wLTQzMF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNDMwX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTQzMV9IYXNEYXRhPnRydWU8L0Jhc2UtMC00MzFfSGFzRGF0YT4NCjxCYXNlLTAtNDMxX0RhdGEgaWQ9InJlZi00MzQiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ME16YzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNDMxX0RhdGE+DQo8QmFzZS0wLTQzMV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNDMxX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTQzMl9IYXNEYXRhPnRydWU8L0Jhc2UtMC00MzJfSGFzRGF0YT4NCjxCYXNlLTAtNDMyX0RhdGEgaWQ9InJlZi00MzUiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ME16ZzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNDMyX0RhdGE+DQo8QmFzZS0wLTQzMl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNDMyX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTQzM19IYXNEYXRhPnRydWU8L0Jhc2UtMC00MzNfSGFzRGF0YT4NCjxCYXNlLTAtNDMzX0RhdGEgaWQ9InJlZi00MzYiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ME16azhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNDMzX0RhdGE+DQo8QmFzZS0wLTQzM19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNDMzX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTQzNF9IYXNEYXRhPnRydWU8L0Jhc2UtMC00MzRfSGFzRGF0YT4NCjxCYXNlLTAtNDM0X0RhdGEgaWQ9InJlZi00MzciPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ME5EQThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNDM0X0RhdGE+DQo8QmFzZS0wLTQzNF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNDM0X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTQzNV9IYXNEYXRhPnRydWU8L0Jhc2UtMC00MzVfSGFzRGF0YT4NCjxCYXNlLTAtNDM1X0RhdGEgaWQ9InJlZi00MzgiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ME5ERThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNDM1X0RhdGE+DQo8QmFzZS0wLTQzNV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNDM1X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTQzNl9IYXNEYXRhPnRydWU8L0Jhc2UtMC00MzZfSGFzRGF0YT4NCjxCYXNlLTAtNDM2X0RhdGEgaWQ9InJlZi00MzkiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ME5ESThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNDM2X0RhdGE+DQo8QmFzZS0wLTQzNl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNDM2X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTQzN19IYXNEYXRhPnRydWU8L0Jhc2UtMC00MzdfSGFzRGF0YT4NCjxCYXNlLTAtNDM3X0RhdGEgaWQ9InJlZi00NDAiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ME5ETThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNDM3X0RhdGE+DQo8QmFzZS0wLTQzN19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNDM3X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTQzOF9IYXNEYXRhPnRydWU8L0Jhc2UtMC00MzhfSGFzRGF0YT4NCjxCYXNlLTAtNDM4X0RhdGEgaWQ9InJlZi00NDEiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ME5EUThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNDM4X0RhdGE+DQo8QmFzZS0wLTQzOF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNDM4X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTQzOV9IYXNEYXRhPnRydWU8L0Jhc2UtMC00MzlfSGFzRGF0YT4NCjxCYXNlLTAtNDM5X0RhdGEgaWQ9InJlZi00NDIiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ME5EVThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNDM5X0RhdGE+DQo8QmFzZS0wLTQzOV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNDM5X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTQ0MF9IYXNEYXRhPnRydWU8L0Jhc2UtMC00NDBfSGFzRGF0YT4NCjxCYXNlLTAtNDQwX0RhdGEgaWQ9InJlZi00NDMiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ME5EWThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNDQwX0RhdGE+DQo8QmFzZS0wLTQ0MF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNDQwX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTQ0MV9IYXNEYXRhPnRydWU8L0Jhc2UtMC00NDFfSGFzRGF0YT4NCjxCYXNlLTAtNDQxX0RhdGEgaWQ9InJlZi00NDQiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ME5EYzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNDQxX0RhdGE+DQo8QmFzZS0wLTQ0MV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNDQxX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTQ0Ml9IYXNEYXRhPnRydWU8L0Jhc2UtMC00NDJfSGFzRGF0YT4NCjxCYXNlLTAtNDQyX0RhdGEgaWQ9InJlZi00NDUiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ME5EZzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNDQyX0RhdGE+DQo8QmFzZS0wLTQ0Ml9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNDQyX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTQ0M19IYXNEYXRhPnRydWU8L0Jhc2UtMC00NDNfSGFzRGF0YT4NCjxCYXNlLTAtNDQzX0RhdGEgaWQ9InJlZi00NDYiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ME5EazhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNDQzX0RhdGE+DQo8QmFzZS0wLTQ0M19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNDQzX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTQ0NF9IYXNEYXRhPnRydWU8L0Jhc2UtMC00NDRfSGFzRGF0YT4NCjxCYXNlLTAtNDQ0X0RhdGEgaWQ9InJlZi00NDciPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ME5UQThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNDQ0X0RhdGE+DQo8QmFzZS0wLTQ0NF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNDQ0X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTQ0NV9IYXNEYXRhPnRydWU8L0Jhc2UtMC00NDVfSGFzRGF0YT4NCjxCYXNlLTAtNDQ1X0RhdGEgaWQ9InJlZi00NDgiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ME5URThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNDQ1X0RhdGE+DQo8QmFzZS0wLTQ0NV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNDQ1X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTQ0Nl9IYXNEYXRhPnRydWU8L0Jhc2UtMC00NDZfSGFzRGF0YT4NCjxCYXNlLTAtNDQ2X0RhdGEgaWQ9InJlZi00NDkiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ME5USThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNDQ2X0RhdGE+DQo8QmFzZS0wLTQ0Nl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNDQ2X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTQ0N19IYXNEYXRhPnRydWU8L0Jhc2UtMC00NDdfSGFzRGF0YT4NCjxCYXNlLTAtNDQ3X0RhdGEgaWQ9InJlZi00NTAiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ME5UTThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNDQ3X0RhdGE+DQo8QmFzZS0wLTQ0N19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNDQ3X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTQ0OF9IYXNEYXRhPnRydWU8L0Jhc2UtMC00NDhfSGFzRGF0YT4NCjxCYXNlLTAtNDQ4X0RhdGEgaWQ9InJlZi00NTEiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ME5UUThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNDQ4X0RhdGE+DQo8QmFzZS0wLTQ0OF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNDQ4X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTQ0OV9IYXNEYXRhPnRydWU8L0Jhc2UtMC00NDlfSGFzRGF0YT4NCjxCYXNlLTAtNDQ5X0RhdGEgaWQ9InJlZi00NTIiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ME5UVThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNDQ5X0RhdGE+DQo8QmFzZS0wLTQ0OV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNDQ5X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTQ1MF9IYXNEYXRhPnRydWU8L0Jhc2UtMC00NTBfSGFzRGF0YT4NCjxCYXNlLTAtNDUwX0RhdGEgaWQ9InJlZi00NTMiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ME5UWThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNDUwX0RhdGE+DQo8QmFzZS0wLTQ1MF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNDUwX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTQ1MV9IYXNEYXRhPnRydWU8L0Jhc2UtMC00NTFfSGFzRGF0YT4NCjxCYXNlLTAtNDUxX0RhdGEgaWQ9InJlZi00NTQiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ME5UYzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNDUxX0RhdGE+DQo8QmFzZS0wLTQ1MV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNDUxX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTQ1Ml9IYXNEYXRhPnRydWU8L0Jhc2UtMC00NTJfSGFzRGF0YT4NCjxCYXNlLTAtNDUyX0RhdGEgaWQ9InJlZi00NTUiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ME5UZzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNDUyX0RhdGE+DQo8QmFzZS0wLTQ1Ml9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNDUyX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTQ1M19IYXNEYXRhPnRydWU8L0Jhc2UtMC00NTNfSGFzRGF0YT4NCjxCYXNlLTAtNDUzX0RhdGEgaWQ9InJlZi00NTYiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ME5UazhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNDUzX0RhdGE+DQo8QmFzZS0wLTQ1M19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNDUzX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTQ1NF9IYXNEYXRhPnRydWU8L0Jhc2UtMC00NTRfSGFzRGF0YT4NCjxCYXNlLTAtNDU0X0RhdGEgaWQ9InJlZi00NTciPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ME5qQThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNDU0X0RhdGE+DQo8QmFzZS0wLTQ1NF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNDU0X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTQ1NV9IYXNEYXRhPnRydWU8L0Jhc2UtMC00NTVfSGFzRGF0YT4NCjxCYXNlLTAtNDU1X0RhdGEgaWQ9InJlZi00NTgiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ME5qRThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNDU1X0RhdGE+DQo8QmFzZS0wLTQ1NV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNDU1X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTQ1Nl9IYXNEYXRhPnRydWU8L0Jhc2UtMC00NTZfSGFzRGF0YT4NCjxCYXNlLTAtNDU2X0RhdGEgaWQ9InJlZi00NTkiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ME5qSThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNDU2X0RhdGE+DQo8QmFzZS0wLTQ1Nl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNDU2X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTQ1N19IYXNEYXRhPnRydWU8L0Jhc2UtMC00NTdfSGFzRGF0YT4NCjxCYXNlLTAtNDU3X0RhdGEgaWQ9InJlZi00NjAiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ME5qTThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNDU3X0RhdGE+DQo8QmFzZS0wLTQ1N19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNDU3X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTQ1OF9IYXNEYXRhPnRydWU8L0Jhc2UtMC00NThfSGFzRGF0YT4NCjxCYXNlLTAtNDU4X0RhdGEgaWQ9InJlZi00NjEiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ME5qUThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNDU4X0RhdGE+DQo8QmFzZS0wLTQ1OF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNDU4X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTQ1OV9IYXNEYXRhPnRydWU8L0Jhc2UtMC00NTlfSGFzRGF0YT4NCjxCYXNlLTAtNDU5X0RhdGEgaWQ9InJlZi00NjIiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ME5qVThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNDU5X0RhdGE+DQo8QmFzZS0wLTQ1OV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNDU5X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTQ2MF9IYXNEYXRhPnRydWU8L0Jhc2UtMC00NjBfSGFzRGF0YT4NCjxCYXNlLTAtNDYwX0RhdGEgaWQ9InJlZi00NjMiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ME5qWThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNDYwX0RhdGE+DQo8QmFzZS0wLTQ2MF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNDYwX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTQ2MV9IYXNEYXRhPnRydWU8L0Jhc2UtMC00NjFfSGFzRGF0YT4NCjxCYXNlLTAtNDYxX0RhdGEgaWQ9InJlZi00NjQiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ME5qYzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNDYxX0RhdGE+DQo8QmFzZS0wLTQ2MV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNDYxX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTQ2Ml9IYXNEYXRhPnRydWU8L0Jhc2UtMC00NjJfSGFzRGF0YT4NCjxCYXNlLTAtNDYyX0RhdGEgaWQ9InJlZi00NjUiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ME5qZzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNDYyX0RhdGE+DQo8QmFzZS0wLTQ2Ml9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNDYyX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTQ2M19IYXNEYXRhPnRydWU8L0Jhc2UtMC00NjNfSGFzRGF0YT4NCjxCYXNlLTAtNDYzX0RhdGEgaWQ9InJlZi00NjYiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ME5qazhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNDYzX0RhdGE+DQo8QmFzZS0wLTQ2M19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNDYzX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTQ2NF9IYXNEYXRhPnRydWU8L0Jhc2UtMC00NjRfSGFzRGF0YT4NCjxCYXNlLTAtNDY0X0RhdGEgaWQ9InJlZi00NjciPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ME56QThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNDY0X0RhdGE+DQo8QmFzZS0wLTQ2NF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNDY0X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTQ2NV9IYXNEYXRhPnRydWU8L0Jhc2UtMC00NjVfSGFzRGF0YT4NCjxCYXNlLTAtNDY1X0RhdGEgaWQ9InJlZi00NjgiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ME56RThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNDY1X0RhdGE+DQo8QmFzZS0wLTQ2NV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNDY1X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTQ2Nl9IYXNEYXRhPnRydWU8L0Jhc2UtMC00NjZfSGFzRGF0YT4NCjxCYXNlLTAtNDY2X0RhdGEgaWQ9InJlZi00NjkiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ME56SThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNDY2X0RhdGE+DQo8QmFzZS0wLTQ2Nl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNDY2X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTQ2N19IYXNEYXRhPnRydWU8L0Jhc2UtMC00NjdfSGFzRGF0YT4NCjxCYXNlLTAtNDY3X0RhdGEgaWQ9InJlZi00NzAiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ME56TThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNDY3X0RhdGE+DQo8QmFzZS0wLTQ2N19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNDY3X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTQ2OF9IYXNEYXRhPnRydWU8L0Jhc2UtMC00NjhfSGFzRGF0YT4NCjxCYXNlLTAtNDY4X0RhdGEgaWQ9InJlZi00NzEiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ME56UThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNDY4X0RhdGE+DQo8QmFzZS0wLTQ2OF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNDY4X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTQ2OV9IYXNEYXRhPnRydWU8L0Jhc2UtMC00NjlfSGFzRGF0YT4NCjxCYXNlLTAtNDY5X0RhdGEgaWQ9InJlZi00NzIiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ME56VThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNDY5X0RhdGE+DQo8QmFzZS0wLTQ2OV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNDY5X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTQ3MF9IYXNEYXRhPnRydWU8L0Jhc2UtMC00NzBfSGFzRGF0YT4NCjxCYXNlLTAtNDcwX0RhdGEgaWQ9InJlZi00NzMiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ME56WThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNDcwX0RhdGE+DQo8QmFzZS0wLTQ3MF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNDcwX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTQ3MV9IYXNEYXRhPnRydWU8L0Jhc2UtMC00NzFfSGFzRGF0YT4NCjxCYXNlLTAtNDcxX0RhdGEgaWQ9InJlZi00NzQiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ME56YzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNDcxX0RhdGE+DQo8QmFzZS0wLTQ3MV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNDcxX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTQ3Ml9IYXNEYXRhPnRydWU8L0Jhc2UtMC00NzJfSGFzRGF0YT4NCjxCYXNlLTAtNDcyX0RhdGEgaWQ9InJlZi00NzUiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ME56ZzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNDcyX0RhdGE+DQo8QmFzZS0wLTQ3Ml9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNDcyX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTQ3M19IYXNEYXRhPnRydWU8L0Jhc2UtMC00NzNfSGFzRGF0YT4NCjxCYXNlLTAtNDczX0RhdGEgaWQ9InJlZi00NzYiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ME56azhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNDczX0RhdGE+DQo8QmFzZS0wLTQ3M19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNDczX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTQ3NF9IYXNEYXRhPnRydWU8L0Jhc2UtMC00NzRfSGFzRGF0YT4NCjxCYXNlLTAtNDc0X0RhdGEgaWQ9InJlZi00NzciPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ME9EQThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNDc0X0RhdGE+DQo8QmFzZS0wLTQ3NF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNDc0X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTQ3NV9IYXNEYXRhPnRydWU8L0Jhc2UtMC00NzVfSGFzRGF0YT4NCjxCYXNlLTAtNDc1X0RhdGEgaWQ9InJlZi00NzgiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ME9ERThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNDc1X0RhdGE+DQo8QmFzZS0wLTQ3NV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNDc1X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTQ3Nl9IYXNEYXRhPnRydWU8L0Jhc2UtMC00NzZfSGFzRGF0YT4NCjxCYXNlLTAtNDc2X0RhdGEgaWQ9InJlZi00NzkiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ME9ESThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNDc2X0RhdGE+DQo8QmFzZS0wLTQ3Nl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNDc2X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTQ3N19IYXNEYXRhPnRydWU8L0Jhc2UtMC00NzdfSGFzRGF0YT4NCjxCYXNlLTAtNDc3X0RhdGEgaWQ9InJlZi00ODAiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ME9ETThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNDc3X0RhdGE+DQo8QmFzZS0wLTQ3N19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNDc3X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTQ3OF9IYXNEYXRhPnRydWU8L0Jhc2UtMC00NzhfSGFzRGF0YT4NCjxCYXNlLTAtNDc4X0RhdGEgaWQ9InJlZi00ODEiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ME9EUThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNDc4X0RhdGE+DQo8QmFzZS0wLTQ3OF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNDc4X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTQ3OV9IYXNEYXRhPnRydWU8L0Jhc2UtMC00NzlfSGFzRGF0YT4NCjxCYXNlLTAtNDc5X0RhdGEgaWQ9InJlZi00ODIiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ME9EVThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNDc5X0RhdGE+DQo8QmFzZS0wLTQ3OV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNDc5X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTQ4MF9IYXNEYXRhPnRydWU8L0Jhc2UtMC00ODBfSGFzRGF0YT4NCjxCYXNlLTAtNDgwX0RhdGEgaWQ9InJlZi00ODMiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ME9EWThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNDgwX0RhdGE+DQo8QmFzZS0wLTQ4MF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNDgwX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTQ4MV9IYXNEYXRhPnRydWU8L0Jhc2UtMC00ODFfSGFzRGF0YT4NCjxCYXNlLTAtNDgxX0RhdGEgaWQ9InJlZi00ODQiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ME9EYzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNDgxX0RhdGE+DQo8QmFzZS0wLTQ4MV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNDgxX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTQ4Ml9IYXNEYXRhPnRydWU8L0Jhc2UtMC00ODJfSGFzRGF0YT4NCjxCYXNlLTAtNDgyX0RhdGEgaWQ9InJlZi00ODUiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ME9EZzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNDgyX0RhdGE+DQo8QmFzZS0wLTQ4Ml9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNDgyX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTQ4M19IYXNEYXRhPnRydWU8L0Jhc2UtMC00ODNfSGFzRGF0YT4NCjxCYXNlLTAtNDgzX0RhdGEgaWQ9InJlZi00ODYiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ME9EazhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNDgzX0RhdGE+DQo8QmFzZS0wLTQ4M19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNDgzX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTQ4NF9IYXNEYXRhPnRydWU8L0Jhc2UtMC00ODRfSGFzRGF0YT4NCjxCYXNlLTAtNDg0X0RhdGEgaWQ9InJlZi00ODciPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ME9UQThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNDg0X0RhdGE+DQo8QmFzZS0wLTQ4NF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNDg0X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTQ4NV9IYXNEYXRhPnRydWU8L0Jhc2UtMC00ODVfSGFzRGF0YT4NCjxCYXNlLTAtNDg1X0RhdGEgaWQ9InJlZi00ODgiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ME9URThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNDg1X0RhdGE+DQo8QmFzZS0wLTQ4NV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNDg1X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTQ4Nl9IYXNEYXRhPnRydWU8L0Jhc2UtMC00ODZfSGFzRGF0YT4NCjxCYXNlLTAtNDg2X0RhdGEgaWQ9InJlZi00ODkiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ME9USThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNDg2X0RhdGE+DQo8QmFzZS0wLTQ4Nl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNDg2X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTQ4N19IYXNEYXRhPnRydWU8L0Jhc2UtMC00ODdfSGFzRGF0YT4NCjxCYXNlLTAtNDg3X0RhdGEgaWQ9InJlZi00OTAiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ME9UTThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNDg3X0RhdGE+DQo8QmFzZS0wLTQ4N19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNDg3X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTQ4OF9IYXNEYXRhPnRydWU8L0Jhc2UtMC00ODhfSGFzRGF0YT4NCjxCYXNlLTAtNDg4X0RhdGEgaWQ9InJlZi00OTEiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ME9UUThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNDg4X0RhdGE+DQo8QmFzZS0wLTQ4OF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNDg4X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTQ4OV9IYXNEYXRhPnRydWU8L0Jhc2UtMC00ODlfSGFzRGF0YT4NCjxCYXNlLTAtNDg5X0RhdGEgaWQ9InJlZi00OTIiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ME9UVThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNDg5X0RhdGE+DQo8QmFzZS0wLTQ4OV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNDg5X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTQ5MF9IYXNEYXRhPnRydWU8L0Jhc2UtMC00OTBfSGFzRGF0YT4NCjxCYXNlLTAtNDkwX0RhdGEgaWQ9InJlZi00OTMiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ME9UWThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNDkwX0RhdGE+DQo8QmFzZS0wLTQ5MF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNDkwX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTQ5MV9IYXNEYXRhPnRydWU8L0Jhc2UtMC00OTFfSGFzRGF0YT4NCjxCYXNlLTAtNDkxX0RhdGEgaWQ9InJlZi00OTQiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ME9UYzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNDkxX0RhdGE+DQo8QmFzZS0wLTQ5MV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNDkxX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTQ5Ml9IYXNEYXRhPnRydWU8L0Jhc2UtMC00OTJfSGFzRGF0YT4NCjxCYXNlLTAtNDkyX0RhdGEgaWQ9InJlZi00OTUiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ME9UZzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNDkyX0RhdGE+DQo8QmFzZS0wLTQ5Ml9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNDkyX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTQ5M19IYXNEYXRhPnRydWU8L0Jhc2UtMC00OTNfSGFzRGF0YT4NCjxCYXNlLTAtNDkzX0RhdGEgaWQ9InJlZi00OTYiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0ME9UazhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNDkzX0RhdGE+DQo8QmFzZS0wLTQ5M19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNDkzX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTQ5NF9IYXNEYXRhPnRydWU8L0Jhc2UtMC00OTRfSGFzRGF0YT4NCjxCYXNlLTAtNDk0X0RhdGEgaWQ9InJlZi00OTciPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0MU1EQThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNDk0X0RhdGE+DQo8QmFzZS0wLTQ5NF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNDk0X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTQ5NV9IYXNEYXRhPnRydWU8L0Jhc2UtMC00OTVfSGFzRGF0YT4NCjxCYXNlLTAtNDk1X0RhdGEgaWQ9InJlZi00OTgiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0MU1ERThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNDk1X0RhdGE+DQo8QmFzZS0wLTQ5NV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNDk1X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTQ5Nl9IYXNEYXRhPnRydWU8L0Jhc2UtMC00OTZfSGFzRGF0YT4NCjxCYXNlLTAtNDk2X0RhdGEgaWQ9InJlZi00OTkiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0MU1ESThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNDk2X0RhdGE+DQo8QmFzZS0wLTQ5Nl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNDk2X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTQ5N19IYXNEYXRhPnRydWU8L0Jhc2UtMC00OTdfSGFzRGF0YT4NCjxCYXNlLTAtNDk3X0RhdGEgaWQ9InJlZi01MDAiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0MU1ETThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNDk3X0RhdGE+DQo8QmFzZS0wLTQ5N19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNDk3X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTQ5OF9IYXNEYXRhPnRydWU8L0Jhc2UtMC00OThfSGFzRGF0YT4NCjxCYXNlLTAtNDk4X0RhdGEgaWQ9InJlZi01MDEiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0MU1EUThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNDk4X0RhdGE+DQo8QmFzZS0wLTQ5OF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNDk4X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTQ5OV9IYXNEYXRhPnRydWU8L0Jhc2UtMC00OTlfSGFzRGF0YT4NCjxCYXNlLTAtNDk5X0RhdGEgaWQ9InJlZi01MDIiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0MU1EVThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNDk5X0RhdGE+DQo8QmFzZS0wLTQ5OV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNDk5X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTUwMF9IYXNEYXRhPnRydWU8L0Jhc2UtMC01MDBfSGFzRGF0YT4NCjxCYXNlLTAtNTAwX0RhdGEgaWQ9InJlZi01MDMiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0MU1EWThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNTAwX0RhdGE+DQo8QmFzZS0wLTUwMF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNTAwX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTUwMV9IYXNEYXRhPnRydWU8L0Jhc2UtMC01MDFfSGFzRGF0YT4NCjxCYXNlLTAtNTAxX0RhdGEgaWQ9InJlZi01MDQiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0MU1EYzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNTAxX0RhdGE+DQo8QmFzZS0wLTUwMV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNTAxX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTUwMl9IYXNEYXRhPnRydWU8L0Jhc2UtMC01MDJfSGFzRGF0YT4NCjxCYXNlLTAtNTAyX0RhdGEgaWQ9InJlZi01MDUiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0MU1EZzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNTAyX0RhdGE+DQo8QmFzZS0wLTUwMl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNTAyX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTUwM19IYXNEYXRhPnRydWU8L0Jhc2UtMC01MDNfSGFzRGF0YT4NCjxCYXNlLTAtNTAzX0RhdGEgaWQ9InJlZi01MDYiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0MU1EazhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNTAzX0RhdGE+DQo8QmFzZS0wLTUwM19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNTAzX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTUwNF9IYXNEYXRhPnRydWU8L0Jhc2UtMC01MDRfSGFzRGF0YT4NCjxCYXNlLTAtNTA0X0RhdGEgaWQ9InJlZi01MDciPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0MU1UQThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNTA0X0RhdGE+DQo8QmFzZS0wLTUwNF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNTA0X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTUwNV9IYXNEYXRhPnRydWU8L0Jhc2UtMC01MDVfSGFzRGF0YT4NCjxCYXNlLTAtNTA1X0RhdGEgaWQ9InJlZi01MDgiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0MU1URThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNTA1X0RhdGE+DQo8QmFzZS0wLTUwNV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNTA1X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTUwNl9IYXNEYXRhPnRydWU8L0Jhc2UtMC01MDZfSGFzRGF0YT4NCjxCYXNlLTAtNTA2X0RhdGEgaWQ9InJlZi01MDkiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0MU1USThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNTA2X0RhdGE+DQo8QmFzZS0wLTUwNl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNTA2X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTUwN19IYXNEYXRhPnRydWU8L0Jhc2UtMC01MDdfSGFzRGF0YT4NCjxCYXNlLTAtNTA3X0RhdGEgaWQ9InJlZi01MTAiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0MU1UTThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNTA3X0RhdGE+DQo8QmFzZS0wLTUwN19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNTA3X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTUwOF9IYXNEYXRhPnRydWU8L0Jhc2UtMC01MDhfSGFzRGF0YT4NCjxCYXNlLTAtNTA4X0RhdGEgaWQ9InJlZi01MTEiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0MU1UUThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNTA4X0RhdGE+DQo8QmFzZS0wLTUwOF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNTA4X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTUwOV9IYXNEYXRhPnRydWU8L0Jhc2UtMC01MDlfSGFzRGF0YT4NCjxCYXNlLTAtNTA5X0RhdGEgaWQ9InJlZi01MTIiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0MU1UVThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNTA5X0RhdGE+DQo8QmFzZS0wLTUwOV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNTA5X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTUxMF9IYXNEYXRhPnRydWU8L0Jhc2UtMC01MTBfSGFzRGF0YT4NCjxCYXNlLTAtNTEwX0RhdGEgaWQ9InJlZi01MTMiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0MU1UWThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNTEwX0RhdGE+DQo8QmFzZS0wLTUxMF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNTEwX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTUxMV9IYXNEYXRhPnRydWU8L0Jhc2UtMC01MTFfSGFzRGF0YT4NCjxCYXNlLTAtNTExX0RhdGEgaWQ9InJlZi01MTQiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0MU1UYzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNTExX0RhdGE+DQo8QmFzZS0wLTUxMV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNTExX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTUxMl9IYXNEYXRhPnRydWU8L0Jhc2UtMC01MTJfSGFzRGF0YT4NCjxCYXNlLTAtNTEyX0RhdGEgaWQ9InJlZi01MTUiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0MU1UZzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNTEyX0RhdGE+DQo8QmFzZS0wLTUxMl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNTEyX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTUxM19IYXNEYXRhPnRydWU8L0Jhc2UtMC01MTNfSGFzRGF0YT4NCjxCYXNlLTAtNTEzX0RhdGEgaWQ9InJlZi01MTYiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0MU1UazhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNTEzX0RhdGE+DQo8QmFzZS0wLTUxM19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNTEzX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTUxNF9IYXNEYXRhPnRydWU8L0Jhc2UtMC01MTRfSGFzRGF0YT4NCjxCYXNlLTAtNTE0X0RhdGEgaWQ9InJlZi01MTciPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0MU1qQThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNTE0X0RhdGE+DQo8QmFzZS0wLTUxNF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNTE0X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTUxNV9IYXNEYXRhPnRydWU8L0Jhc2UtMC01MTVfSGFzRGF0YT4NCjxCYXNlLTAtNTE1X0RhdGEgaWQ9InJlZi01MTgiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0MU1qRThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNTE1X0RhdGE+DQo8QmFzZS0wLTUxNV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNTE1X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTUxNl9IYXNEYXRhPnRydWU8L0Jhc2UtMC01MTZfSGFzRGF0YT4NCjxCYXNlLTAtNTE2X0RhdGEgaWQ9InJlZi01MTkiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0MU1qSThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNTE2X0RhdGE+DQo8QmFzZS0wLTUxNl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNTE2X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTUxN19IYXNEYXRhPnRydWU8L0Jhc2UtMC01MTdfSGFzRGF0YT4NCjxCYXNlLTAtNTE3X0RhdGEgaWQ9InJlZi01MjAiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0MU1qTThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNTE3X0RhdGE+DQo8QmFzZS0wLTUxN19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNTE3X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTUxOF9IYXNEYXRhPnRydWU8L0Jhc2UtMC01MThfSGFzRGF0YT4NCjxCYXNlLTAtNTE4X0RhdGEgaWQ9InJlZi01MjEiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0MU1qUThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNTE4X0RhdGE+DQo8QmFzZS0wLTUxOF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNTE4X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTUxOV9IYXNEYXRhPnRydWU8L0Jhc2UtMC01MTlfSGFzRGF0YT4NCjxCYXNlLTAtNTE5X0RhdGEgaWQ9InJlZi01MjIiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0MU1qVThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNTE5X0RhdGE+DQo8QmFzZS0wLTUxOV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNTE5X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTUyMF9IYXNEYXRhPnRydWU8L0Jhc2UtMC01MjBfSGFzRGF0YT4NCjxCYXNlLTAtNTIwX0RhdGEgaWQ9InJlZi01MjMiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0MU1qWThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNTIwX0RhdGE+DQo8QmFzZS0wLTUyMF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNTIwX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTUyMV9IYXNEYXRhPnRydWU8L0Jhc2UtMC01MjFfSGFzRGF0YT4NCjxCYXNlLTAtNTIxX0RhdGEgaWQ9InJlZi01MjQiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0MU1qYzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNTIxX0RhdGE+DQo8QmFzZS0wLTUyMV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNTIxX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTUyMl9IYXNEYXRhPnRydWU8L0Jhc2UtMC01MjJfSGFzRGF0YT4NCjxCYXNlLTAtNTIyX0RhdGEgaWQ9InJlZi01MjUiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0MU1qZzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNTIyX0RhdGE+DQo8QmFzZS0wLTUyMl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNTIyX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTUyM19IYXNEYXRhPnRydWU8L0Jhc2UtMC01MjNfSGFzRGF0YT4NCjxCYXNlLTAtNTIzX0RhdGEgaWQ9InJlZi01MjYiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0MU1qazhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNTIzX0RhdGE+DQo8QmFzZS0wLTUyM19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNTIzX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTUyNF9IYXNEYXRhPnRydWU8L0Jhc2UtMC01MjRfSGFzRGF0YT4NCjxCYXNlLTAtNTI0X0RhdGEgaWQ9InJlZi01MjciPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0MU16QThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNTI0X0RhdGE+DQo8QmFzZS0wLTUyNF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNTI0X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTUyNV9IYXNEYXRhPnRydWU8L0Jhc2UtMC01MjVfSGFzRGF0YT4NCjxCYXNlLTAtNTI1X0RhdGEgaWQ9InJlZi01MjgiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0MU16RThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNTI1X0RhdGE+DQo8QmFzZS0wLTUyNV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNTI1X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTUyNl9IYXNEYXRhPnRydWU8L0Jhc2UtMC01MjZfSGFzRGF0YT4NCjxCYXNlLTAtNTI2X0RhdGEgaWQ9InJlZi01MjkiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0MU16SThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNTI2X0RhdGE+DQo8QmFzZS0wLTUyNl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNTI2X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTUyN19IYXNEYXRhPnRydWU8L0Jhc2UtMC01MjdfSGFzRGF0YT4NCjxCYXNlLTAtNTI3X0RhdGEgaWQ9InJlZi01MzAiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0MU16TThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNTI3X0RhdGE+DQo8QmFzZS0wLTUyN19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNTI3X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTUyOF9IYXNEYXRhPnRydWU8L0Jhc2UtMC01MjhfSGFzRGF0YT4NCjxCYXNlLTAtNTI4X0RhdGEgaWQ9InJlZi01MzEiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0MU16UThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNTI4X0RhdGE+DQo8QmFzZS0wLTUyOF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNTI4X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTUyOV9IYXNEYXRhPnRydWU8L0Jhc2UtMC01MjlfSGFzRGF0YT4NCjxCYXNlLTAtNTI5X0RhdGEgaWQ9InJlZi01MzIiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0MU16VThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNTI5X0RhdGE+DQo8QmFzZS0wLTUyOV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNTI5X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTUzMF9IYXNEYXRhPnRydWU8L0Jhc2UtMC01MzBfSGFzRGF0YT4NCjxCYXNlLTAtNTMwX0RhdGEgaWQ9InJlZi01MzMiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0MU16WThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNTMwX0RhdGE+DQo8QmFzZS0wLTUzMF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNTMwX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTUzMV9IYXNEYXRhPnRydWU8L0Jhc2UtMC01MzFfSGFzRGF0YT4NCjxCYXNlLTAtNTMxX0RhdGEgaWQ9InJlZi01MzQiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0MU16YzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNTMxX0RhdGE+DQo8QmFzZS0wLTUzMV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNTMxX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTUzMl9IYXNEYXRhPnRydWU8L0Jhc2UtMC01MzJfSGFzRGF0YT4NCjxCYXNlLTAtNTMyX0RhdGEgaWQ9InJlZi01MzUiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0MU16ZzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNTMyX0RhdGE+DQo8QmFzZS0wLTUzMl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNTMyX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTUzM19IYXNEYXRhPnRydWU8L0Jhc2UtMC01MzNfSGFzRGF0YT4NCjxCYXNlLTAtNTMzX0RhdGEgaWQ9InJlZi01MzYiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0MU16azhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNTMzX0RhdGE+DQo8QmFzZS0wLTUzM19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNTMzX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTUzNF9IYXNEYXRhPnRydWU8L0Jhc2UtMC01MzRfSGFzRGF0YT4NCjxCYXNlLTAtNTM0X0RhdGEgaWQ9InJlZi01MzciPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0MU5EQThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNTM0X0RhdGE+DQo8QmFzZS0wLTUzNF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNTM0X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTUzNV9IYXNEYXRhPnRydWU8L0Jhc2UtMC01MzVfSGFzRGF0YT4NCjxCYXNlLTAtNTM1X0RhdGEgaWQ9InJlZi01MzgiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0MU5ERThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNTM1X0RhdGE+DQo8QmFzZS0wLTUzNV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNTM1X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTUzNl9IYXNEYXRhPnRydWU8L0Jhc2UtMC01MzZfSGFzRGF0YT4NCjxCYXNlLTAtNTM2X0RhdGEgaWQ9InJlZi01MzkiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0MU5ESThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNTM2X0RhdGE+DQo8QmFzZS0wLTUzNl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNTM2X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTUzN19IYXNEYXRhPnRydWU8L0Jhc2UtMC01MzdfSGFzRGF0YT4NCjxCYXNlLTAtNTM3X0RhdGEgaWQ9InJlZi01NDAiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0MU5ETThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNTM3X0RhdGE+DQo8QmFzZS0wLTUzN19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNTM3X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTUzOF9IYXNEYXRhPnRydWU8L0Jhc2UtMC01MzhfSGFzRGF0YT4NCjxCYXNlLTAtNTM4X0RhdGEgaWQ9InJlZi01NDEiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0MU5EUThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNTM4X0RhdGE+DQo8QmFzZS0wLTUzOF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNTM4X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTUzOV9IYXNEYXRhPnRydWU8L0Jhc2UtMC01MzlfSGFzRGF0YT4NCjxCYXNlLTAtNTM5X0RhdGEgaWQ9InJlZi01NDIiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0MU5EVThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNTM5X0RhdGE+DQo8QmFzZS0wLTUzOV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNTM5X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTU0MF9IYXNEYXRhPnRydWU8L0Jhc2UtMC01NDBfSGFzRGF0YT4NCjxCYXNlLTAtNTQwX0RhdGEgaWQ9InJlZi01NDMiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0MU5EWThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNTQwX0RhdGE+DQo8QmFzZS0wLTU0MF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNTQwX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTU0MV9IYXNEYXRhPnRydWU8L0Jhc2UtMC01NDFfSGFzRGF0YT4NCjxCYXNlLTAtNTQxX0RhdGEgaWQ9InJlZi01NDQiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0MU5EYzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNTQxX0RhdGE+DQo8QmFzZS0wLTU0MV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNTQxX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTU0Ml9IYXNEYXRhPnRydWU8L0Jhc2UtMC01NDJfSGFzRGF0YT4NCjxCYXNlLTAtNTQyX0RhdGEgaWQ9InJlZi01NDUiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0MU5EZzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNTQyX0RhdGE+DQo8QmFzZS0wLTU0Ml9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNTQyX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTU0M19IYXNEYXRhPnRydWU8L0Jhc2UtMC01NDNfSGFzRGF0YT4NCjxCYXNlLTAtNTQzX0RhdGEgaWQ9InJlZi01NDYiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0MU5EazhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNTQzX0RhdGE+DQo8QmFzZS0wLTU0M19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNTQzX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTU0NF9IYXNEYXRhPnRydWU8L0Jhc2UtMC01NDRfSGFzRGF0YT4NCjxCYXNlLTAtNTQ0X0RhdGEgaWQ9InJlZi01NDciPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0MU5UQThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNTQ0X0RhdGE+DQo8QmFzZS0wLTU0NF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNTQ0X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTU0NV9IYXNEYXRhPnRydWU8L0Jhc2UtMC01NDVfSGFzRGF0YT4NCjxCYXNlLTAtNTQ1X0RhdGEgaWQ9InJlZi01NDgiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0MU5URThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNTQ1X0RhdGE+DQo8QmFzZS0wLTU0NV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNTQ1X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTU0Nl9IYXNEYXRhPnRydWU8L0Jhc2UtMC01NDZfSGFzRGF0YT4NCjxCYXNlLTAtNTQ2X0RhdGEgaWQ9InJlZi01NDkiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0MU5USThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNTQ2X0RhdGE+DQo8QmFzZS0wLTU0Nl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNTQ2X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTU0N19IYXNEYXRhPnRydWU8L0Jhc2UtMC01NDdfSGFzRGF0YT4NCjxCYXNlLTAtNTQ3X0RhdGEgaWQ9InJlZi01NTAiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0MU5UTThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNTQ3X0RhdGE+DQo8QmFzZS0wLTU0N19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNTQ3X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTU0OF9IYXNEYXRhPnRydWU8L0Jhc2UtMC01NDhfSGFzRGF0YT4NCjxCYXNlLTAtNTQ4X0RhdGEgaWQ9InJlZi01NTEiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0MU5UUThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNTQ4X0RhdGE+DQo8QmFzZS0wLTU0OF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNTQ4X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTU0OV9IYXNEYXRhPnRydWU8L0Jhc2UtMC01NDlfSGFzRGF0YT4NCjxCYXNlLTAtNTQ5X0RhdGEgaWQ9InJlZi01NTIiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0MU5UVThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNTQ5X0RhdGE+DQo8QmFzZS0wLTU0OV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNTQ5X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTU1MF9IYXNEYXRhPnRydWU8L0Jhc2UtMC01NTBfSGFzRGF0YT4NCjxCYXNlLTAtNTUwX0RhdGEgaWQ9InJlZi01NTMiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0MU5UWThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNTUwX0RhdGE+DQo8QmFzZS0wLTU1MF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNTUwX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTU1MV9IYXNEYXRhPnRydWU8L0Jhc2UtMC01NTFfSGFzRGF0YT4NCjxCYXNlLTAtNTUxX0RhdGEgaWQ9InJlZi01NTQiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0MU5UYzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNTUxX0RhdGE+DQo8QmFzZS0wLTU1MV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNTUxX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTU1Ml9IYXNEYXRhPnRydWU8L0Jhc2UtMC01NTJfSGFzRGF0YT4NCjxCYXNlLTAtNTUyX0RhdGEgaWQ9InJlZi01NTUiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0MU5UZzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNTUyX0RhdGE+DQo8QmFzZS0wLTU1Ml9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNTUyX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTU1M19IYXNEYXRhPnRydWU8L0Jhc2UtMC01NTNfSGFzRGF0YT4NCjxCYXNlLTAtNTUzX0RhdGEgaWQ9InJlZi01NTYiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0MU5UazhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNTUzX0RhdGE+DQo8QmFzZS0wLTU1M19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNTUzX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTU1NF9IYXNEYXRhPnRydWU8L0Jhc2UtMC01NTRfSGFzRGF0YT4NCjxCYXNlLTAtNTU0X0RhdGEgaWQ9InJlZi01NTciPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0MU5qQThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNTU0X0RhdGE+DQo8QmFzZS0wLTU1NF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNTU0X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTU1NV9IYXNEYXRhPnRydWU8L0Jhc2UtMC01NTVfSGFzRGF0YT4NCjxCYXNlLTAtNTU1X0RhdGEgaWQ9InJlZi01NTgiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0MU5qRThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNTU1X0RhdGE+DQo8QmFzZS0wLTU1NV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNTU1X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTU1Nl9IYXNEYXRhPnRydWU8L0Jhc2UtMC01NTZfSGFzRGF0YT4NCjxCYXNlLTAtNTU2X0RhdGEgaWQ9InJlZi01NTkiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0MU5qSThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNTU2X0RhdGE+DQo8QmFzZS0wLTU1Nl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNTU2X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTU1N19IYXNEYXRhPnRydWU8L0Jhc2UtMC01NTdfSGFzRGF0YT4NCjxCYXNlLTAtNTU3X0RhdGEgaWQ9InJlZi01NjAiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0MU5qTThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNTU3X0RhdGE+DQo8QmFzZS0wLTU1N19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNTU3X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTU1OF9IYXNEYXRhPnRydWU8L0Jhc2UtMC01NThfSGFzRGF0YT4NCjxCYXNlLTAtNTU4X0RhdGEgaWQ9InJlZi01NjEiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0MU5qUThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNTU4X0RhdGE+DQo8QmFzZS0wLTU1OF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNTU4X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTU1OV9IYXNEYXRhPnRydWU8L0Jhc2UtMC01NTlfSGFzRGF0YT4NCjxCYXNlLTAtNTU5X0RhdGEgaWQ9InJlZi01NjIiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0MU5qVThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNTU5X0RhdGE+DQo8QmFzZS0wLTU1OV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNTU5X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTU2MF9IYXNEYXRhPnRydWU8L0Jhc2UtMC01NjBfSGFzRGF0YT4NCjxCYXNlLTAtNTYwX0RhdGEgaWQ9InJlZi01NjMiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0MU5qWThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNTYwX0RhdGE+DQo8QmFzZS0wLTU2MF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNTYwX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTU2MV9IYXNEYXRhPnRydWU8L0Jhc2UtMC01NjFfSGFzRGF0YT4NCjxCYXNlLTAtNTYxX0RhdGEgaWQ9InJlZi01NjQiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0MU5qYzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNTYxX0RhdGE+DQo8QmFzZS0wLTU2MV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNTYxX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTU2Ml9IYXNEYXRhPnRydWU8L0Jhc2UtMC01NjJfSGFzRGF0YT4NCjxCYXNlLTAtNTYyX0RhdGEgaWQ9InJlZi01NjUiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0MU5qZzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNTYyX0RhdGE+DQo8QmFzZS0wLTU2Ml9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNTYyX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTU2M19IYXNEYXRhPnRydWU8L0Jhc2UtMC01NjNfSGFzRGF0YT4NCjxCYXNlLTAtNTYzX0RhdGEgaWQ9InJlZi01NjYiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0MU5qazhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNTYzX0RhdGE+DQo8QmFzZS0wLTU2M19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNTYzX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTU2NF9IYXNEYXRhPnRydWU8L0Jhc2UtMC01NjRfSGFzRGF0YT4NCjxCYXNlLTAtNTY0X0RhdGEgaWQ9InJlZi01NjciPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0MU56QThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNTY0X0RhdGE+DQo8QmFzZS0wLTU2NF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNTY0X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTU2NV9IYXNEYXRhPnRydWU8L0Jhc2UtMC01NjVfSGFzRGF0YT4NCjxCYXNlLTAtNTY1X0RhdGEgaWQ9InJlZi01NjgiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0MU56RThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNTY1X0RhdGE+DQo8QmFzZS0wLTU2NV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNTY1X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTU2Nl9IYXNEYXRhPnRydWU8L0Jhc2UtMC01NjZfSGFzRGF0YT4NCjxCYXNlLTAtNTY2X0RhdGEgaWQ9InJlZi01NjkiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0MU56SThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNTY2X0RhdGE+DQo8QmFzZS0wLTU2Nl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNTY2X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTU2N19IYXNEYXRhPnRydWU8L0Jhc2UtMC01NjdfSGFzRGF0YT4NCjxCYXNlLTAtNTY3X0RhdGEgaWQ9InJlZi01NzAiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0MU56TThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNTY3X0RhdGE+DQo8QmFzZS0wLTU2N19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNTY3X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTU2OF9IYXNEYXRhPnRydWU8L0Jhc2UtMC01NjhfSGFzRGF0YT4NCjxCYXNlLTAtNTY4X0RhdGEgaWQ9InJlZi01NzEiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0MU56UThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNTY4X0RhdGE+DQo8QmFzZS0wLTU2OF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNTY4X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTU2OV9IYXNEYXRhPnRydWU8L0Jhc2UtMC01NjlfSGFzRGF0YT4NCjxCYXNlLTAtNTY5X0RhdGEgaWQ9InJlZi01NzIiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0MU56VThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNTY5X0RhdGE+DQo8QmFzZS0wLTU2OV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNTY5X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTU3MF9IYXNEYXRhPnRydWU8L0Jhc2UtMC01NzBfSGFzRGF0YT4NCjxCYXNlLTAtNTcwX0RhdGEgaWQ9InJlZi01NzMiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0MU56WThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNTcwX0RhdGE+DQo8QmFzZS0wLTU3MF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNTcwX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTU3MV9IYXNEYXRhPnRydWU8L0Jhc2UtMC01NzFfSGFzRGF0YT4NCjxCYXNlLTAtNTcxX0RhdGEgaWQ9InJlZi01NzQiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0MU56YzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNTcxX0RhdGE+DQo8QmFzZS0wLTU3MV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNTcxX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTU3Ml9IYXNEYXRhPnRydWU8L0Jhc2UtMC01NzJfSGFzRGF0YT4NCjxCYXNlLTAtNTcyX0RhdGEgaWQ9InJlZi01NzUiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0MU56ZzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNTcyX0RhdGE+DQo8QmFzZS0wLTU3Ml9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNTcyX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTU3M19IYXNEYXRhPnRydWU8L0Jhc2UtMC01NzNfSGFzRGF0YT4NCjxCYXNlLTAtNTczX0RhdGEgaWQ9InJlZi01NzYiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0MU56azhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNTczX0RhdGE+DQo8QmFzZS0wLTU3M19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNTczX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTU3NF9IYXNEYXRhPnRydWU8L0Jhc2UtMC01NzRfSGFzRGF0YT4NCjxCYXNlLTAtNTc0X0RhdGEgaWQ9InJlZi01NzciPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0MU9EQThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNTc0X0RhdGE+DQo8QmFzZS0wLTU3NF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNTc0X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTU3NV9IYXNEYXRhPnRydWU8L0Jhc2UtMC01NzVfSGFzRGF0YT4NCjxCYXNlLTAtNTc1X0RhdGEgaWQ9InJlZi01NzgiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0MU9ERThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNTc1X0RhdGE+DQo8QmFzZS0wLTU3NV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNTc1X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTU3Nl9IYXNEYXRhPnRydWU8L0Jhc2UtMC01NzZfSGFzRGF0YT4NCjxCYXNlLTAtNTc2X0RhdGEgaWQ9InJlZi01NzkiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0MU9ESThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNTc2X0RhdGE+DQo8QmFzZS0wLTU3Nl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNTc2X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTU3N19IYXNEYXRhPnRydWU8L0Jhc2UtMC01NzdfSGFzRGF0YT4NCjxCYXNlLTAtNTc3X0RhdGEgaWQ9InJlZi01ODAiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0MU9ETThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNTc3X0RhdGE+DQo8QmFzZS0wLTU3N19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNTc3X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTU3OF9IYXNEYXRhPnRydWU8L0Jhc2UtMC01NzhfSGFzRGF0YT4NCjxCYXNlLTAtNTc4X0RhdGEgaWQ9InJlZi01ODEiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0MU9EUThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNTc4X0RhdGE+DQo8QmFzZS0wLTU3OF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNTc4X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTU3OV9IYXNEYXRhPnRydWU8L0Jhc2UtMC01NzlfSGFzRGF0YT4NCjxCYXNlLTAtNTc5X0RhdGEgaWQ9InJlZi01ODIiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0MU9EVThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNTc5X0RhdGE+DQo8QmFzZS0wLTU3OV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNTc5X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTU4MF9IYXNEYXRhPnRydWU8L0Jhc2UtMC01ODBfSGFzRGF0YT4NCjxCYXNlLTAtNTgwX0RhdGEgaWQ9InJlZi01ODMiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0MU9EWThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNTgwX0RhdGE+DQo8QmFzZS0wLTU4MF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNTgwX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTU4MV9IYXNEYXRhPnRydWU8L0Jhc2UtMC01ODFfSGFzRGF0YT4NCjxCYXNlLTAtNTgxX0RhdGEgaWQ9InJlZi01ODQiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0MU9EYzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNTgxX0RhdGE+DQo8QmFzZS0wLTU4MV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNTgxX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTU4Ml9IYXNEYXRhPnRydWU8L0Jhc2UtMC01ODJfSGFzRGF0YT4NCjxCYXNlLTAtNTgyX0RhdGEgaWQ9InJlZi01ODUiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0MU9EZzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNTgyX0RhdGE+DQo8QmFzZS0wLTU4Ml9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNTgyX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTU4M19IYXNEYXRhPnRydWU8L0Jhc2UtMC01ODNfSGFzRGF0YT4NCjxCYXNlLTAtNTgzX0RhdGEgaWQ9InJlZi01ODYiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0MU9EazhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNTgzX0RhdGE+DQo8QmFzZS0wLTU4M19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNTgzX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTU4NF9IYXNEYXRhPnRydWU8L0Jhc2UtMC01ODRfSGFzRGF0YT4NCjxCYXNlLTAtNTg0X0RhdGEgaWQ9InJlZi01ODciPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0MU9UQThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNTg0X0RhdGE+DQo8QmFzZS0wLTU4NF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNTg0X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTU4NV9IYXNEYXRhPnRydWU8L0Jhc2UtMC01ODVfSGFzRGF0YT4NCjxCYXNlLTAtNTg1X0RhdGEgaWQ9InJlZi01ODgiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0MU9URThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNTg1X0RhdGE+DQo8QmFzZS0wLTU4NV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNTg1X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTU4Nl9IYXNEYXRhPnRydWU8L0Jhc2UtMC01ODZfSGFzRGF0YT4NCjxCYXNlLTAtNTg2X0RhdGEgaWQ9InJlZi01ODkiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0MU9USThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNTg2X0RhdGE+DQo8QmFzZS0wLTU4Nl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNTg2X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTU4N19IYXNEYXRhPnRydWU8L0Jhc2UtMC01ODdfSGFzRGF0YT4NCjxCYXNlLTAtNTg3X0RhdGEgaWQ9InJlZi01OTAiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0MU9UTThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNTg3X0RhdGE+DQo8QmFzZS0wLTU4N19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNTg3X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTU4OF9IYXNEYXRhPnRydWU8L0Jhc2UtMC01ODhfSGFzRGF0YT4NCjxCYXNlLTAtNTg4X0RhdGEgaWQ9InJlZi01OTEiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0MU9UUThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNTg4X0RhdGE+DQo8QmFzZS0wLTU4OF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNTg4X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTU4OV9IYXNEYXRhPnRydWU8L0Jhc2UtMC01ODlfSGFzRGF0YT4NCjxCYXNlLTAtNTg5X0RhdGEgaWQ9InJlZi01OTIiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0MU9UVThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNTg5X0RhdGE+DQo8QmFzZS0wLTU4OV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNTg5X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTU5MF9IYXNEYXRhPnRydWU8L0Jhc2UtMC01OTBfSGFzRGF0YT4NCjxCYXNlLTAtNTkwX0RhdGEgaWQ9InJlZi01OTMiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0MU9UWThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNTkwX0RhdGE+DQo8QmFzZS0wLTU5MF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNTkwX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTU5MV9IYXNEYXRhPnRydWU8L0Jhc2UtMC01OTFfSGFzRGF0YT4NCjxCYXNlLTAtNTkxX0RhdGEgaWQ9InJlZi01OTQiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0MU9UYzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNTkxX0RhdGE+DQo8QmFzZS0wLTU5MV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNTkxX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTU5Ml9IYXNEYXRhPnRydWU8L0Jhc2UtMC01OTJfSGFzRGF0YT4NCjxCYXNlLTAtNTkyX0RhdGEgaWQ9InJlZi01OTUiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0MU9UZzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNTkyX0RhdGE+DQo8QmFzZS0wLTU5Ml9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNTkyX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTU5M19IYXNEYXRhPnRydWU8L0Jhc2UtMC01OTNfSGFzRGF0YT4NCjxCYXNlLTAtNTkzX0RhdGEgaWQ9InJlZi01OTYiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0MU9UazhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNTkzX0RhdGE+DQo8QmFzZS0wLTU5M19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNTkzX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTU5NF9IYXNEYXRhPnRydWU8L0Jhc2UtMC01OTRfSGFzRGF0YT4NCjxCYXNlLTAtNTk0X0RhdGEgaWQ9InJlZi01OTciPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0Mk1EQThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNTk0X0RhdGE+DQo8QmFzZS0wLTU5NF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNTk0X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTU5NV9IYXNEYXRhPnRydWU8L0Jhc2UtMC01OTVfSGFzRGF0YT4NCjxCYXNlLTAtNTk1X0RhdGEgaWQ9InJlZi01OTgiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0Mk1ERThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNTk1X0RhdGE+DQo8QmFzZS0wLTU5NV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNTk1X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTU5Nl9IYXNEYXRhPnRydWU8L0Jhc2UtMC01OTZfSGFzRGF0YT4NCjxCYXNlLTAtNTk2X0RhdGEgaWQ9InJlZi01OTkiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0Mk1ESThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNTk2X0RhdGE+DQo8QmFzZS0wLTU5Nl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNTk2X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTU5N19IYXNEYXRhPnRydWU8L0Jhc2UtMC01OTdfSGFzRGF0YT4NCjxCYXNlLTAtNTk3X0RhdGEgaWQ9InJlZi02MDAiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0Mk1ETThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNTk3X0RhdGE+DQo8QmFzZS0wLTU5N19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNTk3X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTU5OF9IYXNEYXRhPnRydWU8L0Jhc2UtMC01OThfSGFzRGF0YT4NCjxCYXNlLTAtNTk4X0RhdGEgaWQ9InJlZi02MDEiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0Mk1EUThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNTk4X0RhdGE+DQo8QmFzZS0wLTU5OF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNTk4X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTU5OV9IYXNEYXRhPnRydWU8L0Jhc2UtMC01OTlfSGFzRGF0YT4NCjxCYXNlLTAtNTk5X0RhdGEgaWQ9InJlZi02MDIiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0Mk1EVThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNTk5X0RhdGE+DQo8QmFzZS0wLTU5OV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNTk5X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTYwMF9IYXNEYXRhPnRydWU8L0Jhc2UtMC02MDBfSGFzRGF0YT4NCjxCYXNlLTAtNjAwX0RhdGEgaWQ9InJlZi02MDMiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0Mk1EWThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNjAwX0RhdGE+DQo8QmFzZS0wLTYwMF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNjAwX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTYwMV9IYXNEYXRhPnRydWU8L0Jhc2UtMC02MDFfSGFzRGF0YT4NCjxCYXNlLTAtNjAxX0RhdGEgaWQ9InJlZi02MDQiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0Mk1EYzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNjAxX0RhdGE+DQo8QmFzZS0wLTYwMV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNjAxX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTYwMl9IYXNEYXRhPnRydWU8L0Jhc2UtMC02MDJfSGFzRGF0YT4NCjxCYXNlLTAtNjAyX0RhdGEgaWQ9InJlZi02MDUiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0Mk1EZzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNjAyX0RhdGE+DQo8QmFzZS0wLTYwMl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNjAyX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTYwM19IYXNEYXRhPnRydWU8L0Jhc2UtMC02MDNfSGFzRGF0YT4NCjxCYXNlLTAtNjAzX0RhdGEgaWQ9InJlZi02MDYiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0Mk1EazhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNjAzX0RhdGE+DQo8QmFzZS0wLTYwM19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNjAzX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTYwNF9IYXNEYXRhPnRydWU8L0Jhc2UtMC02MDRfSGFzRGF0YT4NCjxCYXNlLTAtNjA0X0RhdGEgaWQ9InJlZi02MDciPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0Mk1UQThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNjA0X0RhdGE+DQo8QmFzZS0wLTYwNF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNjA0X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTYwNV9IYXNEYXRhPnRydWU8L0Jhc2UtMC02MDVfSGFzRGF0YT4NCjxCYXNlLTAtNjA1X0RhdGEgaWQ9InJlZi02MDgiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0Mk1URThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNjA1X0RhdGE+DQo8QmFzZS0wLTYwNV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNjA1X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTYwNl9IYXNEYXRhPnRydWU8L0Jhc2UtMC02MDZfSGFzRGF0YT4NCjxCYXNlLTAtNjA2X0RhdGEgaWQ9InJlZi02MDkiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0Mk1USThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNjA2X0RhdGE+DQo8QmFzZS0wLTYwNl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNjA2X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTYwN19IYXNEYXRhPnRydWU8L0Jhc2UtMC02MDdfSGFzRGF0YT4NCjxCYXNlLTAtNjA3X0RhdGEgaWQ9InJlZi02MTAiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0Mk1UTThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNjA3X0RhdGE+DQo8QmFzZS0wLTYwN19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNjA3X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTYwOF9IYXNEYXRhPnRydWU8L0Jhc2UtMC02MDhfSGFzRGF0YT4NCjxCYXNlLTAtNjA4X0RhdGEgaWQ9InJlZi02MTEiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0Mk1UUThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNjA4X0RhdGE+DQo8QmFzZS0wLTYwOF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNjA4X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTYwOV9IYXNEYXRhPnRydWU8L0Jhc2UtMC02MDlfSGFzRGF0YT4NCjxCYXNlLTAtNjA5X0RhdGEgaWQ9InJlZi02MTIiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0Mk1UVThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNjA5X0RhdGE+DQo8QmFzZS0wLTYwOV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNjA5X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTYxMF9IYXNEYXRhPnRydWU8L0Jhc2UtMC02MTBfSGFzRGF0YT4NCjxCYXNlLTAtNjEwX0RhdGEgaWQ9InJlZi02MTMiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0Mk1UWThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNjEwX0RhdGE+DQo8QmFzZS0wLTYxMF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNjEwX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTYxMV9IYXNEYXRhPnRydWU8L0Jhc2UtMC02MTFfSGFzRGF0YT4NCjxCYXNlLTAtNjExX0RhdGEgaWQ9InJlZi02MTQiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0Mk1UYzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNjExX0RhdGE+DQo8QmFzZS0wLTYxMV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNjExX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTYxMl9IYXNEYXRhPnRydWU8L0Jhc2UtMC02MTJfSGFzRGF0YT4NCjxCYXNlLTAtNjEyX0RhdGEgaWQ9InJlZi02MTUiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0Mk1UZzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNjEyX0RhdGE+DQo8QmFzZS0wLTYxMl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNjEyX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTYxM19IYXNEYXRhPnRydWU8L0Jhc2UtMC02MTNfSGFzRGF0YT4NCjxCYXNlLTAtNjEzX0RhdGEgaWQ9InJlZi02MTYiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0Mk1UazhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNjEzX0RhdGE+DQo8QmFzZS0wLTYxM19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNjEzX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTYxNF9IYXNEYXRhPnRydWU8L0Jhc2UtMC02MTRfSGFzRGF0YT4NCjxCYXNlLTAtNjE0X0RhdGEgaWQ9InJlZi02MTciPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0Mk1qQThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNjE0X0RhdGE+DQo8QmFzZS0wLTYxNF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNjE0X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTYxNV9IYXNEYXRhPnRydWU8L0Jhc2UtMC02MTVfSGFzRGF0YT4NCjxCYXNlLTAtNjE1X0RhdGEgaWQ9InJlZi02MTgiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0Mk1qRThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNjE1X0RhdGE+DQo8QmFzZS0wLTYxNV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNjE1X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTYxNl9IYXNEYXRhPnRydWU8L0Jhc2UtMC02MTZfSGFzRGF0YT4NCjxCYXNlLTAtNjE2X0RhdGEgaWQ9InJlZi02MTkiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0Mk1qSThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNjE2X0RhdGE+DQo8QmFzZS0wLTYxNl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNjE2X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTYxN19IYXNEYXRhPnRydWU8L0Jhc2UtMC02MTdfSGFzRGF0YT4NCjxCYXNlLTAtNjE3X0RhdGEgaWQ9InJlZi02MjAiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0Mk1qTThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNjE3X0RhdGE+DQo8QmFzZS0wLTYxN19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNjE3X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTYxOF9IYXNEYXRhPnRydWU8L0Jhc2UtMC02MThfSGFzRGF0YT4NCjxCYXNlLTAtNjE4X0RhdGEgaWQ9InJlZi02MjEiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0Mk1qUThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNjE4X0RhdGE+DQo8QmFzZS0wLTYxOF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNjE4X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTYxOV9IYXNEYXRhPnRydWU8L0Jhc2UtMC02MTlfSGFzRGF0YT4NCjxCYXNlLTAtNjE5X0RhdGEgaWQ9InJlZi02MjIiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0Mk1qVThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNjE5X0RhdGE+DQo8QmFzZS0wLTYxOV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNjE5X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTYyMF9IYXNEYXRhPnRydWU8L0Jhc2UtMC02MjBfSGFzRGF0YT4NCjxCYXNlLTAtNjIwX0RhdGEgaWQ9InJlZi02MjMiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0Mk1qWThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNjIwX0RhdGE+DQo8QmFzZS0wLTYyMF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNjIwX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTYyMV9IYXNEYXRhPnRydWU8L0Jhc2UtMC02MjFfSGFzRGF0YT4NCjxCYXNlLTAtNjIxX0RhdGEgaWQ9InJlZi02MjQiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0Mk1qYzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNjIxX0RhdGE+DQo8QmFzZS0wLTYyMV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNjIxX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTYyMl9IYXNEYXRhPnRydWU8L0Jhc2UtMC02MjJfSGFzRGF0YT4NCjxCYXNlLTAtNjIyX0RhdGEgaWQ9InJlZi02MjUiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0Mk1qZzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNjIyX0RhdGE+DQo8QmFzZS0wLTYyMl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNjIyX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTYyM19IYXNEYXRhPnRydWU8L0Jhc2UtMC02MjNfSGFzRGF0YT4NCjxCYXNlLTAtNjIzX0RhdGEgaWQ9InJlZi02MjYiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0Mk1qazhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNjIzX0RhdGE+DQo8QmFzZS0wLTYyM19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNjIzX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTYyNF9IYXNEYXRhPnRydWU8L0Jhc2UtMC02MjRfSGFzRGF0YT4NCjxCYXNlLTAtNjI0X0RhdGEgaWQ9InJlZi02MjciPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0Mk16QThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNjI0X0RhdGE+DQo8QmFzZS0wLTYyNF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNjI0X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTYyNV9IYXNEYXRhPnRydWU8L0Jhc2UtMC02MjVfSGFzRGF0YT4NCjxCYXNlLTAtNjI1X0RhdGEgaWQ9InJlZi02MjgiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0Mk16RThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNjI1X0RhdGE+DQo8QmFzZS0wLTYyNV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNjI1X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTYyNl9IYXNEYXRhPnRydWU8L0Jhc2UtMC02MjZfSGFzRGF0YT4NCjxCYXNlLTAtNjI2X0RhdGEgaWQ9InJlZi02MjkiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0Mk16SThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNjI2X0RhdGE+DQo8QmFzZS0wLTYyNl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNjI2X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTYyN19IYXNEYXRhPnRydWU8L0Jhc2UtMC02MjdfSGFzRGF0YT4NCjxCYXNlLTAtNjI3X0RhdGEgaWQ9InJlZi02MzAiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0Mk16TThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNjI3X0RhdGE+DQo8QmFzZS0wLTYyN19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNjI3X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTYyOF9IYXNEYXRhPnRydWU8L0Jhc2UtMC02MjhfSGFzRGF0YT4NCjxCYXNlLTAtNjI4X0RhdGEgaWQ9InJlZi02MzEiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0Mk16UThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNjI4X0RhdGE+DQo8QmFzZS0wLTYyOF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNjI4X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTYyOV9IYXNEYXRhPnRydWU8L0Jhc2UtMC02MjlfSGFzRGF0YT4NCjxCYXNlLTAtNjI5X0RhdGEgaWQ9InJlZi02MzIiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0Mk16VThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNjI5X0RhdGE+DQo8QmFzZS0wLTYyOV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNjI5X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTYzMF9IYXNEYXRhPnRydWU8L0Jhc2UtMC02MzBfSGFzRGF0YT4NCjxCYXNlLTAtNjMwX0RhdGEgaWQ9InJlZi02MzMiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0Mk16WThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNjMwX0RhdGE+DQo8QmFzZS0wLTYzMF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNjMwX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTYzMV9IYXNEYXRhPnRydWU8L0Jhc2UtMC02MzFfSGFzRGF0YT4NCjxCYXNlLTAtNjMxX0RhdGEgaWQ9InJlZi02MzQiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0Mk16YzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNjMxX0RhdGE+DQo8QmFzZS0wLTYzMV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNjMxX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTYzMl9IYXNEYXRhPnRydWU8L0Jhc2UtMC02MzJfSGFzRGF0YT4NCjxCYXNlLTAtNjMyX0RhdGEgaWQ9InJlZi02MzUiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0Mk16ZzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNjMyX0RhdGE+DQo8QmFzZS0wLTYzMl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNjMyX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTYzM19IYXNEYXRhPnRydWU8L0Jhc2UtMC02MzNfSGFzRGF0YT4NCjxCYXNlLTAtNjMzX0RhdGEgaWQ9InJlZi02MzYiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0Mk16azhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNjMzX0RhdGE+DQo8QmFzZS0wLTYzM19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNjMzX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTYzNF9IYXNEYXRhPnRydWU8L0Jhc2UtMC02MzRfSGFzRGF0YT4NCjxCYXNlLTAtNjM0X0RhdGEgaWQ9InJlZi02MzciPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0Mk5EQThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNjM0X0RhdGE+DQo8QmFzZS0wLTYzNF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNjM0X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTYzNV9IYXNEYXRhPnRydWU8L0Jhc2UtMC02MzVfSGFzRGF0YT4NCjxCYXNlLTAtNjM1X0RhdGEgaWQ9InJlZi02MzgiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0Mk5ERThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNjM1X0RhdGE+DQo8QmFzZS0wLTYzNV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNjM1X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTYzNl9IYXNEYXRhPnRydWU8L0Jhc2UtMC02MzZfSGFzRGF0YT4NCjxCYXNlLTAtNjM2X0RhdGEgaWQ9InJlZi02MzkiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0Mk5ESThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNjM2X0RhdGE+DQo8QmFzZS0wLTYzNl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNjM2X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTYzN19IYXNEYXRhPnRydWU8L0Jhc2UtMC02MzdfSGFzRGF0YT4NCjxCYXNlLTAtNjM3X0RhdGEgaWQ9InJlZi02NDAiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0Mk5ETThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNjM3X0RhdGE+DQo8QmFzZS0wLTYzN19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNjM3X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTYzOF9IYXNEYXRhPnRydWU8L0Jhc2UtMC02MzhfSGFzRGF0YT4NCjxCYXNlLTAtNjM4X0RhdGEgaWQ9InJlZi02NDEiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0Mk5EUThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNjM4X0RhdGE+DQo8QmFzZS0wLTYzOF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNjM4X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTYzOV9IYXNEYXRhPnRydWU8L0Jhc2UtMC02MzlfSGFzRGF0YT4NCjxCYXNlLTAtNjM5X0RhdGEgaWQ9InJlZi02NDIiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0Mk5EVThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNjM5X0RhdGE+DQo8QmFzZS0wLTYzOV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNjM5X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTY0MF9IYXNEYXRhPnRydWU8L0Jhc2UtMC02NDBfSGFzRGF0YT4NCjxCYXNlLTAtNjQwX0RhdGEgaWQ9InJlZi02NDMiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0Mk5EWThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNjQwX0RhdGE+DQo8QmFzZS0wLTY0MF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNjQwX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTY0MV9IYXNEYXRhPnRydWU8L0Jhc2UtMC02NDFfSGFzRGF0YT4NCjxCYXNlLTAtNjQxX0RhdGEgaWQ9InJlZi02NDQiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0Mk5EYzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNjQxX0RhdGE+DQo8QmFzZS0wLTY0MV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNjQxX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTY0Ml9IYXNEYXRhPnRydWU8L0Jhc2UtMC02NDJfSGFzRGF0YT4NCjxCYXNlLTAtNjQyX0RhdGEgaWQ9InJlZi02NDUiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0Mk5EZzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNjQyX0RhdGE+DQo8QmFzZS0wLTY0Ml9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNjQyX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTY0M19IYXNEYXRhPnRydWU8L0Jhc2UtMC02NDNfSGFzRGF0YT4NCjxCYXNlLTAtNjQzX0RhdGEgaWQ9InJlZi02NDYiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0Mk5EazhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNjQzX0RhdGE+DQo8QmFzZS0wLTY0M19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNjQzX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTY0NF9IYXNEYXRhPnRydWU8L0Jhc2UtMC02NDRfSGFzRGF0YT4NCjxCYXNlLTAtNjQ0X0RhdGEgaWQ9InJlZi02NDciPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0Mk5UQThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNjQ0X0RhdGE+DQo8QmFzZS0wLTY0NF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNjQ0X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTY0NV9IYXNEYXRhPnRydWU8L0Jhc2UtMC02NDVfSGFzRGF0YT4NCjxCYXNlLTAtNjQ1X0RhdGEgaWQ9InJlZi02NDgiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0Mk5URThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNjQ1X0RhdGE+DQo8QmFzZS0wLTY0NV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNjQ1X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTY0Nl9IYXNEYXRhPnRydWU8L0Jhc2UtMC02NDZfSGFzRGF0YT4NCjxCYXNlLTAtNjQ2X0RhdGEgaWQ9InJlZi02NDkiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0Mk5USThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNjQ2X0RhdGE+DQo8QmFzZS0wLTY0Nl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNjQ2X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTY0N19IYXNEYXRhPnRydWU8L0Jhc2UtMC02NDdfSGFzRGF0YT4NCjxCYXNlLTAtNjQ3X0RhdGEgaWQ9InJlZi02NTAiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0Mk5UTThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNjQ3X0RhdGE+DQo8QmFzZS0wLTY0N19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNjQ3X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTY0OF9IYXNEYXRhPnRydWU8L0Jhc2UtMC02NDhfSGFzRGF0YT4NCjxCYXNlLTAtNjQ4X0RhdGEgaWQ9InJlZi02NTEiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0Mk5UUThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNjQ4X0RhdGE+DQo8QmFzZS0wLTY0OF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNjQ4X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTY0OV9IYXNEYXRhPnRydWU8L0Jhc2UtMC02NDlfSGFzRGF0YT4NCjxCYXNlLTAtNjQ5X0RhdGEgaWQ9InJlZi02NTIiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0Mk5UVThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNjQ5X0RhdGE+DQo8QmFzZS0wLTY0OV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNjQ5X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTY1MF9IYXNEYXRhPnRydWU8L0Jhc2UtMC02NTBfSGFzRGF0YT4NCjxCYXNlLTAtNjUwX0RhdGEgaWQ9InJlZi02NTMiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0Mk5UWThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNjUwX0RhdGE+DQo8QmFzZS0wLTY1MF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNjUwX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTY1MV9IYXNEYXRhPnRydWU8L0Jhc2UtMC02NTFfSGFzRGF0YT4NCjxCYXNlLTAtNjUxX0RhdGEgaWQ9InJlZi02NTQiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0Mk5UYzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNjUxX0RhdGE+DQo8QmFzZS0wLTY1MV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNjUxX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTY1Ml9IYXNEYXRhPnRydWU8L0Jhc2UtMC02NTJfSGFzRGF0YT4NCjxCYXNlLTAtNjUyX0RhdGEgaWQ9InJlZi02NTUiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0Mk5UZzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNjUyX0RhdGE+DQo8QmFzZS0wLTY1Ml9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNjUyX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTY1M19IYXNEYXRhPnRydWU8L0Jhc2UtMC02NTNfSGFzRGF0YT4NCjxCYXNlLTAtNjUzX0RhdGEgaWQ9InJlZi02NTYiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0Mk5UazhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNjUzX0RhdGE+DQo8QmFzZS0wLTY1M19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNjUzX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTY1NF9IYXNEYXRhPnRydWU8L0Jhc2UtMC02NTRfSGFzRGF0YT4NCjxCYXNlLTAtNjU0X0RhdGEgaWQ9InJlZi02NTciPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0Mk5qQThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNjU0X0RhdGE+DQo8QmFzZS0wLTY1NF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNjU0X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTY1NV9IYXNEYXRhPnRydWU8L0Jhc2UtMC02NTVfSGFzRGF0YT4NCjxCYXNlLTAtNjU1X0RhdGEgaWQ9InJlZi02NTgiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0Mk5qRThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNjU1X0RhdGE+DQo8QmFzZS0wLTY1NV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNjU1X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTY1Nl9IYXNEYXRhPnRydWU8L0Jhc2UtMC02NTZfSGFzRGF0YT4NCjxCYXNlLTAtNjU2X0RhdGEgaWQ9InJlZi02NTkiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0Mk5qSThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNjU2X0RhdGE+DQo8QmFzZS0wLTY1Nl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNjU2X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTY1N19IYXNEYXRhPnRydWU8L0Jhc2UtMC02NTdfSGFzRGF0YT4NCjxCYXNlLTAtNjU3X0RhdGEgaWQ9InJlZi02NjAiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0Mk5qTThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNjU3X0RhdGE+DQo8QmFzZS0wLTY1N19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNjU3X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTY1OF9IYXNEYXRhPnRydWU8L0Jhc2UtMC02NThfSGFzRGF0YT4NCjxCYXNlLTAtNjU4X0RhdGEgaWQ9InJlZi02NjEiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0Mk5qUThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNjU4X0RhdGE+DQo8QmFzZS0wLTY1OF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNjU4X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTY1OV9IYXNEYXRhPnRydWU8L0Jhc2UtMC02NTlfSGFzRGF0YT4NCjxCYXNlLTAtNjU5X0RhdGEgaWQ9InJlZi02NjIiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0Mk5qVThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNjU5X0RhdGE+DQo8QmFzZS0wLTY1OV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNjU5X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTY2MF9IYXNEYXRhPnRydWU8L0Jhc2UtMC02NjBfSGFzRGF0YT4NCjxCYXNlLTAtNjYwX0RhdGEgaWQ9InJlZi02NjMiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0Mk5qWThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNjYwX0RhdGE+DQo8QmFzZS0wLTY2MF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNjYwX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTY2MV9IYXNEYXRhPnRydWU8L0Jhc2UtMC02NjFfSGFzRGF0YT4NCjxCYXNlLTAtNjYxX0RhdGEgaWQ9InJlZi02NjQiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0Mk5qYzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNjYxX0RhdGE+DQo8QmFzZS0wLTY2MV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNjYxX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTY2Ml9IYXNEYXRhPnRydWU8L0Jhc2UtMC02NjJfSGFzRGF0YT4NCjxCYXNlLTAtNjYyX0RhdGEgaWQ9InJlZi02NjUiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0Mk5qZzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNjYyX0RhdGE+DQo8QmFzZS0wLTY2Ml9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNjYyX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTY2M19IYXNEYXRhPnRydWU8L0Jhc2UtMC02NjNfSGFzRGF0YT4NCjxCYXNlLTAtNjYzX0RhdGEgaWQ9InJlZi02NjYiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0Mk5qazhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNjYzX0RhdGE+DQo8QmFzZS0wLTY2M19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNjYzX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTY2NF9IYXNEYXRhPnRydWU8L0Jhc2UtMC02NjRfSGFzRGF0YT4NCjxCYXNlLTAtNjY0X0RhdGEgaWQ9InJlZi02NjciPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0Mk56QThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNjY0X0RhdGE+DQo8QmFzZS0wLTY2NF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNjY0X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTY2NV9IYXNEYXRhPnRydWU8L0Jhc2UtMC02NjVfSGFzRGF0YT4NCjxCYXNlLTAtNjY1X0RhdGEgaWQ9InJlZi02NjgiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0Mk56RThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNjY1X0RhdGE+DQo8QmFzZS0wLTY2NV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNjY1X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTY2Nl9IYXNEYXRhPnRydWU8L0Jhc2UtMC02NjZfSGFzRGF0YT4NCjxCYXNlLTAtNjY2X0RhdGEgaWQ9InJlZi02NjkiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0Mk56SThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNjY2X0RhdGE+DQo8QmFzZS0wLTY2Nl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNjY2X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTY2N19IYXNEYXRhPnRydWU8L0Jhc2UtMC02NjdfSGFzRGF0YT4NCjxCYXNlLTAtNjY3X0RhdGEgaWQ9InJlZi02NzAiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0Mk56TThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNjY3X0RhdGE+DQo8QmFzZS0wLTY2N19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNjY3X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTY2OF9IYXNEYXRhPnRydWU8L0Jhc2UtMC02NjhfSGFzRGF0YT4NCjxCYXNlLTAtNjY4X0RhdGEgaWQ9InJlZi02NzEiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0Mk56UThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNjY4X0RhdGE+DQo8QmFzZS0wLTY2OF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNjY4X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTY2OV9IYXNEYXRhPnRydWU8L0Jhc2UtMC02NjlfSGFzRGF0YT4NCjxCYXNlLTAtNjY5X0RhdGEgaWQ9InJlZi02NzIiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0Mk56VThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNjY5X0RhdGE+DQo8QmFzZS0wLTY2OV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNjY5X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTY3MF9IYXNEYXRhPnRydWU8L0Jhc2UtMC02NzBfSGFzRGF0YT4NCjxCYXNlLTAtNjcwX0RhdGEgaWQ9InJlZi02NzMiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0Mk56WThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNjcwX0RhdGE+DQo8QmFzZS0wLTY3MF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNjcwX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTY3MV9IYXNEYXRhPnRydWU8L0Jhc2UtMC02NzFfSGFzRGF0YT4NCjxCYXNlLTAtNjcxX0RhdGEgaWQ9InJlZi02NzQiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0Mk56YzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNjcxX0RhdGE+DQo8QmFzZS0wLTY3MV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNjcxX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTY3Ml9IYXNEYXRhPnRydWU8L0Jhc2UtMC02NzJfSGFzRGF0YT4NCjxCYXNlLTAtNjcyX0RhdGEgaWQ9InJlZi02NzUiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0Mk56ZzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNjcyX0RhdGE+DQo8QmFzZS0wLTY3Ml9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNjcyX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTY3M19IYXNEYXRhPnRydWU8L0Jhc2UtMC02NzNfSGFzRGF0YT4NCjxCYXNlLTAtNjczX0RhdGEgaWQ9InJlZi02NzYiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0Mk56azhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNjczX0RhdGE+DQo8QmFzZS0wLTY3M19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNjczX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTY3NF9IYXNEYXRhPnRydWU8L0Jhc2UtMC02NzRfSGFzRGF0YT4NCjxCYXNlLTAtNjc0X0RhdGEgaWQ9InJlZi02NzciPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0Mk9EQThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNjc0X0RhdGE+DQo8QmFzZS0wLTY3NF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNjc0X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTY3NV9IYXNEYXRhPnRydWU8L0Jhc2UtMC02NzVfSGFzRGF0YT4NCjxCYXNlLTAtNjc1X0RhdGEgaWQ9InJlZi02NzgiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0Mk9ERThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNjc1X0RhdGE+DQo8QmFzZS0wLTY3NV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNjc1X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTY3Nl9IYXNEYXRhPnRydWU8L0Jhc2UtMC02NzZfSGFzRGF0YT4NCjxCYXNlLTAtNjc2X0RhdGEgaWQ9InJlZi02NzkiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0Mk9ESThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNjc2X0RhdGE+DQo8QmFzZS0wLTY3Nl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNjc2X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTY3N19IYXNEYXRhPnRydWU8L0Jhc2UtMC02NzdfSGFzRGF0YT4NCjxCYXNlLTAtNjc3X0RhdGEgaWQ9InJlZi02ODAiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0Mk9ETThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNjc3X0RhdGE+DQo8QmFzZS0wLTY3N19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNjc3X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTY3OF9IYXNEYXRhPnRydWU8L0Jhc2UtMC02NzhfSGFzRGF0YT4NCjxCYXNlLTAtNjc4X0RhdGEgaWQ9InJlZi02ODEiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0Mk9EUThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNjc4X0RhdGE+DQo8QmFzZS0wLTY3OF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNjc4X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTY3OV9IYXNEYXRhPnRydWU8L0Jhc2UtMC02NzlfSGFzRGF0YT4NCjxCYXNlLTAtNjc5X0RhdGEgaWQ9InJlZi02ODIiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0Mk9EVThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNjc5X0RhdGE+DQo8QmFzZS0wLTY3OV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNjc5X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTY4MF9IYXNEYXRhPnRydWU8L0Jhc2UtMC02ODBfSGFzRGF0YT4NCjxCYXNlLTAtNjgwX0RhdGEgaWQ9InJlZi02ODMiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0Mk9EWThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNjgwX0RhdGE+DQo8QmFzZS0wLTY4MF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNjgwX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTY4MV9IYXNEYXRhPnRydWU8L0Jhc2UtMC02ODFfSGFzRGF0YT4NCjxCYXNlLTAtNjgxX0RhdGEgaWQ9InJlZi02ODQiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0Mk9EYzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNjgxX0RhdGE+DQo8QmFzZS0wLTY4MV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNjgxX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTY4Ml9IYXNEYXRhPnRydWU8L0Jhc2UtMC02ODJfSGFzRGF0YT4NCjxCYXNlLTAtNjgyX0RhdGEgaWQ9InJlZi02ODUiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0Mk9EZzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNjgyX0RhdGE+DQo8QmFzZS0wLTY4Ml9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNjgyX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTY4M19IYXNEYXRhPnRydWU8L0Jhc2UtMC02ODNfSGFzRGF0YT4NCjxCYXNlLTAtNjgzX0RhdGEgaWQ9InJlZi02ODYiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0Mk9EazhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNjgzX0RhdGE+DQo8QmFzZS0wLTY4M19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNjgzX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTY4NF9IYXNEYXRhPnRydWU8L0Jhc2UtMC02ODRfSGFzRGF0YT4NCjxCYXNlLTAtNjg0X0RhdGEgaWQ9InJlZi02ODciPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0Mk9UQThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNjg0X0RhdGE+DQo8QmFzZS0wLTY4NF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNjg0X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTY4NV9IYXNEYXRhPnRydWU8L0Jhc2UtMC02ODVfSGFzRGF0YT4NCjxCYXNlLTAtNjg1X0RhdGEgaWQ9InJlZi02ODgiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0Mk9URThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNjg1X0RhdGE+DQo8QmFzZS0wLTY4NV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNjg1X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTY4Nl9IYXNEYXRhPnRydWU8L0Jhc2UtMC02ODZfSGFzRGF0YT4NCjxCYXNlLTAtNjg2X0RhdGEgaWQ9InJlZi02ODkiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0Mk9USThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNjg2X0RhdGE+DQo8QmFzZS0wLTY4Nl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNjg2X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTY4N19IYXNEYXRhPnRydWU8L0Jhc2UtMC02ODdfSGFzRGF0YT4NCjxCYXNlLTAtNjg3X0RhdGEgaWQ9InJlZi02OTAiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0Mk9UTThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNjg3X0RhdGE+DQo8QmFzZS0wLTY4N19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNjg3X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTY4OF9IYXNEYXRhPnRydWU8L0Jhc2UtMC02ODhfSGFzRGF0YT4NCjxCYXNlLTAtNjg4X0RhdGEgaWQ9InJlZi02OTEiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0Mk9UUThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNjg4X0RhdGE+DQo8QmFzZS0wLTY4OF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNjg4X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTY4OV9IYXNEYXRhPnRydWU8L0Jhc2UtMC02ODlfSGFzRGF0YT4NCjxCYXNlLTAtNjg5X0RhdGEgaWQ9InJlZi02OTIiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0Mk9UVThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNjg5X0RhdGE+DQo8QmFzZS0wLTY4OV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNjg5X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTY5MF9IYXNEYXRhPnRydWU8L0Jhc2UtMC02OTBfSGFzRGF0YT4NCjxCYXNlLTAtNjkwX0RhdGEgaWQ9InJlZi02OTMiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0Mk9UWThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNjkwX0RhdGE+DQo8QmFzZS0wLTY5MF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNjkwX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTY5MV9IYXNEYXRhPnRydWU8L0Jhc2UtMC02OTFfSGFzRGF0YT4NCjxCYXNlLTAtNjkxX0RhdGEgaWQ9InJlZi02OTQiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0Mk9UYzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNjkxX0RhdGE+DQo8QmFzZS0wLTY5MV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNjkxX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTY5Ml9IYXNEYXRhPnRydWU8L0Jhc2UtMC02OTJfSGFzRGF0YT4NCjxCYXNlLTAtNjkyX0RhdGEgaWQ9InJlZi02OTUiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0Mk9UZzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNjkyX0RhdGE+DQo8QmFzZS0wLTY5Ml9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNjkyX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTY5M19IYXNEYXRhPnRydWU8L0Jhc2UtMC02OTNfSGFzRGF0YT4NCjxCYXNlLTAtNjkzX0RhdGEgaWQ9InJlZi02OTYiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0Mk9UazhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNjkzX0RhdGE+DQo8QmFzZS0wLTY5M19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNjkzX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTY5NF9IYXNEYXRhPnRydWU8L0Jhc2UtMC02OTRfSGFzRGF0YT4NCjxCYXNlLTAtNjk0X0RhdGEgaWQ9InJlZi02OTciPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0M01EQThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNjk0X0RhdGE+DQo8QmFzZS0wLTY5NF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNjk0X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTY5NV9IYXNEYXRhPnRydWU8L0Jhc2UtMC02OTVfSGFzRGF0YT4NCjxCYXNlLTAtNjk1X0RhdGEgaWQ9InJlZi02OTgiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0M01ERThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNjk1X0RhdGE+DQo8QmFzZS0wLTY5NV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNjk1X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTY5Nl9IYXNEYXRhPnRydWU8L0Jhc2UtMC02OTZfSGFzRGF0YT4NCjxCYXNlLTAtNjk2X0RhdGEgaWQ9InJlZi02OTkiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0M01ESThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNjk2X0RhdGE+DQo8QmFzZS0wLTY5Nl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNjk2X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTY5N19IYXNEYXRhPnRydWU8L0Jhc2UtMC02OTdfSGFzRGF0YT4NCjxCYXNlLTAtNjk3X0RhdGEgaWQ9InJlZi03MDAiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0M01ETThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNjk3X0RhdGE+DQo8QmFzZS0wLTY5N19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNjk3X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTY5OF9IYXNEYXRhPnRydWU8L0Jhc2UtMC02OThfSGFzRGF0YT4NCjxCYXNlLTAtNjk4X0RhdGEgaWQ9InJlZi03MDEiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0M01EUThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNjk4X0RhdGE+DQo8QmFzZS0wLTY5OF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNjk4X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTY5OV9IYXNEYXRhPnRydWU8L0Jhc2UtMC02OTlfSGFzRGF0YT4NCjxCYXNlLTAtNjk5X0RhdGEgaWQ9InJlZi03MDIiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0M01EVThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNjk5X0RhdGE+DQo8QmFzZS0wLTY5OV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNjk5X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTcwMF9IYXNEYXRhPnRydWU8L0Jhc2UtMC03MDBfSGFzRGF0YT4NCjxCYXNlLTAtNzAwX0RhdGEgaWQ9InJlZi03MDMiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0M01EWThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNzAwX0RhdGE+DQo8QmFzZS0wLTcwMF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNzAwX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTcwMV9IYXNEYXRhPnRydWU8L0Jhc2UtMC03MDFfSGFzRGF0YT4NCjxCYXNlLTAtNzAxX0RhdGEgaWQ9InJlZi03MDQiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0M01EYzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNzAxX0RhdGE+DQo8QmFzZS0wLTcwMV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNzAxX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTcwMl9IYXNEYXRhPnRydWU8L0Jhc2UtMC03MDJfSGFzRGF0YT4NCjxCYXNlLTAtNzAyX0RhdGEgaWQ9InJlZi03MDUiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0M01EZzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNzAyX0RhdGE+DQo8QmFzZS0wLTcwMl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNzAyX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTcwM19IYXNEYXRhPnRydWU8L0Jhc2UtMC03MDNfSGFzRGF0YT4NCjxCYXNlLTAtNzAzX0RhdGEgaWQ9InJlZi03MDYiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0M01EazhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNzAzX0RhdGE+DQo8QmFzZS0wLTcwM19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNzAzX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTcwNF9IYXNEYXRhPnRydWU8L0Jhc2UtMC03MDRfSGFzRGF0YT4NCjxCYXNlLTAtNzA0X0RhdGEgaWQ9InJlZi03MDciPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0M01UQThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNzA0X0RhdGE+DQo8QmFzZS0wLTcwNF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNzA0X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTcwNV9IYXNEYXRhPnRydWU8L0Jhc2UtMC03MDVfSGFzRGF0YT4NCjxCYXNlLTAtNzA1X0RhdGEgaWQ9InJlZi03MDgiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0M01URThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNzA1X0RhdGE+DQo8QmFzZS0wLTcwNV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNzA1X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTcwNl9IYXNEYXRhPnRydWU8L0Jhc2UtMC03MDZfSGFzRGF0YT4NCjxCYXNlLTAtNzA2X0RhdGEgaWQ9InJlZi03MDkiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0M01USThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNzA2X0RhdGE+DQo8QmFzZS0wLTcwNl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNzA2X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTcwN19IYXNEYXRhPnRydWU8L0Jhc2UtMC03MDdfSGFzRGF0YT4NCjxCYXNlLTAtNzA3X0RhdGEgaWQ9InJlZi03MTAiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0M01UTThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNzA3X0RhdGE+DQo8QmFzZS0wLTcwN19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNzA3X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTcwOF9IYXNEYXRhPnRydWU8L0Jhc2UtMC03MDhfSGFzRGF0YT4NCjxCYXNlLTAtNzA4X0RhdGEgaWQ9InJlZi03MTEiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0M01UUThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNzA4X0RhdGE+DQo8QmFzZS0wLTcwOF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNzA4X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTcwOV9IYXNEYXRhPnRydWU8L0Jhc2UtMC03MDlfSGFzRGF0YT4NCjxCYXNlLTAtNzA5X0RhdGEgaWQ9InJlZi03MTIiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0M01UVThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNzA5X0RhdGE+DQo8QmFzZS0wLTcwOV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNzA5X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTcxMF9IYXNEYXRhPnRydWU8L0Jhc2UtMC03MTBfSGFzRGF0YT4NCjxCYXNlLTAtNzEwX0RhdGEgaWQ9InJlZi03MTMiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0M01UWThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNzEwX0RhdGE+DQo8QmFzZS0wLTcxMF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNzEwX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTcxMV9IYXNEYXRhPnRydWU8L0Jhc2UtMC03MTFfSGFzRGF0YT4NCjxCYXNlLTAtNzExX0RhdGEgaWQ9InJlZi03MTQiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0M01UYzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNzExX0RhdGE+DQo8QmFzZS0wLTcxMV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNzExX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTcxMl9IYXNEYXRhPnRydWU8L0Jhc2UtMC03MTJfSGFzRGF0YT4NCjxCYXNlLTAtNzEyX0RhdGEgaWQ9InJlZi03MTUiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0M01UZzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNzEyX0RhdGE+DQo8QmFzZS0wLTcxMl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNzEyX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTcxM19IYXNEYXRhPnRydWU8L0Jhc2UtMC03MTNfSGFzRGF0YT4NCjxCYXNlLTAtNzEzX0RhdGEgaWQ9InJlZi03MTYiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0M01UazhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNzEzX0RhdGE+DQo8QmFzZS0wLTcxM19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNzEzX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTcxNF9IYXNEYXRhPnRydWU8L0Jhc2UtMC03MTRfSGFzRGF0YT4NCjxCYXNlLTAtNzE0X0RhdGEgaWQ9InJlZi03MTciPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0M01qQThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNzE0X0RhdGE+DQo8QmFzZS0wLTcxNF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNzE0X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTcxNV9IYXNEYXRhPnRydWU8L0Jhc2UtMC03MTVfSGFzRGF0YT4NCjxCYXNlLTAtNzE1X0RhdGEgaWQ9InJlZi03MTgiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0M01qRThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNzE1X0RhdGE+DQo8QmFzZS0wLTcxNV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNzE1X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTcxNl9IYXNEYXRhPnRydWU8L0Jhc2UtMC03MTZfSGFzRGF0YT4NCjxCYXNlLTAtNzE2X0RhdGEgaWQ9InJlZi03MTkiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0M01qSThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNzE2X0RhdGE+DQo8QmFzZS0wLTcxNl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNzE2X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTcxN19IYXNEYXRhPnRydWU8L0Jhc2UtMC03MTdfSGFzRGF0YT4NCjxCYXNlLTAtNzE3X0RhdGEgaWQ9InJlZi03MjAiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0M01qTThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNzE3X0RhdGE+DQo8QmFzZS0wLTcxN19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNzE3X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTcxOF9IYXNEYXRhPnRydWU8L0Jhc2UtMC03MThfSGFzRGF0YT4NCjxCYXNlLTAtNzE4X0RhdGEgaWQ9InJlZi03MjEiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0M01qUThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNzE4X0RhdGE+DQo8QmFzZS0wLTcxOF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNzE4X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTcxOV9IYXNEYXRhPnRydWU8L0Jhc2UtMC03MTlfSGFzRGF0YT4NCjxCYXNlLTAtNzE5X0RhdGEgaWQ9InJlZi03MjIiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0M01qVThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNzE5X0RhdGE+DQo8QmFzZS0wLTcxOV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNzE5X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTcyMF9IYXNEYXRhPnRydWU8L0Jhc2UtMC03MjBfSGFzRGF0YT4NCjxCYXNlLTAtNzIwX0RhdGEgaWQ9InJlZi03MjMiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0M01qWThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNzIwX0RhdGE+DQo8QmFzZS0wLTcyMF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNzIwX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTcyMV9IYXNEYXRhPnRydWU8L0Jhc2UtMC03MjFfSGFzRGF0YT4NCjxCYXNlLTAtNzIxX0RhdGEgaWQ9InJlZi03MjQiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0M01qYzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNzIxX0RhdGE+DQo8QmFzZS0wLTcyMV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNzIxX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTcyMl9IYXNEYXRhPnRydWU8L0Jhc2UtMC03MjJfSGFzRGF0YT4NCjxCYXNlLTAtNzIyX0RhdGEgaWQ9InJlZi03MjUiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0M01qZzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNzIyX0RhdGE+DQo8QmFzZS0wLTcyMl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNzIyX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTcyM19IYXNEYXRhPnRydWU8L0Jhc2UtMC03MjNfSGFzRGF0YT4NCjxCYXNlLTAtNzIzX0RhdGEgaWQ9InJlZi03MjYiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0M01qazhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNzIzX0RhdGE+DQo8QmFzZS0wLTcyM19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNzIzX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTcyNF9IYXNEYXRhPnRydWU8L0Jhc2UtMC03MjRfSGFzRGF0YT4NCjxCYXNlLTAtNzI0X0RhdGEgaWQ9InJlZi03MjciPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0M016QThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNzI0X0RhdGE+DQo8QmFzZS0wLTcyNF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNzI0X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTcyNV9IYXNEYXRhPnRydWU8L0Jhc2UtMC03MjVfSGFzRGF0YT4NCjxCYXNlLTAtNzI1X0RhdGEgaWQ9InJlZi03MjgiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0M016RThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNzI1X0RhdGE+DQo8QmFzZS0wLTcyNV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNzI1X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTcyNl9IYXNEYXRhPnRydWU8L0Jhc2UtMC03MjZfSGFzRGF0YT4NCjxCYXNlLTAtNzI2X0RhdGEgaWQ9InJlZi03MjkiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0M016SThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNzI2X0RhdGE+DQo8QmFzZS0wLTcyNl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNzI2X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTcyN19IYXNEYXRhPnRydWU8L0Jhc2UtMC03MjdfSGFzRGF0YT4NCjxCYXNlLTAtNzI3X0RhdGEgaWQ9InJlZi03MzAiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0M016TThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNzI3X0RhdGE+DQo8QmFzZS0wLTcyN19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNzI3X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTcyOF9IYXNEYXRhPnRydWU8L0Jhc2UtMC03MjhfSGFzRGF0YT4NCjxCYXNlLTAtNzI4X0RhdGEgaWQ9InJlZi03MzEiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0M016UThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNzI4X0RhdGE+DQo8QmFzZS0wLTcyOF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNzI4X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTcyOV9IYXNEYXRhPnRydWU8L0Jhc2UtMC03MjlfSGFzRGF0YT4NCjxCYXNlLTAtNzI5X0RhdGEgaWQ9InJlZi03MzIiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0M016VThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNzI5X0RhdGE+DQo8QmFzZS0wLTcyOV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNzI5X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTczMF9IYXNEYXRhPnRydWU8L0Jhc2UtMC03MzBfSGFzRGF0YT4NCjxCYXNlLTAtNzMwX0RhdGEgaWQ9InJlZi03MzMiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0M016WThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNzMwX0RhdGE+DQo8QmFzZS0wLTczMF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNzMwX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTczMV9IYXNEYXRhPnRydWU8L0Jhc2UtMC03MzFfSGFzRGF0YT4NCjxCYXNlLTAtNzMxX0RhdGEgaWQ9InJlZi03MzQiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0M016YzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNzMxX0RhdGE+DQo8QmFzZS0wLTczMV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNzMxX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTczMl9IYXNEYXRhPnRydWU8L0Jhc2UtMC03MzJfSGFzRGF0YT4NCjxCYXNlLTAtNzMyX0RhdGEgaWQ9InJlZi03MzUiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0M016ZzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNzMyX0RhdGE+DQo8QmFzZS0wLTczMl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNzMyX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTczM19IYXNEYXRhPnRydWU8L0Jhc2UtMC03MzNfSGFzRGF0YT4NCjxCYXNlLTAtNzMzX0RhdGEgaWQ9InJlZi03MzYiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0M016azhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNzMzX0RhdGE+DQo8QmFzZS0wLTczM19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNzMzX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTczNF9IYXNEYXRhPnRydWU8L0Jhc2UtMC03MzRfSGFzRGF0YT4NCjxCYXNlLTAtNzM0X0RhdGEgaWQ9InJlZi03MzciPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0M05EQThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNzM0X0RhdGE+DQo8QmFzZS0wLTczNF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNzM0X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTczNV9IYXNEYXRhPnRydWU8L0Jhc2UtMC03MzVfSGFzRGF0YT4NCjxCYXNlLTAtNzM1X0RhdGEgaWQ9InJlZi03MzgiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0M05ERThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNzM1X0RhdGE+DQo8QmFzZS0wLTczNV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNzM1X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTczNl9IYXNEYXRhPnRydWU8L0Jhc2UtMC03MzZfSGFzRGF0YT4NCjxCYXNlLTAtNzM2X0RhdGEgaWQ9InJlZi03MzkiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0M05ESThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNzM2X0RhdGE+DQo8QmFzZS0wLTczNl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNzM2X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTczN19IYXNEYXRhPnRydWU8L0Jhc2UtMC03MzdfSGFzRGF0YT4NCjxCYXNlLTAtNzM3X0RhdGEgaWQ9InJlZi03NDAiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0M05ETThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNzM3X0RhdGE+DQo8QmFzZS0wLTczN19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNzM3X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTczOF9IYXNEYXRhPnRydWU8L0Jhc2UtMC03MzhfSGFzRGF0YT4NCjxCYXNlLTAtNzM4X0RhdGEgaWQ9InJlZi03NDEiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0M05EUThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNzM4X0RhdGE+DQo8QmFzZS0wLTczOF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNzM4X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTczOV9IYXNEYXRhPnRydWU8L0Jhc2UtMC03MzlfSGFzRGF0YT4NCjxCYXNlLTAtNzM5X0RhdGEgaWQ9InJlZi03NDIiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0M05EVThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNzM5X0RhdGE+DQo8QmFzZS0wLTczOV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNzM5X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTc0MF9IYXNEYXRhPnRydWU8L0Jhc2UtMC03NDBfSGFzRGF0YT4NCjxCYXNlLTAtNzQwX0RhdGEgaWQ9InJlZi03NDMiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0M05EWThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNzQwX0RhdGE+DQo8QmFzZS0wLTc0MF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNzQwX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTc0MV9IYXNEYXRhPnRydWU8L0Jhc2UtMC03NDFfSGFzRGF0YT4NCjxCYXNlLTAtNzQxX0RhdGEgaWQ9InJlZi03NDQiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0M05EYzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNzQxX0RhdGE+DQo8QmFzZS0wLTc0MV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNzQxX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTc0Ml9IYXNEYXRhPnRydWU8L0Jhc2UtMC03NDJfSGFzRGF0YT4NCjxCYXNlLTAtNzQyX0RhdGEgaWQ9InJlZi03NDUiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0M05EZzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNzQyX0RhdGE+DQo8QmFzZS0wLTc0Ml9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNzQyX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTc0M19IYXNEYXRhPnRydWU8L0Jhc2UtMC03NDNfSGFzRGF0YT4NCjxCYXNlLTAtNzQzX0RhdGEgaWQ9InJlZi03NDYiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0M05EazhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNzQzX0RhdGE+DQo8QmFzZS0wLTc0M19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNzQzX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTc0NF9IYXNEYXRhPnRydWU8L0Jhc2UtMC03NDRfSGFzRGF0YT4NCjxCYXNlLTAtNzQ0X0RhdGEgaWQ9InJlZi03NDciPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0M05UQThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNzQ0X0RhdGE+DQo8QmFzZS0wLTc0NF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNzQ0X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTc0NV9IYXNEYXRhPnRydWU8L0Jhc2UtMC03NDVfSGFzRGF0YT4NCjxCYXNlLTAtNzQ1X0RhdGEgaWQ9InJlZi03NDgiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0M05URThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNzQ1X0RhdGE+DQo8QmFzZS0wLTc0NV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNzQ1X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTc0Nl9IYXNEYXRhPnRydWU8L0Jhc2UtMC03NDZfSGFzRGF0YT4NCjxCYXNlLTAtNzQ2X0RhdGEgaWQ9InJlZi03NDkiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0M05USThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNzQ2X0RhdGE+DQo8QmFzZS0wLTc0Nl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNzQ2X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTc0N19IYXNEYXRhPnRydWU8L0Jhc2UtMC03NDdfSGFzRGF0YT4NCjxCYXNlLTAtNzQ3X0RhdGEgaWQ9InJlZi03NTAiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0M05UTThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNzQ3X0RhdGE+DQo8QmFzZS0wLTc0N19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNzQ3X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTc0OF9IYXNEYXRhPnRydWU8L0Jhc2UtMC03NDhfSGFzRGF0YT4NCjxCYXNlLTAtNzQ4X0RhdGEgaWQ9InJlZi03NTEiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0M05UUThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNzQ4X0RhdGE+DQo8QmFzZS0wLTc0OF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNzQ4X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTc0OV9IYXNEYXRhPnRydWU8L0Jhc2UtMC03NDlfSGFzRGF0YT4NCjxCYXNlLTAtNzQ5X0RhdGEgaWQ9InJlZi03NTIiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0M05UVThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNzQ5X0RhdGE+DQo8QmFzZS0wLTc0OV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNzQ5X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTc1MF9IYXNEYXRhPnRydWU8L0Jhc2UtMC03NTBfSGFzRGF0YT4NCjxCYXNlLTAtNzUwX0RhdGEgaWQ9InJlZi03NTMiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0M05UWThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNzUwX0RhdGE+DQo8QmFzZS0wLTc1MF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNzUwX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTc1MV9IYXNEYXRhPnRydWU8L0Jhc2UtMC03NTFfSGFzRGF0YT4NCjxCYXNlLTAtNzUxX0RhdGEgaWQ9InJlZi03NTQiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0M05UYzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNzUxX0RhdGE+DQo8QmFzZS0wLTc1MV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNzUxX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTc1Ml9IYXNEYXRhPnRydWU8L0Jhc2UtMC03NTJfSGFzRGF0YT4NCjxCYXNlLTAtNzUyX0RhdGEgaWQ9InJlZi03NTUiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0M05UZzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNzUyX0RhdGE+DQo8QmFzZS0wLTc1Ml9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNzUyX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTc1M19IYXNEYXRhPnRydWU8L0Jhc2UtMC03NTNfSGFzRGF0YT4NCjxCYXNlLTAtNzUzX0RhdGEgaWQ9InJlZi03NTYiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0M05UazhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNzUzX0RhdGE+DQo8QmFzZS0wLTc1M19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNzUzX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTc1NF9IYXNEYXRhPnRydWU8L0Jhc2UtMC03NTRfSGFzRGF0YT4NCjxCYXNlLTAtNzU0X0RhdGEgaWQ9InJlZi03NTciPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0M05qQThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNzU0X0RhdGE+DQo8QmFzZS0wLTc1NF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNzU0X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTc1NV9IYXNEYXRhPnRydWU8L0Jhc2UtMC03NTVfSGFzRGF0YT4NCjxCYXNlLTAtNzU1X0RhdGEgaWQ9InJlZi03NTgiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0M05qRThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNzU1X0RhdGE+DQo8QmFzZS0wLTc1NV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNzU1X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTc1Nl9IYXNEYXRhPnRydWU8L0Jhc2UtMC03NTZfSGFzRGF0YT4NCjxCYXNlLTAtNzU2X0RhdGEgaWQ9InJlZi03NTkiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0M05qSThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNzU2X0RhdGE+DQo8QmFzZS0wLTc1Nl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNzU2X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTc1N19IYXNEYXRhPnRydWU8L0Jhc2UtMC03NTdfSGFzRGF0YT4NCjxCYXNlLTAtNzU3X0RhdGEgaWQ9InJlZi03NjAiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0M05qTThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNzU3X0RhdGE+DQo8QmFzZS0wLTc1N19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNzU3X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTc1OF9IYXNEYXRhPnRydWU8L0Jhc2UtMC03NThfSGFzRGF0YT4NCjxCYXNlLTAtNzU4X0RhdGEgaWQ9InJlZi03NjEiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0M05qUThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNzU4X0RhdGE+DQo8QmFzZS0wLTc1OF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNzU4X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTc1OV9IYXNEYXRhPnRydWU8L0Jhc2UtMC03NTlfSGFzRGF0YT4NCjxCYXNlLTAtNzU5X0RhdGEgaWQ9InJlZi03NjIiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0M05qVThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNzU5X0RhdGE+DQo8QmFzZS0wLTc1OV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNzU5X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTc2MF9IYXNEYXRhPnRydWU8L0Jhc2UtMC03NjBfSGFzRGF0YT4NCjxCYXNlLTAtNzYwX0RhdGEgaWQ9InJlZi03NjMiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0M05qWThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNzYwX0RhdGE+DQo8QmFzZS0wLTc2MF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNzYwX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTc2MV9IYXNEYXRhPnRydWU8L0Jhc2UtMC03NjFfSGFzRGF0YT4NCjxCYXNlLTAtNzYxX0RhdGEgaWQ9InJlZi03NjQiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0M05qYzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNzYxX0RhdGE+DQo8QmFzZS0wLTc2MV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNzYxX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTc2Ml9IYXNEYXRhPnRydWU8L0Jhc2UtMC03NjJfSGFzRGF0YT4NCjxCYXNlLTAtNzYyX0RhdGEgaWQ9InJlZi03NjUiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0M05qZzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNzYyX0RhdGE+DQo8QmFzZS0wLTc2Ml9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNzYyX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTc2M19IYXNEYXRhPnRydWU8L0Jhc2UtMC03NjNfSGFzRGF0YT4NCjxCYXNlLTAtNzYzX0RhdGEgaWQ9InJlZi03NjYiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0M05qazhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNzYzX0RhdGE+DQo8QmFzZS0wLTc2M19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNzYzX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTc2NF9IYXNEYXRhPnRydWU8L0Jhc2UtMC03NjRfSGFzRGF0YT4NCjxCYXNlLTAtNzY0X0RhdGEgaWQ9InJlZi03NjciPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0M056QThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNzY0X0RhdGE+DQo8QmFzZS0wLTc2NF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNzY0X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTc2NV9IYXNEYXRhPnRydWU8L0Jhc2UtMC03NjVfSGFzRGF0YT4NCjxCYXNlLTAtNzY1X0RhdGEgaWQ9InJlZi03NjgiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0M056RThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNzY1X0RhdGE+DQo8QmFzZS0wLTc2NV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNzY1X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTc2Nl9IYXNEYXRhPnRydWU8L0Jhc2UtMC03NjZfSGFzRGF0YT4NCjxCYXNlLTAtNzY2X0RhdGEgaWQ9InJlZi03NjkiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0M056SThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNzY2X0RhdGE+DQo8QmFzZS0wLTc2Nl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNzY2X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTc2N19IYXNEYXRhPnRydWU8L0Jhc2UtMC03NjdfSGFzRGF0YT4NCjxCYXNlLTAtNzY3X0RhdGEgaWQ9InJlZi03NzAiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0M056TThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNzY3X0RhdGE+DQo8QmFzZS0wLTc2N19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNzY3X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTc2OF9IYXNEYXRhPnRydWU8L0Jhc2UtMC03NjhfSGFzRGF0YT4NCjxCYXNlLTAtNzY4X0RhdGEgaWQ9InJlZi03NzEiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0M056UThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNzY4X0RhdGE+DQo8QmFzZS0wLTc2OF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNzY4X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTc2OV9IYXNEYXRhPnRydWU8L0Jhc2UtMC03NjlfSGFzRGF0YT4NCjxCYXNlLTAtNzY5X0RhdGEgaWQ9InJlZi03NzIiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0M056VThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNzY5X0RhdGE+DQo8QmFzZS0wLTc2OV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNzY5X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTc3MF9IYXNEYXRhPnRydWU8L0Jhc2UtMC03NzBfSGFzRGF0YT4NCjxCYXNlLTAtNzcwX0RhdGEgaWQ9InJlZi03NzMiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0M056WThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNzcwX0RhdGE+DQo8QmFzZS0wLTc3MF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNzcwX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTc3MV9IYXNEYXRhPnRydWU8L0Jhc2UtMC03NzFfSGFzRGF0YT4NCjxCYXNlLTAtNzcxX0RhdGEgaWQ9InJlZi03NzQiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0M056YzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNzcxX0RhdGE+DQo8QmFzZS0wLTc3MV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNzcxX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTc3Ml9IYXNEYXRhPnRydWU8L0Jhc2UtMC03NzJfSGFzRGF0YT4NCjxCYXNlLTAtNzcyX0RhdGEgaWQ9InJlZi03NzUiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0M056ZzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNzcyX0RhdGE+DQo8QmFzZS0wLTc3Ml9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNzcyX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTc3M19IYXNEYXRhPnRydWU8L0Jhc2UtMC03NzNfSGFzRGF0YT4NCjxCYXNlLTAtNzczX0RhdGEgaWQ9InJlZi03NzYiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0M056azhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNzczX0RhdGE+DQo8QmFzZS0wLTc3M19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNzczX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTc3NF9IYXNEYXRhPnRydWU8L0Jhc2UtMC03NzRfSGFzRGF0YT4NCjxCYXNlLTAtNzc0X0RhdGEgaWQ9InJlZi03NzciPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0M09EQThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNzc0X0RhdGE+DQo8QmFzZS0wLTc3NF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNzc0X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTc3NV9IYXNEYXRhPnRydWU8L0Jhc2UtMC03NzVfSGFzRGF0YT4NCjxCYXNlLTAtNzc1X0RhdGEgaWQ9InJlZi03NzgiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0M09ERThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNzc1X0RhdGE+DQo8QmFzZS0wLTc3NV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNzc1X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTc3Nl9IYXNEYXRhPnRydWU8L0Jhc2UtMC03NzZfSGFzRGF0YT4NCjxCYXNlLTAtNzc2X0RhdGEgaWQ9InJlZi03NzkiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0M09ESThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNzc2X0RhdGE+DQo8QmFzZS0wLTc3Nl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNzc2X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTc3N19IYXNEYXRhPnRydWU8L0Jhc2UtMC03NzdfSGFzRGF0YT4NCjxCYXNlLTAtNzc3X0RhdGEgaWQ9InJlZi03ODAiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0M09ETThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNzc3X0RhdGE+DQo8QmFzZS0wLTc3N19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNzc3X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTc3OF9IYXNEYXRhPnRydWU8L0Jhc2UtMC03NzhfSGFzRGF0YT4NCjxCYXNlLTAtNzc4X0RhdGEgaWQ9InJlZi03ODEiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0M09EUThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNzc4X0RhdGE+DQo8QmFzZS0wLTc3OF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNzc4X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTc3OV9IYXNEYXRhPnRydWU8L0Jhc2UtMC03NzlfSGFzRGF0YT4NCjxCYXNlLTAtNzc5X0RhdGEgaWQ9InJlZi03ODIiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0M09EVThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNzc5X0RhdGE+DQo8QmFzZS0wLTc3OV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNzc5X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTc4MF9IYXNEYXRhPnRydWU8L0Jhc2UtMC03ODBfSGFzRGF0YT4NCjxCYXNlLTAtNzgwX0RhdGEgaWQ9InJlZi03ODMiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0M09EWThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNzgwX0RhdGE+DQo8QmFzZS0wLTc4MF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNzgwX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTc4MV9IYXNEYXRhPnRydWU8L0Jhc2UtMC03ODFfSGFzRGF0YT4NCjxCYXNlLTAtNzgxX0RhdGEgaWQ9InJlZi03ODQiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0M09EYzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNzgxX0RhdGE+DQo8QmFzZS0wLTc4MV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNzgxX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTc4Ml9IYXNEYXRhPnRydWU8L0Jhc2UtMC03ODJfSGFzRGF0YT4NCjxCYXNlLTAtNzgyX0RhdGEgaWQ9InJlZi03ODUiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0M09EZzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNzgyX0RhdGE+DQo8QmFzZS0wLTc4Ml9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNzgyX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTc4M19IYXNEYXRhPnRydWU8L0Jhc2UtMC03ODNfSGFzRGF0YT4NCjxCYXNlLTAtNzgzX0RhdGEgaWQ9InJlZi03ODYiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0M09EazhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNzgzX0RhdGE+DQo8QmFzZS0wLTc4M19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNzgzX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTc4NF9IYXNEYXRhPnRydWU8L0Jhc2UtMC03ODRfSGFzRGF0YT4NCjxCYXNlLTAtNzg0X0RhdGEgaWQ9InJlZi03ODciPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0M09UQThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNzg0X0RhdGE+DQo8QmFzZS0wLTc4NF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNzg0X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTc4NV9IYXNEYXRhPnRydWU8L0Jhc2UtMC03ODVfSGFzRGF0YT4NCjxCYXNlLTAtNzg1X0RhdGEgaWQ9InJlZi03ODgiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0M09URThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNzg1X0RhdGE+DQo8QmFzZS0wLTc4NV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNzg1X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTc4Nl9IYXNEYXRhPnRydWU8L0Jhc2UtMC03ODZfSGFzRGF0YT4NCjxCYXNlLTAtNzg2X0RhdGEgaWQ9InJlZi03ODkiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0M09USThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNzg2X0RhdGE+DQo8QmFzZS0wLTc4Nl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNzg2X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTc4N19IYXNEYXRhPnRydWU8L0Jhc2UtMC03ODdfSGFzRGF0YT4NCjxCYXNlLTAtNzg3X0RhdGEgaWQ9InJlZi03OTAiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0M09UTThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNzg3X0RhdGE+DQo8QmFzZS0wLTc4N19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNzg3X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTc4OF9IYXNEYXRhPnRydWU8L0Jhc2UtMC03ODhfSGFzRGF0YT4NCjxCYXNlLTAtNzg4X0RhdGEgaWQ9InJlZi03OTEiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0M09UUThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNzg4X0RhdGE+DQo8QmFzZS0wLTc4OF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNzg4X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTc4OV9IYXNEYXRhPnRydWU8L0Jhc2UtMC03ODlfSGFzRGF0YT4NCjxCYXNlLTAtNzg5X0RhdGEgaWQ9InJlZi03OTIiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0M09UVThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNzg5X0RhdGE+DQo8QmFzZS0wLTc4OV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNzg5X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTc5MF9IYXNEYXRhPnRydWU8L0Jhc2UtMC03OTBfSGFzRGF0YT4NCjxCYXNlLTAtNzkwX0RhdGEgaWQ9InJlZi03OTMiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0M09UWThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNzkwX0RhdGE+DQo8QmFzZS0wLTc5MF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNzkwX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTc5MV9IYXNEYXRhPnRydWU8L0Jhc2UtMC03OTFfSGFzRGF0YT4NCjxCYXNlLTAtNzkxX0RhdGEgaWQ9InJlZi03OTQiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0M09UYzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNzkxX0RhdGE+DQo8QmFzZS0wLTc5MV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNzkxX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTc5Ml9IYXNEYXRhPnRydWU8L0Jhc2UtMC03OTJfSGFzRGF0YT4NCjxCYXNlLTAtNzkyX0RhdGEgaWQ9InJlZi03OTUiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0M09UZzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNzkyX0RhdGE+DQo8QmFzZS0wLTc5Ml9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNzkyX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTc5M19IYXNEYXRhPnRydWU8L0Jhc2UtMC03OTNfSGFzRGF0YT4NCjxCYXNlLTAtNzkzX0RhdGEgaWQ9InJlZi03OTYiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0M09UazhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNzkzX0RhdGE+DQo8QmFzZS0wLTc5M19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNzkzX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTc5NF9IYXNEYXRhPnRydWU8L0Jhc2UtMC03OTRfSGFzRGF0YT4NCjxCYXNlLTAtNzk0X0RhdGEgaWQ9InJlZi03OTciPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NE1EQThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNzk0X0RhdGE+DQo8QmFzZS0wLTc5NF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNzk0X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTc5NV9IYXNEYXRhPnRydWU8L0Jhc2UtMC03OTVfSGFzRGF0YT4NCjxCYXNlLTAtNzk1X0RhdGEgaWQ9InJlZi03OTgiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NE1ERThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNzk1X0RhdGE+DQo8QmFzZS0wLTc5NV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNzk1X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTc5Nl9IYXNEYXRhPnRydWU8L0Jhc2UtMC03OTZfSGFzRGF0YT4NCjxCYXNlLTAtNzk2X0RhdGEgaWQ9InJlZi03OTkiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NE1ESThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNzk2X0RhdGE+DQo8QmFzZS0wLTc5Nl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNzk2X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTc5N19IYXNEYXRhPnRydWU8L0Jhc2UtMC03OTdfSGFzRGF0YT4NCjxCYXNlLTAtNzk3X0RhdGEgaWQ9InJlZi04MDAiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NE1ETThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNzk3X0RhdGE+DQo8QmFzZS0wLTc5N19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNzk3X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTc5OF9IYXNEYXRhPnRydWU8L0Jhc2UtMC03OThfSGFzRGF0YT4NCjxCYXNlLTAtNzk4X0RhdGEgaWQ9InJlZi04MDEiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NE1EUThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNzk4X0RhdGE+DQo8QmFzZS0wLTc5OF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNzk4X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTc5OV9IYXNEYXRhPnRydWU8L0Jhc2UtMC03OTlfSGFzRGF0YT4NCjxCYXNlLTAtNzk5X0RhdGEgaWQ9InJlZi04MDIiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NE1EVThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtNzk5X0RhdGE+DQo8QmFzZS0wLTc5OV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtNzk5X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTgwMF9IYXNEYXRhPnRydWU8L0Jhc2UtMC04MDBfSGFzRGF0YT4NCjxCYXNlLTAtODAwX0RhdGEgaWQ9InJlZi04MDMiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NE1EWThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtODAwX0RhdGE+DQo8QmFzZS0wLTgwMF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtODAwX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTgwMV9IYXNEYXRhPnRydWU8L0Jhc2UtMC04MDFfSGFzRGF0YT4NCjxCYXNlLTAtODAxX0RhdGEgaWQ9InJlZi04MDQiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NE1EYzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtODAxX0RhdGE+DQo8QmFzZS0wLTgwMV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtODAxX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTgwMl9IYXNEYXRhPnRydWU8L0Jhc2UtMC04MDJfSGFzRGF0YT4NCjxCYXNlLTAtODAyX0RhdGEgaWQ9InJlZi04MDUiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NE1EZzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtODAyX0RhdGE+DQo8QmFzZS0wLTgwMl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtODAyX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTgwM19IYXNEYXRhPnRydWU8L0Jhc2UtMC04MDNfSGFzRGF0YT4NCjxCYXNlLTAtODAzX0RhdGEgaWQ9InJlZi04MDYiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NE1EazhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtODAzX0RhdGE+DQo8QmFzZS0wLTgwM19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtODAzX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTgwNF9IYXNEYXRhPnRydWU8L0Jhc2UtMC04MDRfSGFzRGF0YT4NCjxCYXNlLTAtODA0X0RhdGEgaWQ9InJlZi04MDciPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NE1UQThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtODA0X0RhdGE+DQo8QmFzZS0wLTgwNF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtODA0X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTgwNV9IYXNEYXRhPnRydWU8L0Jhc2UtMC04MDVfSGFzRGF0YT4NCjxCYXNlLTAtODA1X0RhdGEgaWQ9InJlZi04MDgiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NE1URThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtODA1X0RhdGE+DQo8QmFzZS0wLTgwNV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtODA1X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTgwNl9IYXNEYXRhPnRydWU8L0Jhc2UtMC04MDZfSGFzRGF0YT4NCjxCYXNlLTAtODA2X0RhdGEgaWQ9InJlZi04MDkiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NE1USThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtODA2X0RhdGE+DQo8QmFzZS0wLTgwNl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtODA2X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTgwN19IYXNEYXRhPnRydWU8L0Jhc2UtMC04MDdfSGFzRGF0YT4NCjxCYXNlLTAtODA3X0RhdGEgaWQ9InJlZi04MTAiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NE1UTThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtODA3X0RhdGE+DQo8QmFzZS0wLTgwN19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtODA3X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTgwOF9IYXNEYXRhPnRydWU8L0Jhc2UtMC04MDhfSGFzRGF0YT4NCjxCYXNlLTAtODA4X0RhdGEgaWQ9InJlZi04MTEiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NE1UUThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtODA4X0RhdGE+DQo8QmFzZS0wLTgwOF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtODA4X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTgwOV9IYXNEYXRhPnRydWU8L0Jhc2UtMC04MDlfSGFzRGF0YT4NCjxCYXNlLTAtODA5X0RhdGEgaWQ9InJlZi04MTIiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NE1UVThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtODA5X0RhdGE+DQo8QmFzZS0wLTgwOV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtODA5X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTgxMF9IYXNEYXRhPnRydWU8L0Jhc2UtMC04MTBfSGFzRGF0YT4NCjxCYXNlLTAtODEwX0RhdGEgaWQ9InJlZi04MTMiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NE1UWThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtODEwX0RhdGE+DQo8QmFzZS0wLTgxMF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtODEwX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTgxMV9IYXNEYXRhPnRydWU8L0Jhc2UtMC04MTFfSGFzRGF0YT4NCjxCYXNlLTAtODExX0RhdGEgaWQ9InJlZi04MTQiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NE1UYzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtODExX0RhdGE+DQo8QmFzZS0wLTgxMV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtODExX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTgxMl9IYXNEYXRhPnRydWU8L0Jhc2UtMC04MTJfSGFzRGF0YT4NCjxCYXNlLTAtODEyX0RhdGEgaWQ9InJlZi04MTUiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NE1UZzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtODEyX0RhdGE+DQo8QmFzZS0wLTgxMl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtODEyX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTgxM19IYXNEYXRhPnRydWU8L0Jhc2UtMC04MTNfSGFzRGF0YT4NCjxCYXNlLTAtODEzX0RhdGEgaWQ9InJlZi04MTYiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NE1UazhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtODEzX0RhdGE+DQo8QmFzZS0wLTgxM19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtODEzX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTgxNF9IYXNEYXRhPnRydWU8L0Jhc2UtMC04MTRfSGFzRGF0YT4NCjxCYXNlLTAtODE0X0RhdGEgaWQ9InJlZi04MTciPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NE1qQThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtODE0X0RhdGE+DQo8QmFzZS0wLTgxNF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtODE0X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTgxNV9IYXNEYXRhPnRydWU8L0Jhc2UtMC04MTVfSGFzRGF0YT4NCjxCYXNlLTAtODE1X0RhdGEgaWQ9InJlZi04MTgiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NE1qRThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtODE1X0RhdGE+DQo8QmFzZS0wLTgxNV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtODE1X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTgxNl9IYXNEYXRhPnRydWU8L0Jhc2UtMC04MTZfSGFzRGF0YT4NCjxCYXNlLTAtODE2X0RhdGEgaWQ9InJlZi04MTkiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NE1qSThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtODE2X0RhdGE+DQo8QmFzZS0wLTgxNl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtODE2X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTgxN19IYXNEYXRhPnRydWU8L0Jhc2UtMC04MTdfSGFzRGF0YT4NCjxCYXNlLTAtODE3X0RhdGEgaWQ9InJlZi04MjAiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NE1qTThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtODE3X0RhdGE+DQo8QmFzZS0wLTgxN19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtODE3X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTgxOF9IYXNEYXRhPnRydWU8L0Jhc2UtMC04MThfSGFzRGF0YT4NCjxCYXNlLTAtODE4X0RhdGEgaWQ9InJlZi04MjEiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NE1qUThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtODE4X0RhdGE+DQo8QmFzZS0wLTgxOF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtODE4X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTgxOV9IYXNEYXRhPnRydWU8L0Jhc2UtMC04MTlfSGFzRGF0YT4NCjxCYXNlLTAtODE5X0RhdGEgaWQ9InJlZi04MjIiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NE1qVThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtODE5X0RhdGE+DQo8QmFzZS0wLTgxOV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtODE5X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTgyMF9IYXNEYXRhPnRydWU8L0Jhc2UtMC04MjBfSGFzRGF0YT4NCjxCYXNlLTAtODIwX0RhdGEgaWQ9InJlZi04MjMiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NE1qWThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtODIwX0RhdGE+DQo8QmFzZS0wLTgyMF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtODIwX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTgyMV9IYXNEYXRhPnRydWU8L0Jhc2UtMC04MjFfSGFzRGF0YT4NCjxCYXNlLTAtODIxX0RhdGEgaWQ9InJlZi04MjQiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NE1qYzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtODIxX0RhdGE+DQo8QmFzZS0wLTgyMV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtODIxX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTgyMl9IYXNEYXRhPnRydWU8L0Jhc2UtMC04MjJfSGFzRGF0YT4NCjxCYXNlLTAtODIyX0RhdGEgaWQ9InJlZi04MjUiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NE1qZzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtODIyX0RhdGE+DQo8QmFzZS0wLTgyMl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtODIyX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTgyM19IYXNEYXRhPnRydWU8L0Jhc2UtMC04MjNfSGFzRGF0YT4NCjxCYXNlLTAtODIzX0RhdGEgaWQ9InJlZi04MjYiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NE1qazhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtODIzX0RhdGE+DQo8QmFzZS0wLTgyM19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtODIzX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTgyNF9IYXNEYXRhPnRydWU8L0Jhc2UtMC04MjRfSGFzRGF0YT4NCjxCYXNlLTAtODI0X0RhdGEgaWQ9InJlZi04MjciPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NE16QThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtODI0X0RhdGE+DQo8QmFzZS0wLTgyNF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtODI0X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTgyNV9IYXNEYXRhPnRydWU8L0Jhc2UtMC04MjVfSGFzRGF0YT4NCjxCYXNlLTAtODI1X0RhdGEgaWQ9InJlZi04MjgiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NE16RThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtODI1X0RhdGE+DQo8QmFzZS0wLTgyNV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtODI1X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTgyNl9IYXNEYXRhPnRydWU8L0Jhc2UtMC04MjZfSGFzRGF0YT4NCjxCYXNlLTAtODI2X0RhdGEgaWQ9InJlZi04MjkiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NE16SThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtODI2X0RhdGE+DQo8QmFzZS0wLTgyNl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtODI2X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTgyN19IYXNEYXRhPnRydWU8L0Jhc2UtMC04MjdfSGFzRGF0YT4NCjxCYXNlLTAtODI3X0RhdGEgaWQ9InJlZi04MzAiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NE16TThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtODI3X0RhdGE+DQo8QmFzZS0wLTgyN19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtODI3X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTgyOF9IYXNEYXRhPnRydWU8L0Jhc2UtMC04MjhfSGFzRGF0YT4NCjxCYXNlLTAtODI4X0RhdGEgaWQ9InJlZi04MzEiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NE16UThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtODI4X0RhdGE+DQo8QmFzZS0wLTgyOF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtODI4X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTgyOV9IYXNEYXRhPnRydWU8L0Jhc2UtMC04MjlfSGFzRGF0YT4NCjxCYXNlLTAtODI5X0RhdGEgaWQ9InJlZi04MzIiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NE16VThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtODI5X0RhdGE+DQo8QmFzZS0wLTgyOV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtODI5X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTgzMF9IYXNEYXRhPnRydWU8L0Jhc2UtMC04MzBfSGFzRGF0YT4NCjxCYXNlLTAtODMwX0RhdGEgaWQ9InJlZi04MzMiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NE16WThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtODMwX0RhdGE+DQo8QmFzZS0wLTgzMF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtODMwX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTgzMV9IYXNEYXRhPnRydWU8L0Jhc2UtMC04MzFfSGFzRGF0YT4NCjxCYXNlLTAtODMxX0RhdGEgaWQ9InJlZi04MzQiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NE16YzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtODMxX0RhdGE+DQo8QmFzZS0wLTgzMV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtODMxX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTgzMl9IYXNEYXRhPnRydWU8L0Jhc2UtMC04MzJfSGFzRGF0YT4NCjxCYXNlLTAtODMyX0RhdGEgaWQ9InJlZi04MzUiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NE16ZzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtODMyX0RhdGE+DQo8QmFzZS0wLTgzMl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtODMyX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTgzM19IYXNEYXRhPnRydWU8L0Jhc2UtMC04MzNfSGFzRGF0YT4NCjxCYXNlLTAtODMzX0RhdGEgaWQ9InJlZi04MzYiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NE16azhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtODMzX0RhdGE+DQo8QmFzZS0wLTgzM19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtODMzX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTgzNF9IYXNEYXRhPnRydWU8L0Jhc2UtMC04MzRfSGFzRGF0YT4NCjxCYXNlLTAtODM0X0RhdGEgaWQ9InJlZi04MzciPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NE5EQThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtODM0X0RhdGE+DQo8QmFzZS0wLTgzNF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtODM0X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTgzNV9IYXNEYXRhPnRydWU8L0Jhc2UtMC04MzVfSGFzRGF0YT4NCjxCYXNlLTAtODM1X0RhdGEgaWQ9InJlZi04MzgiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NE5ERThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtODM1X0RhdGE+DQo8QmFzZS0wLTgzNV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtODM1X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTgzNl9IYXNEYXRhPnRydWU8L0Jhc2UtMC04MzZfSGFzRGF0YT4NCjxCYXNlLTAtODM2X0RhdGEgaWQ9InJlZi04MzkiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NE5ESThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtODM2X0RhdGE+DQo8QmFzZS0wLTgzNl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtODM2X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTgzN19IYXNEYXRhPnRydWU8L0Jhc2UtMC04MzdfSGFzRGF0YT4NCjxCYXNlLTAtODM3X0RhdGEgaWQ9InJlZi04NDAiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NE5ETThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtODM3X0RhdGE+DQo8QmFzZS0wLTgzN19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtODM3X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTgzOF9IYXNEYXRhPnRydWU8L0Jhc2UtMC04MzhfSGFzRGF0YT4NCjxCYXNlLTAtODM4X0RhdGEgaWQ9InJlZi04NDEiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NE5EUThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtODM4X0RhdGE+DQo8QmFzZS0wLTgzOF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtODM4X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTgzOV9IYXNEYXRhPnRydWU8L0Jhc2UtMC04MzlfSGFzRGF0YT4NCjxCYXNlLTAtODM5X0RhdGEgaWQ9InJlZi04NDIiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NE5EVThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtODM5X0RhdGE+DQo8QmFzZS0wLTgzOV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtODM5X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTg0MF9IYXNEYXRhPnRydWU8L0Jhc2UtMC04NDBfSGFzRGF0YT4NCjxCYXNlLTAtODQwX0RhdGEgaWQ9InJlZi04NDMiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NE5EWThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtODQwX0RhdGE+DQo8QmFzZS0wLTg0MF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtODQwX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTg0MV9IYXNEYXRhPnRydWU8L0Jhc2UtMC04NDFfSGFzRGF0YT4NCjxCYXNlLTAtODQxX0RhdGEgaWQ9InJlZi04NDQiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NE5EYzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtODQxX0RhdGE+DQo8QmFzZS0wLTg0MV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtODQxX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTg0Ml9IYXNEYXRhPnRydWU8L0Jhc2UtMC04NDJfSGFzRGF0YT4NCjxCYXNlLTAtODQyX0RhdGEgaWQ9InJlZi04NDUiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NE5EZzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtODQyX0RhdGE+DQo8QmFzZS0wLTg0Ml9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtODQyX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTg0M19IYXNEYXRhPnRydWU8L0Jhc2UtMC04NDNfSGFzRGF0YT4NCjxCYXNlLTAtODQzX0RhdGEgaWQ9InJlZi04NDYiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NE5EazhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtODQzX0RhdGE+DQo8QmFzZS0wLTg0M19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtODQzX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTg0NF9IYXNEYXRhPnRydWU8L0Jhc2UtMC04NDRfSGFzRGF0YT4NCjxCYXNlLTAtODQ0X0RhdGEgaWQ9InJlZi04NDciPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NE5UQThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtODQ0X0RhdGE+DQo8QmFzZS0wLTg0NF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtODQ0X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTg0NV9IYXNEYXRhPnRydWU8L0Jhc2UtMC04NDVfSGFzRGF0YT4NCjxCYXNlLTAtODQ1X0RhdGEgaWQ9InJlZi04NDgiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NE5URThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtODQ1X0RhdGE+DQo8QmFzZS0wLTg0NV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtODQ1X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTg0Nl9IYXNEYXRhPnRydWU8L0Jhc2UtMC04NDZfSGFzRGF0YT4NCjxCYXNlLTAtODQ2X0RhdGEgaWQ9InJlZi04NDkiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NE5USThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtODQ2X0RhdGE+DQo8QmFzZS0wLTg0Nl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtODQ2X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTg0N19IYXNEYXRhPnRydWU8L0Jhc2UtMC04NDdfSGFzRGF0YT4NCjxCYXNlLTAtODQ3X0RhdGEgaWQ9InJlZi04NTAiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NE5UTThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtODQ3X0RhdGE+DQo8QmFzZS0wLTg0N19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtODQ3X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTg0OF9IYXNEYXRhPnRydWU8L0Jhc2UtMC04NDhfSGFzRGF0YT4NCjxCYXNlLTAtODQ4X0RhdGEgaWQ9InJlZi04NTEiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NE5UUThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtODQ4X0RhdGE+DQo8QmFzZS0wLTg0OF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtODQ4X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTg0OV9IYXNEYXRhPnRydWU8L0Jhc2UtMC04NDlfSGFzRGF0YT4NCjxCYXNlLTAtODQ5X0RhdGEgaWQ9InJlZi04NTIiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NE5UVThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtODQ5X0RhdGE+DQo8QmFzZS0wLTg0OV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtODQ5X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTg1MF9IYXNEYXRhPnRydWU8L0Jhc2UtMC04NTBfSGFzRGF0YT4NCjxCYXNlLTAtODUwX0RhdGEgaWQ9InJlZi04NTMiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NE5UWThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtODUwX0RhdGE+DQo8QmFzZS0wLTg1MF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtODUwX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTg1MV9IYXNEYXRhPnRydWU8L0Jhc2UtMC04NTFfSGFzRGF0YT4NCjxCYXNlLTAtODUxX0RhdGEgaWQ9InJlZi04NTQiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NE5UYzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtODUxX0RhdGE+DQo8QmFzZS0wLTg1MV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtODUxX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTg1Ml9IYXNEYXRhPnRydWU8L0Jhc2UtMC04NTJfSGFzRGF0YT4NCjxCYXNlLTAtODUyX0RhdGEgaWQ9InJlZi04NTUiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NE5UZzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtODUyX0RhdGE+DQo8QmFzZS0wLTg1Ml9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtODUyX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTg1M19IYXNEYXRhPnRydWU8L0Jhc2UtMC04NTNfSGFzRGF0YT4NCjxCYXNlLTAtODUzX0RhdGEgaWQ9InJlZi04NTYiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NE5UazhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtODUzX0RhdGE+DQo8QmFzZS0wLTg1M19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtODUzX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTg1NF9IYXNEYXRhPnRydWU8L0Jhc2UtMC04NTRfSGFzRGF0YT4NCjxCYXNlLTAtODU0X0RhdGEgaWQ9InJlZi04NTciPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NE5qQThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtODU0X0RhdGE+DQo8QmFzZS0wLTg1NF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtODU0X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTg1NV9IYXNEYXRhPnRydWU8L0Jhc2UtMC04NTVfSGFzRGF0YT4NCjxCYXNlLTAtODU1X0RhdGEgaWQ9InJlZi04NTgiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NE5qRThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtODU1X0RhdGE+DQo8QmFzZS0wLTg1NV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtODU1X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTg1Nl9IYXNEYXRhPnRydWU8L0Jhc2UtMC04NTZfSGFzRGF0YT4NCjxCYXNlLTAtODU2X0RhdGEgaWQ9InJlZi04NTkiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NE5qSThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtODU2X0RhdGE+DQo8QmFzZS0wLTg1Nl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtODU2X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTg1N19IYXNEYXRhPnRydWU8L0Jhc2UtMC04NTdfSGFzRGF0YT4NCjxCYXNlLTAtODU3X0RhdGEgaWQ9InJlZi04NjAiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NE5qTThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtODU3X0RhdGE+DQo8QmFzZS0wLTg1N19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtODU3X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTg1OF9IYXNEYXRhPnRydWU8L0Jhc2UtMC04NThfSGFzRGF0YT4NCjxCYXNlLTAtODU4X0RhdGEgaWQ9InJlZi04NjEiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NE5qUThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtODU4X0RhdGE+DQo8QmFzZS0wLTg1OF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtODU4X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTg1OV9IYXNEYXRhPnRydWU8L0Jhc2UtMC04NTlfSGFzRGF0YT4NCjxCYXNlLTAtODU5X0RhdGEgaWQ9InJlZi04NjIiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NE5qVThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtODU5X0RhdGE+DQo8QmFzZS0wLTg1OV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtODU5X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTg2MF9IYXNEYXRhPnRydWU8L0Jhc2UtMC04NjBfSGFzRGF0YT4NCjxCYXNlLTAtODYwX0RhdGEgaWQ9InJlZi04NjMiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NE5qWThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtODYwX0RhdGE+DQo8QmFzZS0wLTg2MF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtODYwX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTg2MV9IYXNEYXRhPnRydWU8L0Jhc2UtMC04NjFfSGFzRGF0YT4NCjxCYXNlLTAtODYxX0RhdGEgaWQ9InJlZi04NjQiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NE5qYzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtODYxX0RhdGE+DQo8QmFzZS0wLTg2MV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtODYxX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTg2Ml9IYXNEYXRhPnRydWU8L0Jhc2UtMC04NjJfSGFzRGF0YT4NCjxCYXNlLTAtODYyX0RhdGEgaWQ9InJlZi04NjUiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NE5qZzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtODYyX0RhdGE+DQo8QmFzZS0wLTg2Ml9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtODYyX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTg2M19IYXNEYXRhPnRydWU8L0Jhc2UtMC04NjNfSGFzRGF0YT4NCjxCYXNlLTAtODYzX0RhdGEgaWQ9InJlZi04NjYiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NE5qazhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtODYzX0RhdGE+DQo8QmFzZS0wLTg2M19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtODYzX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTg2NF9IYXNEYXRhPnRydWU8L0Jhc2UtMC04NjRfSGFzRGF0YT4NCjxCYXNlLTAtODY0X0RhdGEgaWQ9InJlZi04NjciPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NE56QThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtODY0X0RhdGE+DQo8QmFzZS0wLTg2NF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtODY0X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTg2NV9IYXNEYXRhPnRydWU8L0Jhc2UtMC04NjVfSGFzRGF0YT4NCjxCYXNlLTAtODY1X0RhdGEgaWQ9InJlZi04NjgiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NE56RThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtODY1X0RhdGE+DQo8QmFzZS0wLTg2NV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtODY1X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTg2Nl9IYXNEYXRhPnRydWU8L0Jhc2UtMC04NjZfSGFzRGF0YT4NCjxCYXNlLTAtODY2X0RhdGEgaWQ9InJlZi04NjkiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NE56SThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtODY2X0RhdGE+DQo8QmFzZS0wLTg2Nl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtODY2X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTg2N19IYXNEYXRhPnRydWU8L0Jhc2UtMC04NjdfSGFzRGF0YT4NCjxCYXNlLTAtODY3X0RhdGEgaWQ9InJlZi04NzAiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NE56TThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtODY3X0RhdGE+DQo8QmFzZS0wLTg2N19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtODY3X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTg2OF9IYXNEYXRhPnRydWU8L0Jhc2UtMC04NjhfSGFzRGF0YT4NCjxCYXNlLTAtODY4X0RhdGEgaWQ9InJlZi04NzEiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NE56UThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtODY4X0RhdGE+DQo8QmFzZS0wLTg2OF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtODY4X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTg2OV9IYXNEYXRhPnRydWU8L0Jhc2UtMC04NjlfSGFzRGF0YT4NCjxCYXNlLTAtODY5X0RhdGEgaWQ9InJlZi04NzIiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NE56VThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtODY5X0RhdGE+DQo8QmFzZS0wLTg2OV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtODY5X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTg3MF9IYXNEYXRhPnRydWU8L0Jhc2UtMC04NzBfSGFzRGF0YT4NCjxCYXNlLTAtODcwX0RhdGEgaWQ9InJlZi04NzMiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NE56WThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtODcwX0RhdGE+DQo8QmFzZS0wLTg3MF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtODcwX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTg3MV9IYXNEYXRhPnRydWU8L0Jhc2UtMC04NzFfSGFzRGF0YT4NCjxCYXNlLTAtODcxX0RhdGEgaWQ9InJlZi04NzQiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NE56YzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtODcxX0RhdGE+DQo8QmFzZS0wLTg3MV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtODcxX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTg3Ml9IYXNEYXRhPnRydWU8L0Jhc2UtMC04NzJfSGFzRGF0YT4NCjxCYXNlLTAtODcyX0RhdGEgaWQ9InJlZi04NzUiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NE56ZzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtODcyX0RhdGE+DQo8QmFzZS0wLTg3Ml9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtODcyX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTg3M19IYXNEYXRhPnRydWU8L0Jhc2UtMC04NzNfSGFzRGF0YT4NCjxCYXNlLTAtODczX0RhdGEgaWQ9InJlZi04NzYiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NE56azhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtODczX0RhdGE+DQo8QmFzZS0wLTg3M19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtODczX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTg3NF9IYXNEYXRhPnRydWU8L0Jhc2UtMC04NzRfSGFzRGF0YT4NCjxCYXNlLTAtODc0X0RhdGEgaWQ9InJlZi04NzciPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NE9EQThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtODc0X0RhdGE+DQo8QmFzZS0wLTg3NF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtODc0X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTg3NV9IYXNEYXRhPnRydWU8L0Jhc2UtMC04NzVfSGFzRGF0YT4NCjxCYXNlLTAtODc1X0RhdGEgaWQ9InJlZi04NzgiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NE9ERThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtODc1X0RhdGE+DQo8QmFzZS0wLTg3NV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtODc1X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTg3Nl9IYXNEYXRhPnRydWU8L0Jhc2UtMC04NzZfSGFzRGF0YT4NCjxCYXNlLTAtODc2X0RhdGEgaWQ9InJlZi04NzkiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NE9ESThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtODc2X0RhdGE+DQo8QmFzZS0wLTg3Nl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtODc2X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTg3N19IYXNEYXRhPnRydWU8L0Jhc2UtMC04NzdfSGFzRGF0YT4NCjxCYXNlLTAtODc3X0RhdGEgaWQ9InJlZi04ODAiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NE9ETThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtODc3X0RhdGE+DQo8QmFzZS0wLTg3N19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtODc3X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTg3OF9IYXNEYXRhPnRydWU8L0Jhc2UtMC04NzhfSGFzRGF0YT4NCjxCYXNlLTAtODc4X0RhdGEgaWQ9InJlZi04ODEiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NE9EUThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtODc4X0RhdGE+DQo8QmFzZS0wLTg3OF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtODc4X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTg3OV9IYXNEYXRhPnRydWU8L0Jhc2UtMC04NzlfSGFzRGF0YT4NCjxCYXNlLTAtODc5X0RhdGEgaWQ9InJlZi04ODIiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NE9EVThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtODc5X0RhdGE+DQo8QmFzZS0wLTg3OV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtODc5X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTg4MF9IYXNEYXRhPnRydWU8L0Jhc2UtMC04ODBfSGFzRGF0YT4NCjxCYXNlLTAtODgwX0RhdGEgaWQ9InJlZi04ODMiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NE9EWThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtODgwX0RhdGE+DQo8QmFzZS0wLTg4MF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtODgwX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTg4MV9IYXNEYXRhPnRydWU8L0Jhc2UtMC04ODFfSGFzRGF0YT4NCjxCYXNlLTAtODgxX0RhdGEgaWQ9InJlZi04ODQiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NE9EYzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtODgxX0RhdGE+DQo8QmFzZS0wLTg4MV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtODgxX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTg4Ml9IYXNEYXRhPnRydWU8L0Jhc2UtMC04ODJfSGFzRGF0YT4NCjxCYXNlLTAtODgyX0RhdGEgaWQ9InJlZi04ODUiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NE9EZzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtODgyX0RhdGE+DQo8QmFzZS0wLTg4Ml9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtODgyX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTg4M19IYXNEYXRhPnRydWU8L0Jhc2UtMC04ODNfSGFzRGF0YT4NCjxCYXNlLTAtODgzX0RhdGEgaWQ9InJlZi04ODYiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NE9EazhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtODgzX0RhdGE+DQo8QmFzZS0wLTg4M19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtODgzX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTg4NF9IYXNEYXRhPnRydWU8L0Jhc2UtMC04ODRfSGFzRGF0YT4NCjxCYXNlLTAtODg0X0RhdGEgaWQ9InJlZi04ODciPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NE9UQThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtODg0X0RhdGE+DQo8QmFzZS0wLTg4NF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtODg0X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTg4NV9IYXNEYXRhPnRydWU8L0Jhc2UtMC04ODVfSGFzRGF0YT4NCjxCYXNlLTAtODg1X0RhdGEgaWQ9InJlZi04ODgiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NE9URThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtODg1X0RhdGE+DQo8QmFzZS0wLTg4NV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtODg1X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTg4Nl9IYXNEYXRhPnRydWU8L0Jhc2UtMC04ODZfSGFzRGF0YT4NCjxCYXNlLTAtODg2X0RhdGEgaWQ9InJlZi04ODkiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NE9USThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtODg2X0RhdGE+DQo8QmFzZS0wLTg4Nl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtODg2X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTg4N19IYXNEYXRhPnRydWU8L0Jhc2UtMC04ODdfSGFzRGF0YT4NCjxCYXNlLTAtODg3X0RhdGEgaWQ9InJlZi04OTAiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NE9UTThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtODg3X0RhdGE+DQo8QmFzZS0wLTg4N19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtODg3X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTg4OF9IYXNEYXRhPnRydWU8L0Jhc2UtMC04ODhfSGFzRGF0YT4NCjxCYXNlLTAtODg4X0RhdGEgaWQ9InJlZi04OTEiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NE9UUThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtODg4X0RhdGE+DQo8QmFzZS0wLTg4OF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtODg4X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTg4OV9IYXNEYXRhPnRydWU8L0Jhc2UtMC04ODlfSGFzRGF0YT4NCjxCYXNlLTAtODg5X0RhdGEgaWQ9InJlZi04OTIiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NE9UVThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtODg5X0RhdGE+DQo8QmFzZS0wLTg4OV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtODg5X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTg5MF9IYXNEYXRhPnRydWU8L0Jhc2UtMC04OTBfSGFzRGF0YT4NCjxCYXNlLTAtODkwX0RhdGEgaWQ9InJlZi04OTMiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NE9UWThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtODkwX0RhdGE+DQo8QmFzZS0wLTg5MF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtODkwX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTg5MV9IYXNEYXRhPnRydWU8L0Jhc2UtMC04OTFfSGFzRGF0YT4NCjxCYXNlLTAtODkxX0RhdGEgaWQ9InJlZi04OTQiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NE9UYzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtODkxX0RhdGE+DQo8QmFzZS0wLTg5MV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtODkxX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTg5Ml9IYXNEYXRhPnRydWU8L0Jhc2UtMC04OTJfSGFzRGF0YT4NCjxCYXNlLTAtODkyX0RhdGEgaWQ9InJlZi04OTUiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NE9UZzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtODkyX0RhdGE+DQo8QmFzZS0wLTg5Ml9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtODkyX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTg5M19IYXNEYXRhPnRydWU8L0Jhc2UtMC04OTNfSGFzRGF0YT4NCjxCYXNlLTAtODkzX0RhdGEgaWQ9InJlZi04OTYiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NE9UazhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtODkzX0RhdGE+DQo8QmFzZS0wLTg5M19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtODkzX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTg5NF9IYXNEYXRhPnRydWU8L0Jhc2UtMC04OTRfSGFzRGF0YT4NCjxCYXNlLTAtODk0X0RhdGEgaWQ9InJlZi04OTciPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NU1EQThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtODk0X0RhdGE+DQo8QmFzZS0wLTg5NF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtODk0X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTg5NV9IYXNEYXRhPnRydWU8L0Jhc2UtMC04OTVfSGFzRGF0YT4NCjxCYXNlLTAtODk1X0RhdGEgaWQ9InJlZi04OTgiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NU1ERThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtODk1X0RhdGE+DQo8QmFzZS0wLTg5NV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtODk1X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTg5Nl9IYXNEYXRhPnRydWU8L0Jhc2UtMC04OTZfSGFzRGF0YT4NCjxCYXNlLTAtODk2X0RhdGEgaWQ9InJlZi04OTkiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NU1ESThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtODk2X0RhdGE+DQo8QmFzZS0wLTg5Nl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtODk2X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTg5N19IYXNEYXRhPnRydWU8L0Jhc2UtMC04OTdfSGFzRGF0YT4NCjxCYXNlLTAtODk3X0RhdGEgaWQ9InJlZi05MDAiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NU1ETThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtODk3X0RhdGE+DQo8QmFzZS0wLTg5N19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtODk3X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTg5OF9IYXNEYXRhPnRydWU8L0Jhc2UtMC04OThfSGFzRGF0YT4NCjxCYXNlLTAtODk4X0RhdGEgaWQ9InJlZi05MDEiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NU1EUThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtODk4X0RhdGE+DQo8QmFzZS0wLTg5OF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtODk4X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTg5OV9IYXNEYXRhPnRydWU8L0Jhc2UtMC04OTlfSGFzRGF0YT4NCjxCYXNlLTAtODk5X0RhdGEgaWQ9InJlZi05MDIiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NU1EVThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtODk5X0RhdGE+DQo8QmFzZS0wLTg5OV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtODk5X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTkwMF9IYXNEYXRhPnRydWU8L0Jhc2UtMC05MDBfSGFzRGF0YT4NCjxCYXNlLTAtOTAwX0RhdGEgaWQ9InJlZi05MDMiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NU1EWThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtOTAwX0RhdGE+DQo8QmFzZS0wLTkwMF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtOTAwX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTkwMV9IYXNEYXRhPnRydWU8L0Jhc2UtMC05MDFfSGFzRGF0YT4NCjxCYXNlLTAtOTAxX0RhdGEgaWQ9InJlZi05MDQiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NU1EYzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtOTAxX0RhdGE+DQo8QmFzZS0wLTkwMV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtOTAxX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTkwMl9IYXNEYXRhPnRydWU8L0Jhc2UtMC05MDJfSGFzRGF0YT4NCjxCYXNlLTAtOTAyX0RhdGEgaWQ9InJlZi05MDUiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NU1EZzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtOTAyX0RhdGE+DQo8QmFzZS0wLTkwMl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtOTAyX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTkwM19IYXNEYXRhPnRydWU8L0Jhc2UtMC05MDNfSGFzRGF0YT4NCjxCYXNlLTAtOTAzX0RhdGEgaWQ9InJlZi05MDYiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NU1EazhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtOTAzX0RhdGE+DQo8QmFzZS0wLTkwM19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtOTAzX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTkwNF9IYXNEYXRhPnRydWU8L0Jhc2UtMC05MDRfSGFzRGF0YT4NCjxCYXNlLTAtOTA0X0RhdGEgaWQ9InJlZi05MDciPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NU1UQThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtOTA0X0RhdGE+DQo8QmFzZS0wLTkwNF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtOTA0X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTkwNV9IYXNEYXRhPnRydWU8L0Jhc2UtMC05MDVfSGFzRGF0YT4NCjxCYXNlLTAtOTA1X0RhdGEgaWQ9InJlZi05MDgiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NU1URThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtOTA1X0RhdGE+DQo8QmFzZS0wLTkwNV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtOTA1X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTkwNl9IYXNEYXRhPnRydWU8L0Jhc2UtMC05MDZfSGFzRGF0YT4NCjxCYXNlLTAtOTA2X0RhdGEgaWQ9InJlZi05MDkiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NU1USThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtOTA2X0RhdGE+DQo8QmFzZS0wLTkwNl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtOTA2X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTkwN19IYXNEYXRhPnRydWU8L0Jhc2UtMC05MDdfSGFzRGF0YT4NCjxCYXNlLTAtOTA3X0RhdGEgaWQ9InJlZi05MTAiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NU1UTThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtOTA3X0RhdGE+DQo8QmFzZS0wLTkwN19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtOTA3X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTkwOF9IYXNEYXRhPnRydWU8L0Jhc2UtMC05MDhfSGFzRGF0YT4NCjxCYXNlLTAtOTA4X0RhdGEgaWQ9InJlZi05MTEiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NU1UUThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtOTA4X0RhdGE+DQo8QmFzZS0wLTkwOF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtOTA4X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTkwOV9IYXNEYXRhPnRydWU8L0Jhc2UtMC05MDlfSGFzRGF0YT4NCjxCYXNlLTAtOTA5X0RhdGEgaWQ9InJlZi05MTIiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NU1UVThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtOTA5X0RhdGE+DQo8QmFzZS0wLTkwOV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtOTA5X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTkxMF9IYXNEYXRhPnRydWU8L0Jhc2UtMC05MTBfSGFzRGF0YT4NCjxCYXNlLTAtOTEwX0RhdGEgaWQ9InJlZi05MTMiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NU1UWThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtOTEwX0RhdGE+DQo8QmFzZS0wLTkxMF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtOTEwX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTkxMV9IYXNEYXRhPnRydWU8L0Jhc2UtMC05MTFfSGFzRGF0YT4NCjxCYXNlLTAtOTExX0RhdGEgaWQ9InJlZi05MTQiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NU1UYzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtOTExX0RhdGE+DQo8QmFzZS0wLTkxMV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtOTExX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTkxMl9IYXNEYXRhPnRydWU8L0Jhc2UtMC05MTJfSGFzRGF0YT4NCjxCYXNlLTAtOTEyX0RhdGEgaWQ9InJlZi05MTUiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NU1UZzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtOTEyX0RhdGE+DQo8QmFzZS0wLTkxMl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtOTEyX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTkxM19IYXNEYXRhPnRydWU8L0Jhc2UtMC05MTNfSGFzRGF0YT4NCjxCYXNlLTAtOTEzX0RhdGEgaWQ9InJlZi05MTYiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NU1UazhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtOTEzX0RhdGE+DQo8QmFzZS0wLTkxM19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtOTEzX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTkxNF9IYXNEYXRhPnRydWU8L0Jhc2UtMC05MTRfSGFzRGF0YT4NCjxCYXNlLTAtOTE0X0RhdGEgaWQ9InJlZi05MTciPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NU1qQThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtOTE0X0RhdGE+DQo8QmFzZS0wLTkxNF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtOTE0X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTkxNV9IYXNEYXRhPnRydWU8L0Jhc2UtMC05MTVfSGFzRGF0YT4NCjxCYXNlLTAtOTE1X0RhdGEgaWQ9InJlZi05MTgiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NU1qRThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtOTE1X0RhdGE+DQo8QmFzZS0wLTkxNV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtOTE1X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTkxNl9IYXNEYXRhPnRydWU8L0Jhc2UtMC05MTZfSGFzRGF0YT4NCjxCYXNlLTAtOTE2X0RhdGEgaWQ9InJlZi05MTkiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NU1qSThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtOTE2X0RhdGE+DQo8QmFzZS0wLTkxNl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtOTE2X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTkxN19IYXNEYXRhPnRydWU8L0Jhc2UtMC05MTdfSGFzRGF0YT4NCjxCYXNlLTAtOTE3X0RhdGEgaWQ9InJlZi05MjAiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NU1qTThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtOTE3X0RhdGE+DQo8QmFzZS0wLTkxN19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtOTE3X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTkxOF9IYXNEYXRhPnRydWU8L0Jhc2UtMC05MThfSGFzRGF0YT4NCjxCYXNlLTAtOTE4X0RhdGEgaWQ9InJlZi05MjEiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NU1qUThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtOTE4X0RhdGE+DQo8QmFzZS0wLTkxOF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtOTE4X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTkxOV9IYXNEYXRhPnRydWU8L0Jhc2UtMC05MTlfSGFzRGF0YT4NCjxCYXNlLTAtOTE5X0RhdGEgaWQ9InJlZi05MjIiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NU1qVThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtOTE5X0RhdGE+DQo8QmFzZS0wLTkxOV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtOTE5X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTkyMF9IYXNEYXRhPnRydWU8L0Jhc2UtMC05MjBfSGFzRGF0YT4NCjxCYXNlLTAtOTIwX0RhdGEgaWQ9InJlZi05MjMiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NU1qWThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtOTIwX0RhdGE+DQo8QmFzZS0wLTkyMF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtOTIwX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTkyMV9IYXNEYXRhPnRydWU8L0Jhc2UtMC05MjFfSGFzRGF0YT4NCjxCYXNlLTAtOTIxX0RhdGEgaWQ9InJlZi05MjQiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NU1qYzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtOTIxX0RhdGE+DQo8QmFzZS0wLTkyMV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtOTIxX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTkyMl9IYXNEYXRhPnRydWU8L0Jhc2UtMC05MjJfSGFzRGF0YT4NCjxCYXNlLTAtOTIyX0RhdGEgaWQ9InJlZi05MjUiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NU1qZzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtOTIyX0RhdGE+DQo8QmFzZS0wLTkyMl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtOTIyX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTkyM19IYXNEYXRhPnRydWU8L0Jhc2UtMC05MjNfSGFzRGF0YT4NCjxCYXNlLTAtOTIzX0RhdGEgaWQ9InJlZi05MjYiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NU1qazhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtOTIzX0RhdGE+DQo8QmFzZS0wLTkyM19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtOTIzX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTkyNF9IYXNEYXRhPnRydWU8L0Jhc2UtMC05MjRfSGFzRGF0YT4NCjxCYXNlLTAtOTI0X0RhdGEgaWQ9InJlZi05MjciPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NU16QThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtOTI0X0RhdGE+DQo8QmFzZS0wLTkyNF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtOTI0X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTkyNV9IYXNEYXRhPnRydWU8L0Jhc2UtMC05MjVfSGFzRGF0YT4NCjxCYXNlLTAtOTI1X0RhdGEgaWQ9InJlZi05MjgiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NU16RThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtOTI1X0RhdGE+DQo8QmFzZS0wLTkyNV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtOTI1X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTkyNl9IYXNEYXRhPnRydWU8L0Jhc2UtMC05MjZfSGFzRGF0YT4NCjxCYXNlLTAtOTI2X0RhdGEgaWQ9InJlZi05MjkiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NU16SThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtOTI2X0RhdGE+DQo8QmFzZS0wLTkyNl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtOTI2X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTkyN19IYXNEYXRhPnRydWU8L0Jhc2UtMC05MjdfSGFzRGF0YT4NCjxCYXNlLTAtOTI3X0RhdGEgaWQ9InJlZi05MzAiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NU16TThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtOTI3X0RhdGE+DQo8QmFzZS0wLTkyN19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtOTI3X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTkyOF9IYXNEYXRhPnRydWU8L0Jhc2UtMC05MjhfSGFzRGF0YT4NCjxCYXNlLTAtOTI4X0RhdGEgaWQ9InJlZi05MzEiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NU16UThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtOTI4X0RhdGE+DQo8QmFzZS0wLTkyOF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtOTI4X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTkyOV9IYXNEYXRhPnRydWU8L0Jhc2UtMC05MjlfSGFzRGF0YT4NCjxCYXNlLTAtOTI5X0RhdGEgaWQ9InJlZi05MzIiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NU16VThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtOTI5X0RhdGE+DQo8QmFzZS0wLTkyOV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtOTI5X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTkzMF9IYXNEYXRhPnRydWU8L0Jhc2UtMC05MzBfSGFzRGF0YT4NCjxCYXNlLTAtOTMwX0RhdGEgaWQ9InJlZi05MzMiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NU16WThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtOTMwX0RhdGE+DQo8QmFzZS0wLTkzMF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtOTMwX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTkzMV9IYXNEYXRhPnRydWU8L0Jhc2UtMC05MzFfSGFzRGF0YT4NCjxCYXNlLTAtOTMxX0RhdGEgaWQ9InJlZi05MzQiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NU16YzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtOTMxX0RhdGE+DQo8QmFzZS0wLTkzMV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtOTMxX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTkzMl9IYXNEYXRhPnRydWU8L0Jhc2UtMC05MzJfSGFzRGF0YT4NCjxCYXNlLTAtOTMyX0RhdGEgaWQ9InJlZi05MzUiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NU16ZzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtOTMyX0RhdGE+DQo8QmFzZS0wLTkzMl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtOTMyX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTkzM19IYXNEYXRhPnRydWU8L0Jhc2UtMC05MzNfSGFzRGF0YT4NCjxCYXNlLTAtOTMzX0RhdGEgaWQ9InJlZi05MzYiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NU16azhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtOTMzX0RhdGE+DQo8QmFzZS0wLTkzM19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtOTMzX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTkzNF9IYXNEYXRhPnRydWU8L0Jhc2UtMC05MzRfSGFzRGF0YT4NCjxCYXNlLTAtOTM0X0RhdGEgaWQ9InJlZi05MzciPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NU5EQThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtOTM0X0RhdGE+DQo8QmFzZS0wLTkzNF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtOTM0X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTkzNV9IYXNEYXRhPnRydWU8L0Jhc2UtMC05MzVfSGFzRGF0YT4NCjxCYXNlLTAtOTM1X0RhdGEgaWQ9InJlZi05MzgiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NU5ERThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtOTM1X0RhdGE+DQo8QmFzZS0wLTkzNV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtOTM1X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTkzNl9IYXNEYXRhPnRydWU8L0Jhc2UtMC05MzZfSGFzRGF0YT4NCjxCYXNlLTAtOTM2X0RhdGEgaWQ9InJlZi05MzkiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NU5ESThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtOTM2X0RhdGE+DQo8QmFzZS0wLTkzNl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtOTM2X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTkzN19IYXNEYXRhPnRydWU8L0Jhc2UtMC05MzdfSGFzRGF0YT4NCjxCYXNlLTAtOTM3X0RhdGEgaWQ9InJlZi05NDAiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NU5ETThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtOTM3X0RhdGE+DQo8QmFzZS0wLTkzN19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtOTM3X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTkzOF9IYXNEYXRhPnRydWU8L0Jhc2UtMC05MzhfSGFzRGF0YT4NCjxCYXNlLTAtOTM4X0RhdGEgaWQ9InJlZi05NDEiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NU5EUThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtOTM4X0RhdGE+DQo8QmFzZS0wLTkzOF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtOTM4X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTkzOV9IYXNEYXRhPnRydWU8L0Jhc2UtMC05MzlfSGFzRGF0YT4NCjxCYXNlLTAtOTM5X0RhdGEgaWQ9InJlZi05NDIiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NU5EVThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtOTM5X0RhdGE+DQo8QmFzZS0wLTkzOV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtOTM5X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTk0MF9IYXNEYXRhPnRydWU8L0Jhc2UtMC05NDBfSGFzRGF0YT4NCjxCYXNlLTAtOTQwX0RhdGEgaWQ9InJlZi05NDMiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NU5EWThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtOTQwX0RhdGE+DQo8QmFzZS0wLTk0MF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtOTQwX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTk0MV9IYXNEYXRhPnRydWU8L0Jhc2UtMC05NDFfSGFzRGF0YT4NCjxCYXNlLTAtOTQxX0RhdGEgaWQ9InJlZi05NDQiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NU5EYzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtOTQxX0RhdGE+DQo8QmFzZS0wLTk0MV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtOTQxX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTk0Ml9IYXNEYXRhPnRydWU8L0Jhc2UtMC05NDJfSGFzRGF0YT4NCjxCYXNlLTAtOTQyX0RhdGEgaWQ9InJlZi05NDUiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NU5EZzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtOTQyX0RhdGE+DQo8QmFzZS0wLTk0Ml9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtOTQyX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTk0M19IYXNEYXRhPnRydWU8L0Jhc2UtMC05NDNfSGFzRGF0YT4NCjxCYXNlLTAtOTQzX0RhdGEgaWQ9InJlZi05NDYiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NU5EazhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtOTQzX0RhdGE+DQo8QmFzZS0wLTk0M19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtOTQzX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTk0NF9IYXNEYXRhPnRydWU8L0Jhc2UtMC05NDRfSGFzRGF0YT4NCjxCYXNlLTAtOTQ0X0RhdGEgaWQ9InJlZi05NDciPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NU5UQThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtOTQ0X0RhdGE+DQo8QmFzZS0wLTk0NF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtOTQ0X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTk0NV9IYXNEYXRhPnRydWU8L0Jhc2UtMC05NDVfSGFzRGF0YT4NCjxCYXNlLTAtOTQ1X0RhdGEgaWQ9InJlZi05NDgiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NU5URThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtOTQ1X0RhdGE+DQo8QmFzZS0wLTk0NV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtOTQ1X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTk0Nl9IYXNEYXRhPnRydWU8L0Jhc2UtMC05NDZfSGFzRGF0YT4NCjxCYXNlLTAtOTQ2X0RhdGEgaWQ9InJlZi05NDkiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NU5USThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtOTQ2X0RhdGE+DQo8QmFzZS0wLTk0Nl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtOTQ2X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTk0N19IYXNEYXRhPnRydWU8L0Jhc2UtMC05NDdfSGFzRGF0YT4NCjxCYXNlLTAtOTQ3X0RhdGEgaWQ9InJlZi05NTAiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NU5UTThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtOTQ3X0RhdGE+DQo8QmFzZS0wLTk0N19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtOTQ3X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTk0OF9IYXNEYXRhPnRydWU8L0Jhc2UtMC05NDhfSGFzRGF0YT4NCjxCYXNlLTAtOTQ4X0RhdGEgaWQ9InJlZi05NTEiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NU5UUThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtOTQ4X0RhdGE+DQo8QmFzZS0wLTk0OF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtOTQ4X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTk0OV9IYXNEYXRhPnRydWU8L0Jhc2UtMC05NDlfSGFzRGF0YT4NCjxCYXNlLTAtOTQ5X0RhdGEgaWQ9InJlZi05NTIiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NU5UVThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtOTQ5X0RhdGE+DQo8QmFzZS0wLTk0OV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtOTQ5X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTk1MF9IYXNEYXRhPnRydWU8L0Jhc2UtMC05NTBfSGFzRGF0YT4NCjxCYXNlLTAtOTUwX0RhdGEgaWQ9InJlZi05NTMiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NU5UWThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtOTUwX0RhdGE+DQo8QmFzZS0wLTk1MF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtOTUwX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTk1MV9IYXNEYXRhPnRydWU8L0Jhc2UtMC05NTFfSGFzRGF0YT4NCjxCYXNlLTAtOTUxX0RhdGEgaWQ9InJlZi05NTQiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NU5UYzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtOTUxX0RhdGE+DQo8QmFzZS0wLTk1MV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtOTUxX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTk1Ml9IYXNEYXRhPnRydWU8L0Jhc2UtMC05NTJfSGFzRGF0YT4NCjxCYXNlLTAtOTUyX0RhdGEgaWQ9InJlZi05NTUiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NU5UZzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtOTUyX0RhdGE+DQo8QmFzZS0wLTk1Ml9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtOTUyX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTk1M19IYXNEYXRhPnRydWU8L0Jhc2UtMC05NTNfSGFzRGF0YT4NCjxCYXNlLTAtOTUzX0RhdGEgaWQ9InJlZi05NTYiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NU5UazhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtOTUzX0RhdGE+DQo8QmFzZS0wLTk1M19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtOTUzX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTk1NF9IYXNEYXRhPnRydWU8L0Jhc2UtMC05NTRfSGFzRGF0YT4NCjxCYXNlLTAtOTU0X0RhdGEgaWQ9InJlZi05NTciPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NU5qQThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtOTU0X0RhdGE+DQo8QmFzZS0wLTk1NF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtOTU0X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTk1NV9IYXNEYXRhPnRydWU8L0Jhc2UtMC05NTVfSGFzRGF0YT4NCjxCYXNlLTAtOTU1X0RhdGEgaWQ9InJlZi05NTgiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NU5qRThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtOTU1X0RhdGE+DQo8QmFzZS0wLTk1NV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtOTU1X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTk1Nl9IYXNEYXRhPnRydWU8L0Jhc2UtMC05NTZfSGFzRGF0YT4NCjxCYXNlLTAtOTU2X0RhdGEgaWQ9InJlZi05NTkiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NU5qSThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtOTU2X0RhdGE+DQo8QmFzZS0wLTk1Nl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtOTU2X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTk1N19IYXNEYXRhPnRydWU8L0Jhc2UtMC05NTdfSGFzRGF0YT4NCjxCYXNlLTAtOTU3X0RhdGEgaWQ9InJlZi05NjAiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NU5qTThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtOTU3X0RhdGE+DQo8QmFzZS0wLTk1N19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtOTU3X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTk1OF9IYXNEYXRhPnRydWU8L0Jhc2UtMC05NThfSGFzRGF0YT4NCjxCYXNlLTAtOTU4X0RhdGEgaWQ9InJlZi05NjEiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NU5qUThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtOTU4X0RhdGE+DQo8QmFzZS0wLTk1OF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtOTU4X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTk1OV9IYXNEYXRhPnRydWU8L0Jhc2UtMC05NTlfSGFzRGF0YT4NCjxCYXNlLTAtOTU5X0RhdGEgaWQ9InJlZi05NjIiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NU5qVThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtOTU5X0RhdGE+DQo8QmFzZS0wLTk1OV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtOTU5X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTk2MF9IYXNEYXRhPnRydWU8L0Jhc2UtMC05NjBfSGFzRGF0YT4NCjxCYXNlLTAtOTYwX0RhdGEgaWQ9InJlZi05NjMiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NU5qWThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtOTYwX0RhdGE+DQo8QmFzZS0wLTk2MF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtOTYwX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTk2MV9IYXNEYXRhPnRydWU8L0Jhc2UtMC05NjFfSGFzRGF0YT4NCjxCYXNlLTAtOTYxX0RhdGEgaWQ9InJlZi05NjQiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NU5qYzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtOTYxX0RhdGE+DQo8QmFzZS0wLTk2MV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtOTYxX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTk2Ml9IYXNEYXRhPnRydWU8L0Jhc2UtMC05NjJfSGFzRGF0YT4NCjxCYXNlLTAtOTYyX0RhdGEgaWQ9InJlZi05NjUiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NU5qZzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtOTYyX0RhdGE+DQo8QmFzZS0wLTk2Ml9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtOTYyX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTk2M19IYXNEYXRhPnRydWU8L0Jhc2UtMC05NjNfSGFzRGF0YT4NCjxCYXNlLTAtOTYzX0RhdGEgaWQ9InJlZi05NjYiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NU5qazhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtOTYzX0RhdGE+DQo8QmFzZS0wLTk2M19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtOTYzX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTk2NF9IYXNEYXRhPnRydWU8L0Jhc2UtMC05NjRfSGFzRGF0YT4NCjxCYXNlLTAtOTY0X0RhdGEgaWQ9InJlZi05NjciPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NU56QThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtOTY0X0RhdGE+DQo8QmFzZS0wLTk2NF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtOTY0X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTk2NV9IYXNEYXRhPnRydWU8L0Jhc2UtMC05NjVfSGFzRGF0YT4NCjxCYXNlLTAtOTY1X0RhdGEgaWQ9InJlZi05NjgiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NU56RThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtOTY1X0RhdGE+DQo8QmFzZS0wLTk2NV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtOTY1X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTk2Nl9IYXNEYXRhPnRydWU8L0Jhc2UtMC05NjZfSGFzRGF0YT4NCjxCYXNlLTAtOTY2X0RhdGEgaWQ9InJlZi05NjkiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NU56SThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtOTY2X0RhdGE+DQo8QmFzZS0wLTk2Nl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtOTY2X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTk2N19IYXNEYXRhPnRydWU8L0Jhc2UtMC05NjdfSGFzRGF0YT4NCjxCYXNlLTAtOTY3X0RhdGEgaWQ9InJlZi05NzAiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NU56TThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtOTY3X0RhdGE+DQo8QmFzZS0wLTk2N19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtOTY3X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTk2OF9IYXNEYXRhPnRydWU8L0Jhc2UtMC05NjhfSGFzRGF0YT4NCjxCYXNlLTAtOTY4X0RhdGEgaWQ9InJlZi05NzEiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NU56UThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtOTY4X0RhdGE+DQo8QmFzZS0wLTk2OF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtOTY4X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTk2OV9IYXNEYXRhPnRydWU8L0Jhc2UtMC05NjlfSGFzRGF0YT4NCjxCYXNlLTAtOTY5X0RhdGEgaWQ9InJlZi05NzIiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NU56VThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtOTY5X0RhdGE+DQo8QmFzZS0wLTk2OV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtOTY5X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTk3MF9IYXNEYXRhPnRydWU8L0Jhc2UtMC05NzBfSGFzRGF0YT4NCjxCYXNlLTAtOTcwX0RhdGEgaWQ9InJlZi05NzMiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NU56WThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtOTcwX0RhdGE+DQo8QmFzZS0wLTk3MF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtOTcwX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTk3MV9IYXNEYXRhPnRydWU8L0Jhc2UtMC05NzFfSGFzRGF0YT4NCjxCYXNlLTAtOTcxX0RhdGEgaWQ9InJlZi05NzQiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NU56YzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtOTcxX0RhdGE+DQo8QmFzZS0wLTk3MV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtOTcxX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTk3Ml9IYXNEYXRhPnRydWU8L0Jhc2UtMC05NzJfSGFzRGF0YT4NCjxCYXNlLTAtOTcyX0RhdGEgaWQ9InJlZi05NzUiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NU56ZzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtOTcyX0RhdGE+DQo8QmFzZS0wLTk3Ml9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtOTcyX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTk3M19IYXNEYXRhPnRydWU8L0Jhc2UtMC05NzNfSGFzRGF0YT4NCjxCYXNlLTAtOTczX0RhdGEgaWQ9InJlZi05NzYiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NU56azhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtOTczX0RhdGE+DQo8QmFzZS0wLTk3M19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtOTczX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTk3NF9IYXNEYXRhPnRydWU8L0Jhc2UtMC05NzRfSGFzRGF0YT4NCjxCYXNlLTAtOTc0X0RhdGEgaWQ9InJlZi05NzciPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NU9EQThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtOTc0X0RhdGE+DQo8QmFzZS0wLTk3NF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtOTc0X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTk3NV9IYXNEYXRhPnRydWU8L0Jhc2UtMC05NzVfSGFzRGF0YT4NCjxCYXNlLTAtOTc1X0RhdGEgaWQ9InJlZi05NzgiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NU9ERThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtOTc1X0RhdGE+DQo8QmFzZS0wLTk3NV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtOTc1X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTk3Nl9IYXNEYXRhPnRydWU8L0Jhc2UtMC05NzZfSGFzRGF0YT4NCjxCYXNlLTAtOTc2X0RhdGEgaWQ9InJlZi05NzkiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NU9ESThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtOTc2X0RhdGE+DQo8QmFzZS0wLTk3Nl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtOTc2X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTk3N19IYXNEYXRhPnRydWU8L0Jhc2UtMC05NzdfSGFzRGF0YT4NCjxCYXNlLTAtOTc3X0RhdGEgaWQ9InJlZi05ODAiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NU9ETThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtOTc3X0RhdGE+DQo8QmFzZS0wLTk3N19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtOTc3X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTk3OF9IYXNEYXRhPnRydWU8L0Jhc2UtMC05NzhfSGFzRGF0YT4NCjxCYXNlLTAtOTc4X0RhdGEgaWQ9InJlZi05ODEiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NU9EUThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtOTc4X0RhdGE+DQo8QmFzZS0wLTk3OF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtOTc4X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTk3OV9IYXNEYXRhPnRydWU8L0Jhc2UtMC05NzlfSGFzRGF0YT4NCjxCYXNlLTAtOTc5X0RhdGEgaWQ9InJlZi05ODIiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NU9EVThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtOTc5X0RhdGE+DQo8QmFzZS0wLTk3OV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtOTc5X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTk4MF9IYXNEYXRhPnRydWU8L0Jhc2UtMC05ODBfSGFzRGF0YT4NCjxCYXNlLTAtOTgwX0RhdGEgaWQ9InJlZi05ODMiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NU9EWThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtOTgwX0RhdGE+DQo8QmFzZS0wLTk4MF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtOTgwX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTk4MV9IYXNEYXRhPnRydWU8L0Jhc2UtMC05ODFfSGFzRGF0YT4NCjxCYXNlLTAtOTgxX0RhdGEgaWQ9InJlZi05ODQiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NU9EYzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtOTgxX0RhdGE+DQo8QmFzZS0wLTk4MV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtOTgxX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTk4Ml9IYXNEYXRhPnRydWU8L0Jhc2UtMC05ODJfSGFzRGF0YT4NCjxCYXNlLTAtOTgyX0RhdGEgaWQ9InJlZi05ODUiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NU9EZzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtOTgyX0RhdGE+DQo8QmFzZS0wLTk4Ml9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtOTgyX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTk4M19IYXNEYXRhPnRydWU8L0Jhc2UtMC05ODNfSGFzRGF0YT4NCjxCYXNlLTAtOTgzX0RhdGEgaWQ9InJlZi05ODYiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NU9EazhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtOTgzX0RhdGE+DQo8QmFzZS0wLTk4M19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtOTgzX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTk4NF9IYXNEYXRhPnRydWU8L0Jhc2UtMC05ODRfSGFzRGF0YT4NCjxCYXNlLTAtOTg0X0RhdGEgaWQ9InJlZi05ODciPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NU9UQThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtOTg0X0RhdGE+DQo8QmFzZS0wLTk4NF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtOTg0X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTk4NV9IYXNEYXRhPnRydWU8L0Jhc2UtMC05ODVfSGFzRGF0YT4NCjxCYXNlLTAtOTg1X0RhdGEgaWQ9InJlZi05ODgiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NU9URThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtOTg1X0RhdGE+DQo8QmFzZS0wLTk4NV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtOTg1X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTk4Nl9IYXNEYXRhPnRydWU8L0Jhc2UtMC05ODZfSGFzRGF0YT4NCjxCYXNlLTAtOTg2X0RhdGEgaWQ9InJlZi05ODkiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NU9USThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtOTg2X0RhdGE+DQo8QmFzZS0wLTk4Nl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtOTg2X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTk4N19IYXNEYXRhPnRydWU8L0Jhc2UtMC05ODdfSGFzRGF0YT4NCjxCYXNlLTAtOTg3X0RhdGEgaWQ9InJlZi05OTAiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NU9UTThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtOTg3X0RhdGE+DQo8QmFzZS0wLTk4N19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtOTg3X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTk4OF9IYXNEYXRhPnRydWU8L0Jhc2UtMC05ODhfSGFzRGF0YT4NCjxCYXNlLTAtOTg4X0RhdGEgaWQ9InJlZi05OTEiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NU9UUThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtOTg4X0RhdGE+DQo8QmFzZS0wLTk4OF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtOTg4X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTk4OV9IYXNEYXRhPnRydWU8L0Jhc2UtMC05ODlfSGFzRGF0YT4NCjxCYXNlLTAtOTg5X0RhdGEgaWQ9InJlZi05OTIiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NU9UVThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtOTg5X0RhdGE+DQo8QmFzZS0wLTk4OV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtOTg5X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTk5MF9IYXNEYXRhPnRydWU8L0Jhc2UtMC05OTBfSGFzRGF0YT4NCjxCYXNlLTAtOTkwX0RhdGEgaWQ9InJlZi05OTMiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NU9UWThMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtOTkwX0RhdGE+DQo8QmFzZS0wLTk5MF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtOTkwX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTk5MV9IYXNEYXRhPnRydWU8L0Jhc2UtMC05OTFfSGFzRGF0YT4NCjxCYXNlLTAtOTkxX0RhdGEgaWQ9InJlZi05OTQiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NU9UYzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtOTkxX0RhdGE+DQo8QmFzZS0wLTk5MV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtOTkxX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTk5Ml9IYXNEYXRhPnRydWU8L0Jhc2UtMC05OTJfSGFzRGF0YT4NCjxCYXNlLTAtOTkyX0RhdGEgaWQ9InJlZi05OTUiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NU9UZzhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtOTkyX0RhdGE+DQo8QmFzZS0wLTk5Ml9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtOTkyX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTk5M19IYXNEYXRhPnRydWU8L0Jhc2UtMC05OTNfSGFzRGF0YT4NCjxCYXNlLTAtOTkzX0RhdGEgaWQ9InJlZi05OTYiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0NU9UazhMMmx1ZEVsRVBnMEtQQzloTVRwSlJFaHZiR1JsY2o0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtOTkzX0RhdGE+DQo8QmFzZS0wLTk5M19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtOTkzX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTk5NF9IYXNEYXRhPnRydWU8L0Jhc2UtMC05OTRfSGFzRGF0YT4NCjxCYXNlLTAtOTk0X0RhdGEgaWQ9InJlZi05OTciPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE1EQXdQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtOTk0X0RhdGE+DQo8QmFzZS0wLTk5NF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtOTk0X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTk5NV9IYXNEYXRhPnRydWU8L0Jhc2UtMC05OTVfSGFzRGF0YT4NCjxCYXNlLTAtOTk1X0RhdGEgaWQ9InJlZi05OTgiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE1EQXhQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtOTk1X0RhdGE+DQo8QmFzZS0wLTk5NV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtOTk1X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTk5Nl9IYXNEYXRhPnRydWU8L0Jhc2UtMC05OTZfSGFzRGF0YT4NCjxCYXNlLTAtOTk2X0RhdGEgaWQ9InJlZi05OTkiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE1EQXlQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtOTk2X0RhdGE+DQo8QmFzZS0wLTk5Nl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtOTk2X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTk5N19IYXNEYXRhPnRydWU8L0Jhc2UtMC05OTdfSGFzRGF0YT4NCjxCYXNlLTAtOTk3X0RhdGEgaWQ9InJlZi0xMDAwIj5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNREF6UEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTk5N19EYXRhPg0KPEJhc2UtMC05OTdfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTk5N19IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC05OThfSGFzRGF0YT50cnVlPC9CYXNlLTAtOTk4X0hhc0RhdGE+DQo8QmFzZS0wLTk5OF9EYXRhIGlkPSJyZWYtMTAwMSI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TURBMFBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC05OThfRGF0YT4NCjxCYXNlLTAtOTk4X0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC05OThfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtOTk5X0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTk5OV9IYXNEYXRhPg0KPEJhc2UtMC05OTlfRGF0YSBpZD0icmVmLTEwMDIiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE1EQTFQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtOTk5X0RhdGE+DQo8QmFzZS0wLTk5OV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtOTk5X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEwMDBfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTAwMF9IYXNEYXRhPg0KPEJhc2UtMC0xMDAwX0RhdGEgaWQ9InJlZi0xMDAzIj5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNREEyUEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTEwMDBfRGF0YT4NCjxCYXNlLTAtMTAwMF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTAwMF9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMDAxX0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTEwMDFfSGFzRGF0YT4NCjxCYXNlLTAtMTAwMV9EYXRhIGlkPSJyZWYtMTAwNCI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TURBM1BDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMDAxX0RhdGE+DQo8QmFzZS0wLTEwMDFfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTEwMDFfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTAwMl9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMDAyX0hhc0RhdGE+DQo8QmFzZS0wLTEwMDJfRGF0YSBpZD0icmVmLTEwMDUiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE1EQTRQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTAwMl9EYXRhPg0KPEJhc2UtMC0xMDAyX0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMDAyX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEwMDNfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTAwM19IYXNEYXRhPg0KPEJhc2UtMC0xMDAzX0RhdGEgaWQ9InJlZi0xMDA2Ij5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNREE1UEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTEwMDNfRGF0YT4NCjxCYXNlLTAtMTAwM19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTAwM19IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMDA0X0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTEwMDRfSGFzRGF0YT4NCjxCYXNlLTAtMTAwNF9EYXRhIGlkPSJyZWYtMTAwNyI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TURFd1BDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMDA0X0RhdGE+DQo8QmFzZS0wLTEwMDRfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTEwMDRfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTAwNV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMDA1X0hhc0RhdGE+DQo8QmFzZS0wLTEwMDVfRGF0YSBpZD0icmVmLTEwMDgiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE1ERXhQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTAwNV9EYXRhPg0KPEJhc2UtMC0xMDA1X0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMDA1X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEwMDZfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTAwNl9IYXNEYXRhPg0KPEJhc2UtMC0xMDA2X0RhdGEgaWQ9InJlZi0xMDA5Ij5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNREV5UEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTEwMDZfRGF0YT4NCjxCYXNlLTAtMTAwNl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTAwNl9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMDA3X0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTEwMDdfSGFzRGF0YT4NCjxCYXNlLTAtMTAwN19EYXRhIGlkPSJyZWYtMTAxMCI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TURFelBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMDA3X0RhdGE+DQo8QmFzZS0wLTEwMDdfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTEwMDdfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTAwOF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMDA4X0hhc0RhdGE+DQo8QmFzZS0wLTEwMDhfRGF0YSBpZD0icmVmLTEwMTEiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE1ERTBQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTAwOF9EYXRhPg0KPEJhc2UtMC0xMDA4X0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMDA4X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEwMDlfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTAwOV9IYXNEYXRhPg0KPEJhc2UtMC0xMDA5X0RhdGEgaWQ9InJlZi0xMDEyIj5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNREUxUEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTEwMDlfRGF0YT4NCjxCYXNlLTAtMTAwOV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTAwOV9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMDEwX0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTEwMTBfSGFzRGF0YT4NCjxCYXNlLTAtMTAxMF9EYXRhIGlkPSJyZWYtMTAxMyI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TURFMlBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMDEwX0RhdGE+DQo8QmFzZS0wLTEwMTBfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTEwMTBfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTAxMV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMDExX0hhc0RhdGE+DQo8QmFzZS0wLTEwMTFfRGF0YSBpZD0icmVmLTEwMTQiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE1ERTNQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTAxMV9EYXRhPg0KPEJhc2UtMC0xMDExX0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMDExX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEwMTJfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTAxMl9IYXNEYXRhPg0KPEJhc2UtMC0xMDEyX0RhdGEgaWQ9InJlZi0xMDE1Ij5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNREU0UEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTEwMTJfRGF0YT4NCjxCYXNlLTAtMTAxMl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTAxMl9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMDEzX0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTEwMTNfSGFzRGF0YT4NCjxCYXNlLTAtMTAxM19EYXRhIGlkPSJyZWYtMTAxNiI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TURFNVBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMDEzX0RhdGE+DQo8QmFzZS0wLTEwMTNfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTEwMTNfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTAxNF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMDE0X0hhc0RhdGE+DQo8QmFzZS0wLTEwMTRfRGF0YSBpZD0icmVmLTEwMTciPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE1ESXdQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTAxNF9EYXRhPg0KPEJhc2UtMC0xMDE0X0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMDE0X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEwMTVfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTAxNV9IYXNEYXRhPg0KPEJhc2UtMC0xMDE1X0RhdGEgaWQ9InJlZi0xMDE4Ij5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNREl4UEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTEwMTVfRGF0YT4NCjxCYXNlLTAtMTAxNV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTAxNV9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMDE2X0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTEwMTZfSGFzRGF0YT4NCjxCYXNlLTAtMTAxNl9EYXRhIGlkPSJyZWYtMTAxOSI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TURJeVBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMDE2X0RhdGE+DQo8QmFzZS0wLTEwMTZfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTEwMTZfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTAxN19IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMDE3X0hhc0RhdGE+DQo8QmFzZS0wLTEwMTdfRGF0YSBpZD0icmVmLTEwMjAiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE1ESXpQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTAxN19EYXRhPg0KPEJhc2UtMC0xMDE3X0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMDE3X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEwMThfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTAxOF9IYXNEYXRhPg0KPEJhc2UtMC0xMDE4X0RhdGEgaWQ9InJlZi0xMDIxIj5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNREkwUEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTEwMThfRGF0YT4NCjxCYXNlLTAtMTAxOF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTAxOF9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMDE5X0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTEwMTlfSGFzRGF0YT4NCjxCYXNlLTAtMTAxOV9EYXRhIGlkPSJyZWYtMTAyMiI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TURJMVBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMDE5X0RhdGE+DQo8QmFzZS0wLTEwMTlfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTEwMTlfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTAyMF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMDIwX0hhc0RhdGE+DQo8QmFzZS0wLTEwMjBfRGF0YSBpZD0icmVmLTEwMjMiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE1ESTJQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTAyMF9EYXRhPg0KPEJhc2UtMC0xMDIwX0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMDIwX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEwMjFfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTAyMV9IYXNEYXRhPg0KPEJhc2UtMC0xMDIxX0RhdGEgaWQ9InJlZi0xMDI0Ij5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNREkzUEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTEwMjFfRGF0YT4NCjxCYXNlLTAtMTAyMV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTAyMV9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMDIyX0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTEwMjJfSGFzRGF0YT4NCjxCYXNlLTAtMTAyMl9EYXRhIGlkPSJyZWYtMTAyNSI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TURJNFBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMDIyX0RhdGE+DQo8QmFzZS0wLTEwMjJfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTEwMjJfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTAyM19IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMDIzX0hhc0RhdGE+DQo8QmFzZS0wLTEwMjNfRGF0YSBpZD0icmVmLTEwMjYiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE1ESTVQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTAyM19EYXRhPg0KPEJhc2UtMC0xMDIzX0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMDIzX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEwMjRfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTAyNF9IYXNEYXRhPg0KPEJhc2UtMC0xMDI0X0RhdGEgaWQ9InJlZi0xMDI3Ij5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNRE13UEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTEwMjRfRGF0YT4NCjxCYXNlLTAtMTAyNF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTAyNF9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMDI1X0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTEwMjVfSGFzRGF0YT4NCjxCYXNlLTAtMTAyNV9EYXRhIGlkPSJyZWYtMTAyOCI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TURNeFBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMDI1X0RhdGE+DQo8QmFzZS0wLTEwMjVfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTEwMjVfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTAyNl9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMDI2X0hhc0RhdGE+DQo8QmFzZS0wLTEwMjZfRGF0YSBpZD0icmVmLTEwMjkiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE1ETXlQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTAyNl9EYXRhPg0KPEJhc2UtMC0xMDI2X0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMDI2X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEwMjdfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTAyN19IYXNEYXRhPg0KPEJhc2UtMC0xMDI3X0RhdGEgaWQ9InJlZi0xMDMwIj5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNRE16UEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTEwMjdfRGF0YT4NCjxCYXNlLTAtMTAyN19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTAyN19IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMDI4X0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTEwMjhfSGFzRGF0YT4NCjxCYXNlLTAtMTAyOF9EYXRhIGlkPSJyZWYtMTAzMSI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TURNMFBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMDI4X0RhdGE+DQo8QmFzZS0wLTEwMjhfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTEwMjhfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTAyOV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMDI5X0hhc0RhdGE+DQo8QmFzZS0wLTEwMjlfRGF0YSBpZD0icmVmLTEwMzIiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE1ETTFQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTAyOV9EYXRhPg0KPEJhc2UtMC0xMDI5X0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMDI5X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEwMzBfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTAzMF9IYXNEYXRhPg0KPEJhc2UtMC0xMDMwX0RhdGEgaWQ9InJlZi0xMDMzIj5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNRE0yUEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTEwMzBfRGF0YT4NCjxCYXNlLTAtMTAzMF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTAzMF9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMDMxX0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTEwMzFfSGFzRGF0YT4NCjxCYXNlLTAtMTAzMV9EYXRhIGlkPSJyZWYtMTAzNCI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TURNM1BDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMDMxX0RhdGE+DQo8QmFzZS0wLTEwMzFfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTEwMzFfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTAzMl9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMDMyX0hhc0RhdGE+DQo8QmFzZS0wLTEwMzJfRGF0YSBpZD0icmVmLTEwMzUiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE1ETTRQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTAzMl9EYXRhPg0KPEJhc2UtMC0xMDMyX0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMDMyX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEwMzNfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTAzM19IYXNEYXRhPg0KPEJhc2UtMC0xMDMzX0RhdGEgaWQ9InJlZi0xMDM2Ij5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNRE01UEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTEwMzNfRGF0YT4NCjxCYXNlLTAtMTAzM19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTAzM19IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMDM0X0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTEwMzRfSGFzRGF0YT4NCjxCYXNlLTAtMTAzNF9EYXRhIGlkPSJyZWYtMTAzNyI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TURRd1BDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMDM0X0RhdGE+DQo8QmFzZS0wLTEwMzRfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTEwMzRfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTAzNV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMDM1X0hhc0RhdGE+DQo8QmFzZS0wLTEwMzVfRGF0YSBpZD0icmVmLTEwMzgiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE1EUXhQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTAzNV9EYXRhPg0KPEJhc2UtMC0xMDM1X0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMDM1X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEwMzZfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTAzNl9IYXNEYXRhPg0KPEJhc2UtMC0xMDM2X0RhdGEgaWQ9InJlZi0xMDM5Ij5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNRFF5UEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTEwMzZfRGF0YT4NCjxCYXNlLTAtMTAzNl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTAzNl9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMDM3X0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTEwMzdfSGFzRGF0YT4NCjxCYXNlLTAtMTAzN19EYXRhIGlkPSJyZWYtMTA0MCI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TURRelBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMDM3X0RhdGE+DQo8QmFzZS0wLTEwMzdfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTEwMzdfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTAzOF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMDM4X0hhc0RhdGE+DQo8QmFzZS0wLTEwMzhfRGF0YSBpZD0icmVmLTEwNDEiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE1EUTBQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTAzOF9EYXRhPg0KPEJhc2UtMC0xMDM4X0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMDM4X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEwMzlfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTAzOV9IYXNEYXRhPg0KPEJhc2UtMC0xMDM5X0RhdGEgaWQ9InJlZi0xMDQyIj5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNRFExUEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTEwMzlfRGF0YT4NCjxCYXNlLTAtMTAzOV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTAzOV9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMDQwX0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTEwNDBfSGFzRGF0YT4NCjxCYXNlLTAtMTA0MF9EYXRhIGlkPSJyZWYtMTA0MyI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TURRMlBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMDQwX0RhdGE+DQo8QmFzZS0wLTEwNDBfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTEwNDBfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTA0MV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMDQxX0hhc0RhdGE+DQo8QmFzZS0wLTEwNDFfRGF0YSBpZD0icmVmLTEwNDQiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE1EUTNQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTA0MV9EYXRhPg0KPEJhc2UtMC0xMDQxX0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMDQxX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEwNDJfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTA0Ml9IYXNEYXRhPg0KPEJhc2UtMC0xMDQyX0RhdGEgaWQ9InJlZi0xMDQ1Ij5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNRFE0UEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTEwNDJfRGF0YT4NCjxCYXNlLTAtMTA0Ml9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTA0Ml9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMDQzX0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTEwNDNfSGFzRGF0YT4NCjxCYXNlLTAtMTA0M19EYXRhIGlkPSJyZWYtMTA0NiI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TURRNVBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMDQzX0RhdGE+DQo8QmFzZS0wLTEwNDNfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTEwNDNfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTA0NF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMDQ0X0hhc0RhdGE+DQo8QmFzZS0wLTEwNDRfRGF0YSBpZD0icmVmLTEwNDciPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE1EVXdQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTA0NF9EYXRhPg0KPEJhc2UtMC0xMDQ0X0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMDQ0X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEwNDVfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTA0NV9IYXNEYXRhPg0KPEJhc2UtMC0xMDQ1X0RhdGEgaWQ9InJlZi0xMDQ4Ij5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNRFV4UEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTEwNDVfRGF0YT4NCjxCYXNlLTAtMTA0NV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTA0NV9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMDQ2X0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTEwNDZfSGFzRGF0YT4NCjxCYXNlLTAtMTA0Nl9EYXRhIGlkPSJyZWYtMTA0OSI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TURVeVBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMDQ2X0RhdGE+DQo8QmFzZS0wLTEwNDZfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTEwNDZfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTA0N19IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMDQ3X0hhc0RhdGE+DQo8QmFzZS0wLTEwNDdfRGF0YSBpZD0icmVmLTEwNTAiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE1EVXpQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTA0N19EYXRhPg0KPEJhc2UtMC0xMDQ3X0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMDQ3X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEwNDhfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTA0OF9IYXNEYXRhPg0KPEJhc2UtMC0xMDQ4X0RhdGEgaWQ9InJlZi0xMDUxIj5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNRFUwUEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTEwNDhfRGF0YT4NCjxCYXNlLTAtMTA0OF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTA0OF9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMDQ5X0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTEwNDlfSGFzRGF0YT4NCjxCYXNlLTAtMTA0OV9EYXRhIGlkPSJyZWYtMTA1MiI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TURVMVBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMDQ5X0RhdGE+DQo8QmFzZS0wLTEwNDlfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTEwNDlfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTA1MF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMDUwX0hhc0RhdGE+DQo8QmFzZS0wLTEwNTBfRGF0YSBpZD0icmVmLTEwNTMiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE1EVTJQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTA1MF9EYXRhPg0KPEJhc2UtMC0xMDUwX0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMDUwX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEwNTFfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTA1MV9IYXNEYXRhPg0KPEJhc2UtMC0xMDUxX0RhdGEgaWQ9InJlZi0xMDU0Ij5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNRFUzUEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTEwNTFfRGF0YT4NCjxCYXNlLTAtMTA1MV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTA1MV9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMDUyX0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTEwNTJfSGFzRGF0YT4NCjxCYXNlLTAtMTA1Ml9EYXRhIGlkPSJyZWYtMTA1NSI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TURVNFBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMDUyX0RhdGE+DQo8QmFzZS0wLTEwNTJfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTEwNTJfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTA1M19IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMDUzX0hhc0RhdGE+DQo8QmFzZS0wLTEwNTNfRGF0YSBpZD0icmVmLTEwNTYiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE1EVTVQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTA1M19EYXRhPg0KPEJhc2UtMC0xMDUzX0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMDUzX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEwNTRfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTA1NF9IYXNEYXRhPg0KPEJhc2UtMC0xMDU0X0RhdGEgaWQ9InJlZi0xMDU3Ij5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNRFl3UEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTEwNTRfRGF0YT4NCjxCYXNlLTAtMTA1NF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTA1NF9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMDU1X0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTEwNTVfSGFzRGF0YT4NCjxCYXNlLTAtMTA1NV9EYXRhIGlkPSJyZWYtMTA1OCI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TURZeFBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMDU1X0RhdGE+DQo8QmFzZS0wLTEwNTVfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTEwNTVfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTA1Nl9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMDU2X0hhc0RhdGE+DQo8QmFzZS0wLTEwNTZfRGF0YSBpZD0icmVmLTEwNTkiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE1EWXlQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTA1Nl9EYXRhPg0KPEJhc2UtMC0xMDU2X0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMDU2X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEwNTdfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTA1N19IYXNEYXRhPg0KPEJhc2UtMC0xMDU3X0RhdGEgaWQ9InJlZi0xMDYwIj5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNRFl6UEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTEwNTdfRGF0YT4NCjxCYXNlLTAtMTA1N19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTA1N19IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMDU4X0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTEwNThfSGFzRGF0YT4NCjxCYXNlLTAtMTA1OF9EYXRhIGlkPSJyZWYtMTA2MSI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TURZMFBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMDU4X0RhdGE+DQo8QmFzZS0wLTEwNThfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTEwNThfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTA1OV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMDU5X0hhc0RhdGE+DQo8QmFzZS0wLTEwNTlfRGF0YSBpZD0icmVmLTEwNjIiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE1EWTFQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTA1OV9EYXRhPg0KPEJhc2UtMC0xMDU5X0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMDU5X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEwNjBfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTA2MF9IYXNEYXRhPg0KPEJhc2UtMC0xMDYwX0RhdGEgaWQ9InJlZi0xMDYzIj5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNRFkyUEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTEwNjBfRGF0YT4NCjxCYXNlLTAtMTA2MF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTA2MF9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMDYxX0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTEwNjFfSGFzRGF0YT4NCjxCYXNlLTAtMTA2MV9EYXRhIGlkPSJyZWYtMTA2NCI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TURZM1BDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMDYxX0RhdGE+DQo8QmFzZS0wLTEwNjFfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTEwNjFfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTA2Ml9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMDYyX0hhc0RhdGE+DQo8QmFzZS0wLTEwNjJfRGF0YSBpZD0icmVmLTEwNjUiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE1EWTRQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTA2Ml9EYXRhPg0KPEJhc2UtMC0xMDYyX0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMDYyX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEwNjNfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTA2M19IYXNEYXRhPg0KPEJhc2UtMC0xMDYzX0RhdGEgaWQ9InJlZi0xMDY2Ij5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNRFk1UEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTEwNjNfRGF0YT4NCjxCYXNlLTAtMTA2M19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTA2M19IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMDY0X0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTEwNjRfSGFzRGF0YT4NCjxCYXNlLTAtMTA2NF9EYXRhIGlkPSJyZWYtMTA2NyI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TURjd1BDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMDY0X0RhdGE+DQo8QmFzZS0wLTEwNjRfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTEwNjRfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTA2NV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMDY1X0hhc0RhdGE+DQo8QmFzZS0wLTEwNjVfRGF0YSBpZD0icmVmLTEwNjgiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE1EY3hQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTA2NV9EYXRhPg0KPEJhc2UtMC0xMDY1X0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMDY1X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEwNjZfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTA2Nl9IYXNEYXRhPg0KPEJhc2UtMC0xMDY2X0RhdGEgaWQ9InJlZi0xMDY5Ij5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNRGN5UEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTEwNjZfRGF0YT4NCjxCYXNlLTAtMTA2Nl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTA2Nl9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMDY3X0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTEwNjdfSGFzRGF0YT4NCjxCYXNlLTAtMTA2N19EYXRhIGlkPSJyZWYtMTA3MCI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TURjelBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMDY3X0RhdGE+DQo8QmFzZS0wLTEwNjdfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTEwNjdfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTA2OF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMDY4X0hhc0RhdGE+DQo8QmFzZS0wLTEwNjhfRGF0YSBpZD0icmVmLTEwNzEiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE1EYzBQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTA2OF9EYXRhPg0KPEJhc2UtMC0xMDY4X0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMDY4X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEwNjlfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTA2OV9IYXNEYXRhPg0KPEJhc2UtMC0xMDY5X0RhdGEgaWQ9InJlZi0xMDcyIj5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNRGMxUEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTEwNjlfRGF0YT4NCjxCYXNlLTAtMTA2OV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTA2OV9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMDcwX0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTEwNzBfSGFzRGF0YT4NCjxCYXNlLTAtMTA3MF9EYXRhIGlkPSJyZWYtMTA3MyI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TURjMlBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMDcwX0RhdGE+DQo8QmFzZS0wLTEwNzBfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTEwNzBfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTA3MV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMDcxX0hhc0RhdGE+DQo8QmFzZS0wLTEwNzFfRGF0YSBpZD0icmVmLTEwNzQiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE1EYzNQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTA3MV9EYXRhPg0KPEJhc2UtMC0xMDcxX0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMDcxX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEwNzJfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTA3Ml9IYXNEYXRhPg0KPEJhc2UtMC0xMDcyX0RhdGEgaWQ9InJlZi0xMDc1Ij5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNRGM0UEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTEwNzJfRGF0YT4NCjxCYXNlLTAtMTA3Ml9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTA3Ml9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMDczX0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTEwNzNfSGFzRGF0YT4NCjxCYXNlLTAtMTA3M19EYXRhIGlkPSJyZWYtMTA3NiI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TURjNVBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMDczX0RhdGE+DQo8QmFzZS0wLTEwNzNfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTEwNzNfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTA3NF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMDc0X0hhc0RhdGE+DQo8QmFzZS0wLTEwNzRfRGF0YSBpZD0icmVmLTEwNzciPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE1EZ3dQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTA3NF9EYXRhPg0KPEJhc2UtMC0xMDc0X0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMDc0X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEwNzVfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTA3NV9IYXNEYXRhPg0KPEJhc2UtMC0xMDc1X0RhdGEgaWQ9InJlZi0xMDc4Ij5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNRGd4UEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTEwNzVfRGF0YT4NCjxCYXNlLTAtMTA3NV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTA3NV9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMDc2X0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTEwNzZfSGFzRGF0YT4NCjxCYXNlLTAtMTA3Nl9EYXRhIGlkPSJyZWYtMTA3OSI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TURneVBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMDc2X0RhdGE+DQo8QmFzZS0wLTEwNzZfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTEwNzZfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTA3N19IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMDc3X0hhc0RhdGE+DQo8QmFzZS0wLTEwNzdfRGF0YSBpZD0icmVmLTEwODAiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE1EZ3pQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTA3N19EYXRhPg0KPEJhc2UtMC0xMDc3X0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMDc3X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEwNzhfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTA3OF9IYXNEYXRhPg0KPEJhc2UtMC0xMDc4X0RhdGEgaWQ9InJlZi0xMDgxIj5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNRGcwUEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTEwNzhfRGF0YT4NCjxCYXNlLTAtMTA3OF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTA3OF9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMDc5X0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTEwNzlfSGFzRGF0YT4NCjxCYXNlLTAtMTA3OV9EYXRhIGlkPSJyZWYtMTA4MiI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TURnMVBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMDc5X0RhdGE+DQo8QmFzZS0wLTEwNzlfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTEwNzlfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTA4MF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMDgwX0hhc0RhdGE+DQo8QmFzZS0wLTEwODBfRGF0YSBpZD0icmVmLTEwODMiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE1EZzJQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTA4MF9EYXRhPg0KPEJhc2UtMC0xMDgwX0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMDgwX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEwODFfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTA4MV9IYXNEYXRhPg0KPEJhc2UtMC0xMDgxX0RhdGEgaWQ9InJlZi0xMDg0Ij5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNRGczUEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTEwODFfRGF0YT4NCjxCYXNlLTAtMTA4MV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTA4MV9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMDgyX0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTEwODJfSGFzRGF0YT4NCjxCYXNlLTAtMTA4Ml9EYXRhIGlkPSJyZWYtMTA4NSI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TURnNFBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMDgyX0RhdGE+DQo8QmFzZS0wLTEwODJfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTEwODJfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTA4M19IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMDgzX0hhc0RhdGE+DQo8QmFzZS0wLTEwODNfRGF0YSBpZD0icmVmLTEwODYiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE1EZzVQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTA4M19EYXRhPg0KPEJhc2UtMC0xMDgzX0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMDgzX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEwODRfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTA4NF9IYXNEYXRhPg0KPEJhc2UtMC0xMDg0X0RhdGEgaWQ9InJlZi0xMDg3Ij5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNRGt3UEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTEwODRfRGF0YT4NCjxCYXNlLTAtMTA4NF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTA4NF9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMDg1X0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTEwODVfSGFzRGF0YT4NCjxCYXNlLTAtMTA4NV9EYXRhIGlkPSJyZWYtMTA4OCI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TURreFBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMDg1X0RhdGE+DQo8QmFzZS0wLTEwODVfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTEwODVfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTA4Nl9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMDg2X0hhc0RhdGE+DQo8QmFzZS0wLTEwODZfRGF0YSBpZD0icmVmLTEwODkiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE1Ea3lQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTA4Nl9EYXRhPg0KPEJhc2UtMC0xMDg2X0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMDg2X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEwODdfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTA4N19IYXNEYXRhPg0KPEJhc2UtMC0xMDg3X0RhdGEgaWQ9InJlZi0xMDkwIj5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNRGt6UEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTEwODdfRGF0YT4NCjxCYXNlLTAtMTA4N19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTA4N19IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMDg4X0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTEwODhfSGFzRGF0YT4NCjxCYXNlLTAtMTA4OF9EYXRhIGlkPSJyZWYtMTA5MSI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TURrMFBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMDg4X0RhdGE+DQo8QmFzZS0wLTEwODhfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTEwODhfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTA4OV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMDg5X0hhc0RhdGE+DQo8QmFzZS0wLTEwODlfRGF0YSBpZD0icmVmLTEwOTIiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE1EazFQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTA4OV9EYXRhPg0KPEJhc2UtMC0xMDg5X0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMDg5X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEwOTBfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTA5MF9IYXNEYXRhPg0KPEJhc2UtMC0xMDkwX0RhdGEgaWQ9InJlZi0xMDkzIj5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNRGsyUEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTEwOTBfRGF0YT4NCjxCYXNlLTAtMTA5MF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTA5MF9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMDkxX0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTEwOTFfSGFzRGF0YT4NCjxCYXNlLTAtMTA5MV9EYXRhIGlkPSJyZWYtMTA5NCI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TURrM1BDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMDkxX0RhdGE+DQo8QmFzZS0wLTEwOTFfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTEwOTFfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTA5Ml9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMDkyX0hhc0RhdGE+DQo8QmFzZS0wLTEwOTJfRGF0YSBpZD0icmVmLTEwOTUiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE1EazRQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTA5Ml9EYXRhPg0KPEJhc2UtMC0xMDkyX0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMDkyX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEwOTNfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTA5M19IYXNEYXRhPg0KPEJhc2UtMC0xMDkzX0RhdGEgaWQ9InJlZi0xMDk2Ij5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNRGs1UEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTEwOTNfRGF0YT4NCjxCYXNlLTAtMTA5M19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTA5M19IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMDk0X0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTEwOTRfSGFzRGF0YT4NCjxCYXNlLTAtMTA5NF9EYXRhIGlkPSJyZWYtMTA5NyI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TVRBd1BDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMDk0X0RhdGE+DQo8QmFzZS0wLTEwOTRfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTEwOTRfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTA5NV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMDk1X0hhc0RhdGE+DQo8QmFzZS0wLTEwOTVfRGF0YSBpZD0icmVmLTEwOTgiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE1UQXhQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTA5NV9EYXRhPg0KPEJhc2UtMC0xMDk1X0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMDk1X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEwOTZfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTA5Nl9IYXNEYXRhPg0KPEJhc2UtMC0xMDk2X0RhdGEgaWQ9InJlZi0xMDk5Ij5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNVEF5UEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTEwOTZfRGF0YT4NCjxCYXNlLTAtMTA5Nl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTA5Nl9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMDk3X0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTEwOTdfSGFzRGF0YT4NCjxCYXNlLTAtMTA5N19EYXRhIGlkPSJyZWYtMTEwMCI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TVRBelBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMDk3X0RhdGE+DQo8QmFzZS0wLTEwOTdfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTEwOTdfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTA5OF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMDk4X0hhc0RhdGE+DQo8QmFzZS0wLTEwOThfRGF0YSBpZD0icmVmLTExMDEiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE1UQTBQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTA5OF9EYXRhPg0KPEJhc2UtMC0xMDk4X0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMDk4X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEwOTlfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTA5OV9IYXNEYXRhPg0KPEJhc2UtMC0xMDk5X0RhdGEgaWQ9InJlZi0xMTAyIj5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNVEExUEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTEwOTlfRGF0YT4NCjxCYXNlLTAtMTA5OV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTA5OV9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMTAwX0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTExMDBfSGFzRGF0YT4NCjxCYXNlLTAtMTEwMF9EYXRhIGlkPSJyZWYtMTEwMyI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TVRBMlBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMTAwX0RhdGE+DQo8QmFzZS0wLTExMDBfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTExMDBfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTEwMV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMTAxX0hhc0RhdGE+DQo8QmFzZS0wLTExMDFfRGF0YSBpZD0icmVmLTExMDQiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE1UQTNQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTEwMV9EYXRhPg0KPEJhc2UtMC0xMTAxX0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMTAxX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTExMDJfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTEwMl9IYXNEYXRhPg0KPEJhc2UtMC0xMTAyX0RhdGEgaWQ9InJlZi0xMTA1Ij5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNVEE0UEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTExMDJfRGF0YT4NCjxCYXNlLTAtMTEwMl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTEwMl9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMTAzX0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTExMDNfSGFzRGF0YT4NCjxCYXNlLTAtMTEwM19EYXRhIGlkPSJyZWYtMTEwNiI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TVRBNVBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMTAzX0RhdGE+DQo8QmFzZS0wLTExMDNfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTExMDNfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTEwNF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMTA0X0hhc0RhdGE+DQo8QmFzZS0wLTExMDRfRGF0YSBpZD0icmVmLTExMDciPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE1URXdQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTEwNF9EYXRhPg0KPEJhc2UtMC0xMTA0X0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMTA0X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTExMDVfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTEwNV9IYXNEYXRhPg0KPEJhc2UtMC0xMTA1X0RhdGEgaWQ9InJlZi0xMTA4Ij5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNVEV4UEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTExMDVfRGF0YT4NCjxCYXNlLTAtMTEwNV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTEwNV9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMTA2X0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTExMDZfSGFzRGF0YT4NCjxCYXNlLTAtMTEwNl9EYXRhIGlkPSJyZWYtMTEwOSI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TVRFeVBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMTA2X0RhdGE+DQo8QmFzZS0wLTExMDZfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTExMDZfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTEwN19IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMTA3X0hhc0RhdGE+DQo8QmFzZS0wLTExMDdfRGF0YSBpZD0icmVmLTExMTAiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE1URXpQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTEwN19EYXRhPg0KPEJhc2UtMC0xMTA3X0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMTA3X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTExMDhfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTEwOF9IYXNEYXRhPg0KPEJhc2UtMC0xMTA4X0RhdGEgaWQ9InJlZi0xMTExIj5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNVEUwUEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTExMDhfRGF0YT4NCjxCYXNlLTAtMTEwOF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTEwOF9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMTA5X0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTExMDlfSGFzRGF0YT4NCjxCYXNlLTAtMTEwOV9EYXRhIGlkPSJyZWYtMTExMiI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TVRFMVBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMTA5X0RhdGE+DQo8QmFzZS0wLTExMDlfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTExMDlfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTExMF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMTEwX0hhc0RhdGE+DQo8QmFzZS0wLTExMTBfRGF0YSBpZD0icmVmLTExMTMiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE1URTJQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTExMF9EYXRhPg0KPEJhc2UtMC0xMTEwX0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMTEwX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTExMTFfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTExMV9IYXNEYXRhPg0KPEJhc2UtMC0xMTExX0RhdGEgaWQ9InJlZi0xMTE0Ij5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNVEUzUEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTExMTFfRGF0YT4NCjxCYXNlLTAtMTExMV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTExMV9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMTEyX0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTExMTJfSGFzRGF0YT4NCjxCYXNlLTAtMTExMl9EYXRhIGlkPSJyZWYtMTExNSI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TVRFNFBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMTEyX0RhdGE+DQo8QmFzZS0wLTExMTJfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTExMTJfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTExM19IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMTEzX0hhc0RhdGE+DQo8QmFzZS0wLTExMTNfRGF0YSBpZD0icmVmLTExMTYiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE1URTVQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTExM19EYXRhPg0KPEJhc2UtMC0xMTEzX0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMTEzX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTExMTRfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTExNF9IYXNEYXRhPg0KPEJhc2UtMC0xMTE0X0RhdGEgaWQ9InJlZi0xMTE3Ij5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNVEl3UEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTExMTRfRGF0YT4NCjxCYXNlLTAtMTExNF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTExNF9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMTE1X0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTExMTVfSGFzRGF0YT4NCjxCYXNlLTAtMTExNV9EYXRhIGlkPSJyZWYtMTExOCI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TVRJeFBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMTE1X0RhdGE+DQo8QmFzZS0wLTExMTVfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTExMTVfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTExNl9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMTE2X0hhc0RhdGE+DQo8QmFzZS0wLTExMTZfRGF0YSBpZD0icmVmLTExMTkiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE1USXlQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTExNl9EYXRhPg0KPEJhc2UtMC0xMTE2X0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMTE2X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTExMTdfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTExN19IYXNEYXRhPg0KPEJhc2UtMC0xMTE3X0RhdGEgaWQ9InJlZi0xMTIwIj5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNVEl6UEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTExMTdfRGF0YT4NCjxCYXNlLTAtMTExN19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTExN19IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMTE4X0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTExMThfSGFzRGF0YT4NCjxCYXNlLTAtMTExOF9EYXRhIGlkPSJyZWYtMTEyMSI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TVRJMFBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMTE4X0RhdGE+DQo8QmFzZS0wLTExMThfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTExMThfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTExOV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMTE5X0hhc0RhdGE+DQo8QmFzZS0wLTExMTlfRGF0YSBpZD0icmVmLTExMjIiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE1USTFQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTExOV9EYXRhPg0KPEJhc2UtMC0xMTE5X0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMTE5X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTExMjBfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTEyMF9IYXNEYXRhPg0KPEJhc2UtMC0xMTIwX0RhdGEgaWQ9InJlZi0xMTIzIj5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNVEkyUEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTExMjBfRGF0YT4NCjxCYXNlLTAtMTEyMF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTEyMF9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMTIxX0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTExMjFfSGFzRGF0YT4NCjxCYXNlLTAtMTEyMV9EYXRhIGlkPSJyZWYtMTEyNCI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TVRJM1BDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMTIxX0RhdGE+DQo8QmFzZS0wLTExMjFfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTExMjFfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTEyMl9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMTIyX0hhc0RhdGE+DQo8QmFzZS0wLTExMjJfRGF0YSBpZD0icmVmLTExMjUiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE1USTRQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTEyMl9EYXRhPg0KPEJhc2UtMC0xMTIyX0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMTIyX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTExMjNfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTEyM19IYXNEYXRhPg0KPEJhc2UtMC0xMTIzX0RhdGEgaWQ9InJlZi0xMTI2Ij5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNVEk1UEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTExMjNfRGF0YT4NCjxCYXNlLTAtMTEyM19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTEyM19IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMTI0X0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTExMjRfSGFzRGF0YT4NCjxCYXNlLTAtMTEyNF9EYXRhIGlkPSJyZWYtMTEyNyI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TVRNd1BDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMTI0X0RhdGE+DQo8QmFzZS0wLTExMjRfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTExMjRfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTEyNV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMTI1X0hhc0RhdGE+DQo8QmFzZS0wLTExMjVfRGF0YSBpZD0icmVmLTExMjgiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE1UTXhQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTEyNV9EYXRhPg0KPEJhc2UtMC0xMTI1X0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMTI1X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTExMjZfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTEyNl9IYXNEYXRhPg0KPEJhc2UtMC0xMTI2X0RhdGEgaWQ9InJlZi0xMTI5Ij5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNVE15UEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTExMjZfRGF0YT4NCjxCYXNlLTAtMTEyNl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTEyNl9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMTI3X0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTExMjdfSGFzRGF0YT4NCjxCYXNlLTAtMTEyN19EYXRhIGlkPSJyZWYtMTEzMCI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TVRNelBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMTI3X0RhdGE+DQo8QmFzZS0wLTExMjdfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTExMjdfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTEyOF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMTI4X0hhc0RhdGE+DQo8QmFzZS0wLTExMjhfRGF0YSBpZD0icmVmLTExMzEiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE1UTTBQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTEyOF9EYXRhPg0KPEJhc2UtMC0xMTI4X0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMTI4X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTExMjlfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTEyOV9IYXNEYXRhPg0KPEJhc2UtMC0xMTI5X0RhdGEgaWQ9InJlZi0xMTMyIj5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNVE0xUEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTExMjlfRGF0YT4NCjxCYXNlLTAtMTEyOV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTEyOV9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMTMwX0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTExMzBfSGFzRGF0YT4NCjxCYXNlLTAtMTEzMF9EYXRhIGlkPSJyZWYtMTEzMyI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TVRNMlBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMTMwX0RhdGE+DQo8QmFzZS0wLTExMzBfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTExMzBfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTEzMV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMTMxX0hhc0RhdGE+DQo8QmFzZS0wLTExMzFfRGF0YSBpZD0icmVmLTExMzQiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE1UTTNQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTEzMV9EYXRhPg0KPEJhc2UtMC0xMTMxX0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMTMxX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTExMzJfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTEzMl9IYXNEYXRhPg0KPEJhc2UtMC0xMTMyX0RhdGEgaWQ9InJlZi0xMTM1Ij5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNVE00UEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTExMzJfRGF0YT4NCjxCYXNlLTAtMTEzMl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTEzMl9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMTMzX0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTExMzNfSGFzRGF0YT4NCjxCYXNlLTAtMTEzM19EYXRhIGlkPSJyZWYtMTEzNiI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TVRNNVBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMTMzX0RhdGE+DQo8QmFzZS0wLTExMzNfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTExMzNfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTEzNF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMTM0X0hhc0RhdGE+DQo8QmFzZS0wLTExMzRfRGF0YSBpZD0icmVmLTExMzciPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE1UUXdQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTEzNF9EYXRhPg0KPEJhc2UtMC0xMTM0X0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMTM0X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTExMzVfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTEzNV9IYXNEYXRhPg0KPEJhc2UtMC0xMTM1X0RhdGEgaWQ9InJlZi0xMTM4Ij5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNVFF4UEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTExMzVfRGF0YT4NCjxCYXNlLTAtMTEzNV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTEzNV9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMTM2X0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTExMzZfSGFzRGF0YT4NCjxCYXNlLTAtMTEzNl9EYXRhIGlkPSJyZWYtMTEzOSI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TVRReVBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMTM2X0RhdGE+DQo8QmFzZS0wLTExMzZfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTExMzZfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTEzN19IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMTM3X0hhc0RhdGE+DQo8QmFzZS0wLTExMzdfRGF0YSBpZD0icmVmLTExNDAiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE1UUXpQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTEzN19EYXRhPg0KPEJhc2UtMC0xMTM3X0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMTM3X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTExMzhfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTEzOF9IYXNEYXRhPg0KPEJhc2UtMC0xMTM4X0RhdGEgaWQ9InJlZi0xMTQxIj5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNVFEwUEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTExMzhfRGF0YT4NCjxCYXNlLTAtMTEzOF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTEzOF9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMTM5X0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTExMzlfSGFzRGF0YT4NCjxCYXNlLTAtMTEzOV9EYXRhIGlkPSJyZWYtMTE0MiI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TVRRMVBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMTM5X0RhdGE+DQo8QmFzZS0wLTExMzlfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTExMzlfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTE0MF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMTQwX0hhc0RhdGE+DQo8QmFzZS0wLTExNDBfRGF0YSBpZD0icmVmLTExNDMiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE1UUTJQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTE0MF9EYXRhPg0KPEJhc2UtMC0xMTQwX0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMTQwX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTExNDFfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTE0MV9IYXNEYXRhPg0KPEJhc2UtMC0xMTQxX0RhdGEgaWQ9InJlZi0xMTQ0Ij5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNVFEzUEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTExNDFfRGF0YT4NCjxCYXNlLTAtMTE0MV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTE0MV9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMTQyX0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTExNDJfSGFzRGF0YT4NCjxCYXNlLTAtMTE0Ml9EYXRhIGlkPSJyZWYtMTE0NSI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TVRRNFBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMTQyX0RhdGE+DQo8QmFzZS0wLTExNDJfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTExNDJfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTE0M19IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMTQzX0hhc0RhdGE+DQo8QmFzZS0wLTExNDNfRGF0YSBpZD0icmVmLTExNDYiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE1UUTVQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTE0M19EYXRhPg0KPEJhc2UtMC0xMTQzX0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMTQzX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTExNDRfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTE0NF9IYXNEYXRhPg0KPEJhc2UtMC0xMTQ0X0RhdGEgaWQ9InJlZi0xMTQ3Ij5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNVFV3UEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTExNDRfRGF0YT4NCjxCYXNlLTAtMTE0NF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTE0NF9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMTQ1X0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTExNDVfSGFzRGF0YT4NCjxCYXNlLTAtMTE0NV9EYXRhIGlkPSJyZWYtMTE0OCI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TVRVeFBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMTQ1X0RhdGE+DQo8QmFzZS0wLTExNDVfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTExNDVfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTE0Nl9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMTQ2X0hhc0RhdGE+DQo8QmFzZS0wLTExNDZfRGF0YSBpZD0icmVmLTExNDkiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE1UVXlQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTE0Nl9EYXRhPg0KPEJhc2UtMC0xMTQ2X0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMTQ2X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTExNDdfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTE0N19IYXNEYXRhPg0KPEJhc2UtMC0xMTQ3X0RhdGEgaWQ9InJlZi0xMTUwIj5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNVFV6UEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTExNDdfRGF0YT4NCjxCYXNlLTAtMTE0N19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTE0N19IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMTQ4X0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTExNDhfSGFzRGF0YT4NCjxCYXNlLTAtMTE0OF9EYXRhIGlkPSJyZWYtMTE1MSI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TVRVMFBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMTQ4X0RhdGE+DQo8QmFzZS0wLTExNDhfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTExNDhfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTE0OV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMTQ5X0hhc0RhdGE+DQo8QmFzZS0wLTExNDlfRGF0YSBpZD0icmVmLTExNTIiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE1UVTFQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTE0OV9EYXRhPg0KPEJhc2UtMC0xMTQ5X0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMTQ5X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTExNTBfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTE1MF9IYXNEYXRhPg0KPEJhc2UtMC0xMTUwX0RhdGEgaWQ9InJlZi0xMTUzIj5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNVFUyUEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTExNTBfRGF0YT4NCjxCYXNlLTAtMTE1MF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTE1MF9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMTUxX0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTExNTFfSGFzRGF0YT4NCjxCYXNlLTAtMTE1MV9EYXRhIGlkPSJyZWYtMTE1NCI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TVRVM1BDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMTUxX0RhdGE+DQo8QmFzZS0wLTExNTFfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTExNTFfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTE1Ml9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMTUyX0hhc0RhdGE+DQo8QmFzZS0wLTExNTJfRGF0YSBpZD0icmVmLTExNTUiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE1UVTRQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTE1Ml9EYXRhPg0KPEJhc2UtMC0xMTUyX0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMTUyX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTExNTNfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTE1M19IYXNEYXRhPg0KPEJhc2UtMC0xMTUzX0RhdGEgaWQ9InJlZi0xMTU2Ij5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNVFU1UEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTExNTNfRGF0YT4NCjxCYXNlLTAtMTE1M19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTE1M19IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMTU0X0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTExNTRfSGFzRGF0YT4NCjxCYXNlLTAtMTE1NF9EYXRhIGlkPSJyZWYtMTE1NyI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TVRZd1BDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMTU0X0RhdGE+DQo8QmFzZS0wLTExNTRfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTExNTRfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTE1NV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMTU1X0hhc0RhdGE+DQo8QmFzZS0wLTExNTVfRGF0YSBpZD0icmVmLTExNTgiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE1UWXhQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTE1NV9EYXRhPg0KPEJhc2UtMC0xMTU1X0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMTU1X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTExNTZfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTE1Nl9IYXNEYXRhPg0KPEJhc2UtMC0xMTU2X0RhdGEgaWQ9InJlZi0xMTU5Ij5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNVFl5UEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTExNTZfRGF0YT4NCjxCYXNlLTAtMTE1Nl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTE1Nl9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMTU3X0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTExNTdfSGFzRGF0YT4NCjxCYXNlLTAtMTE1N19EYXRhIGlkPSJyZWYtMTE2MCI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TVRZelBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMTU3X0RhdGE+DQo8QmFzZS0wLTExNTdfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTExNTdfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTE1OF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMTU4X0hhc0RhdGE+DQo8QmFzZS0wLTExNThfRGF0YSBpZD0icmVmLTExNjEiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE1UWTBQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTE1OF9EYXRhPg0KPEJhc2UtMC0xMTU4X0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMTU4X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTExNTlfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTE1OV9IYXNEYXRhPg0KPEJhc2UtMC0xMTU5X0RhdGEgaWQ9InJlZi0xMTYyIj5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNVFkxUEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTExNTlfRGF0YT4NCjxCYXNlLTAtMTE1OV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTE1OV9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMTYwX0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTExNjBfSGFzRGF0YT4NCjxCYXNlLTAtMTE2MF9EYXRhIGlkPSJyZWYtMTE2MyI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TVRZMlBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMTYwX0RhdGE+DQo8QmFzZS0wLTExNjBfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTExNjBfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTE2MV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMTYxX0hhc0RhdGE+DQo8QmFzZS0wLTExNjFfRGF0YSBpZD0icmVmLTExNjQiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE1UWTNQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTE2MV9EYXRhPg0KPEJhc2UtMC0xMTYxX0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMTYxX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTExNjJfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTE2Ml9IYXNEYXRhPg0KPEJhc2UtMC0xMTYyX0RhdGEgaWQ9InJlZi0xMTY1Ij5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNVFk0UEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTExNjJfRGF0YT4NCjxCYXNlLTAtMTE2Ml9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTE2Ml9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMTYzX0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTExNjNfSGFzRGF0YT4NCjxCYXNlLTAtMTE2M19EYXRhIGlkPSJyZWYtMTE2NiI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TVRZNVBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMTYzX0RhdGE+DQo8QmFzZS0wLTExNjNfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTExNjNfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTE2NF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMTY0X0hhc0RhdGE+DQo8QmFzZS0wLTExNjRfRGF0YSBpZD0icmVmLTExNjciPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE1UY3dQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTE2NF9EYXRhPg0KPEJhc2UtMC0xMTY0X0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMTY0X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTExNjVfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTE2NV9IYXNEYXRhPg0KPEJhc2UtMC0xMTY1X0RhdGEgaWQ9InJlZi0xMTY4Ij5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNVGN4UEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTExNjVfRGF0YT4NCjxCYXNlLTAtMTE2NV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTE2NV9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMTY2X0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTExNjZfSGFzRGF0YT4NCjxCYXNlLTAtMTE2Nl9EYXRhIGlkPSJyZWYtMTE2OSI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TVRjeVBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMTY2X0RhdGE+DQo8QmFzZS0wLTExNjZfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTExNjZfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTE2N19IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMTY3X0hhc0RhdGE+DQo8QmFzZS0wLTExNjdfRGF0YSBpZD0icmVmLTExNzAiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE1UY3pQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTE2N19EYXRhPg0KPEJhc2UtMC0xMTY3X0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMTY3X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTExNjhfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTE2OF9IYXNEYXRhPg0KPEJhc2UtMC0xMTY4X0RhdGEgaWQ9InJlZi0xMTcxIj5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNVGMwUEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTExNjhfRGF0YT4NCjxCYXNlLTAtMTE2OF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTE2OF9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMTY5X0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTExNjlfSGFzRGF0YT4NCjxCYXNlLTAtMTE2OV9EYXRhIGlkPSJyZWYtMTE3MiI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TVRjMVBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMTY5X0RhdGE+DQo8QmFzZS0wLTExNjlfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTExNjlfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTE3MF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMTcwX0hhc0RhdGE+DQo8QmFzZS0wLTExNzBfRGF0YSBpZD0icmVmLTExNzMiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE1UYzJQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTE3MF9EYXRhPg0KPEJhc2UtMC0xMTcwX0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMTcwX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTExNzFfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTE3MV9IYXNEYXRhPg0KPEJhc2UtMC0xMTcxX0RhdGEgaWQ9InJlZi0xMTc0Ij5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNVGMzUEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTExNzFfRGF0YT4NCjxCYXNlLTAtMTE3MV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTE3MV9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMTcyX0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTExNzJfSGFzRGF0YT4NCjxCYXNlLTAtMTE3Ml9EYXRhIGlkPSJyZWYtMTE3NSI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TVRjNFBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMTcyX0RhdGE+DQo8QmFzZS0wLTExNzJfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTExNzJfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTE3M19IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMTczX0hhc0RhdGE+DQo8QmFzZS0wLTExNzNfRGF0YSBpZD0icmVmLTExNzYiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE1UYzVQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTE3M19EYXRhPg0KPEJhc2UtMC0xMTczX0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMTczX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTExNzRfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTE3NF9IYXNEYXRhPg0KPEJhc2UtMC0xMTc0X0RhdGEgaWQ9InJlZi0xMTc3Ij5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNVGd3UEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTExNzRfRGF0YT4NCjxCYXNlLTAtMTE3NF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTE3NF9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMTc1X0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTExNzVfSGFzRGF0YT4NCjxCYXNlLTAtMTE3NV9EYXRhIGlkPSJyZWYtMTE3OCI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TVRneFBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMTc1X0RhdGE+DQo8QmFzZS0wLTExNzVfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTExNzVfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTE3Nl9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMTc2X0hhc0RhdGE+DQo8QmFzZS0wLTExNzZfRGF0YSBpZD0icmVmLTExNzkiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE1UZ3lQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTE3Nl9EYXRhPg0KPEJhc2UtMC0xMTc2X0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMTc2X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTExNzdfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTE3N19IYXNEYXRhPg0KPEJhc2UtMC0xMTc3X0RhdGEgaWQ9InJlZi0xMTgwIj5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNVGd6UEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTExNzdfRGF0YT4NCjxCYXNlLTAtMTE3N19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTE3N19IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMTc4X0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTExNzhfSGFzRGF0YT4NCjxCYXNlLTAtMTE3OF9EYXRhIGlkPSJyZWYtMTE4MSI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TVRnMFBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMTc4X0RhdGE+DQo8QmFzZS0wLTExNzhfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTExNzhfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTE3OV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMTc5X0hhc0RhdGE+DQo8QmFzZS0wLTExNzlfRGF0YSBpZD0icmVmLTExODIiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE1UZzFQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTE3OV9EYXRhPg0KPEJhc2UtMC0xMTc5X0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMTc5X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTExODBfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTE4MF9IYXNEYXRhPg0KPEJhc2UtMC0xMTgwX0RhdGEgaWQ9InJlZi0xMTgzIj5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNVGcyUEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTExODBfRGF0YT4NCjxCYXNlLTAtMTE4MF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTE4MF9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMTgxX0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTExODFfSGFzRGF0YT4NCjxCYXNlLTAtMTE4MV9EYXRhIGlkPSJyZWYtMTE4NCI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TVRnM1BDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMTgxX0RhdGE+DQo8QmFzZS0wLTExODFfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTExODFfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTE4Ml9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMTgyX0hhc0RhdGE+DQo8QmFzZS0wLTExODJfRGF0YSBpZD0icmVmLTExODUiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE1UZzRQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTE4Ml9EYXRhPg0KPEJhc2UtMC0xMTgyX0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMTgyX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTExODNfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTE4M19IYXNEYXRhPg0KPEJhc2UtMC0xMTgzX0RhdGEgaWQ9InJlZi0xMTg2Ij5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNVGc1UEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTExODNfRGF0YT4NCjxCYXNlLTAtMTE4M19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTE4M19IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMTg0X0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTExODRfSGFzRGF0YT4NCjxCYXNlLTAtMTE4NF9EYXRhIGlkPSJyZWYtMTE4NyI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TVRrd1BDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMTg0X0RhdGE+DQo8QmFzZS0wLTExODRfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTExODRfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTE4NV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMTg1X0hhc0RhdGE+DQo8QmFzZS0wLTExODVfRGF0YSBpZD0icmVmLTExODgiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE1Ua3hQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTE4NV9EYXRhPg0KPEJhc2UtMC0xMTg1X0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMTg1X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTExODZfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTE4Nl9IYXNEYXRhPg0KPEJhc2UtMC0xMTg2X0RhdGEgaWQ9InJlZi0xMTg5Ij5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNVGt5UEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTExODZfRGF0YT4NCjxCYXNlLTAtMTE4Nl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTE4Nl9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMTg3X0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTExODdfSGFzRGF0YT4NCjxCYXNlLTAtMTE4N19EYXRhIGlkPSJyZWYtMTE5MCI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TVRrelBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMTg3X0RhdGE+DQo8QmFzZS0wLTExODdfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTExODdfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTE4OF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMTg4X0hhc0RhdGE+DQo8QmFzZS0wLTExODhfRGF0YSBpZD0icmVmLTExOTEiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE1UazBQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTE4OF9EYXRhPg0KPEJhc2UtMC0xMTg4X0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMTg4X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTExODlfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTE4OV9IYXNEYXRhPg0KPEJhc2UtMC0xMTg5X0RhdGEgaWQ9InJlZi0xMTkyIj5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNVGsxUEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTExODlfRGF0YT4NCjxCYXNlLTAtMTE4OV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTE4OV9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMTkwX0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTExOTBfSGFzRGF0YT4NCjxCYXNlLTAtMTE5MF9EYXRhIGlkPSJyZWYtMTE5MyI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TVRrMlBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMTkwX0RhdGE+DQo8QmFzZS0wLTExOTBfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTExOTBfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTE5MV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMTkxX0hhc0RhdGE+DQo8QmFzZS0wLTExOTFfRGF0YSBpZD0icmVmLTExOTQiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE1UazNQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTE5MV9EYXRhPg0KPEJhc2UtMC0xMTkxX0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMTkxX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTExOTJfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTE5Ml9IYXNEYXRhPg0KPEJhc2UtMC0xMTkyX0RhdGEgaWQ9InJlZi0xMTk1Ij5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNVGs0UEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTExOTJfRGF0YT4NCjxCYXNlLTAtMTE5Ml9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTE5Ml9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMTkzX0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTExOTNfSGFzRGF0YT4NCjxCYXNlLTAtMTE5M19EYXRhIGlkPSJyZWYtMTE5NiI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TVRrNVBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMTkzX0RhdGE+DQo8QmFzZS0wLTExOTNfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTExOTNfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTE5NF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMTk0X0hhc0RhdGE+DQo8QmFzZS0wLTExOTRfRGF0YSBpZD0icmVmLTExOTciPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE1qQXdQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTE5NF9EYXRhPg0KPEJhc2UtMC0xMTk0X0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMTk0X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTExOTVfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTE5NV9IYXNEYXRhPg0KPEJhc2UtMC0xMTk1X0RhdGEgaWQ9InJlZi0xMTk4Ij5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNakF4UEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTExOTVfRGF0YT4NCjxCYXNlLTAtMTE5NV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTE5NV9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMTk2X0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTExOTZfSGFzRGF0YT4NCjxCYXNlLTAtMTE5Nl9EYXRhIGlkPSJyZWYtMTE5OSI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TWpBeVBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMTk2X0RhdGE+DQo8QmFzZS0wLTExOTZfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTExOTZfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTE5N19IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMTk3X0hhc0RhdGE+DQo8QmFzZS0wLTExOTdfRGF0YSBpZD0icmVmLTEyMDAiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE1qQXpQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTE5N19EYXRhPg0KPEJhc2UtMC0xMTk3X0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMTk3X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTExOThfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTE5OF9IYXNEYXRhPg0KPEJhc2UtMC0xMTk4X0RhdGEgaWQ9InJlZi0xMjAxIj5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNakEwUEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTExOThfRGF0YT4NCjxCYXNlLTAtMTE5OF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTE5OF9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMTk5X0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTExOTlfSGFzRGF0YT4NCjxCYXNlLTAtMTE5OV9EYXRhIGlkPSJyZWYtMTIwMiI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TWpBMVBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMTk5X0RhdGE+DQo8QmFzZS0wLTExOTlfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTExOTlfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTIwMF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMjAwX0hhc0RhdGE+DQo8QmFzZS0wLTEyMDBfRGF0YSBpZD0icmVmLTEyMDMiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE1qQTJQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTIwMF9EYXRhPg0KPEJhc2UtMC0xMjAwX0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMjAwX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEyMDFfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTIwMV9IYXNEYXRhPg0KPEJhc2UtMC0xMjAxX0RhdGEgaWQ9InJlZi0xMjA0Ij5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNakEzUEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTEyMDFfRGF0YT4NCjxCYXNlLTAtMTIwMV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTIwMV9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMjAyX0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTEyMDJfSGFzRGF0YT4NCjxCYXNlLTAtMTIwMl9EYXRhIGlkPSJyZWYtMTIwNSI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TWpBNFBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMjAyX0RhdGE+DQo8QmFzZS0wLTEyMDJfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTEyMDJfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTIwM19IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMjAzX0hhc0RhdGE+DQo8QmFzZS0wLTEyMDNfRGF0YSBpZD0icmVmLTEyMDYiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE1qQTVQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTIwM19EYXRhPg0KPEJhc2UtMC0xMjAzX0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMjAzX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEyMDRfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTIwNF9IYXNEYXRhPg0KPEJhc2UtMC0xMjA0X0RhdGEgaWQ9InJlZi0xMjA3Ij5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNakV3UEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTEyMDRfRGF0YT4NCjxCYXNlLTAtMTIwNF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTIwNF9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMjA1X0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTEyMDVfSGFzRGF0YT4NCjxCYXNlLTAtMTIwNV9EYXRhIGlkPSJyZWYtMTIwOCI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TWpFeFBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMjA1X0RhdGE+DQo8QmFzZS0wLTEyMDVfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTEyMDVfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTIwNl9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMjA2X0hhc0RhdGE+DQo8QmFzZS0wLTEyMDZfRGF0YSBpZD0icmVmLTEyMDkiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE1qRXlQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTIwNl9EYXRhPg0KPEJhc2UtMC0xMjA2X0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMjA2X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEyMDdfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTIwN19IYXNEYXRhPg0KPEJhc2UtMC0xMjA3X0RhdGEgaWQ9InJlZi0xMjEwIj5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNakV6UEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTEyMDdfRGF0YT4NCjxCYXNlLTAtMTIwN19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTIwN19IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMjA4X0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTEyMDhfSGFzRGF0YT4NCjxCYXNlLTAtMTIwOF9EYXRhIGlkPSJyZWYtMTIxMSI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TWpFMFBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMjA4X0RhdGE+DQo8QmFzZS0wLTEyMDhfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTEyMDhfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTIwOV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMjA5X0hhc0RhdGE+DQo8QmFzZS0wLTEyMDlfRGF0YSBpZD0icmVmLTEyMTIiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE1qRTFQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTIwOV9EYXRhPg0KPEJhc2UtMC0xMjA5X0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMjA5X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEyMTBfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTIxMF9IYXNEYXRhPg0KPEJhc2UtMC0xMjEwX0RhdGEgaWQ9InJlZi0xMjEzIj5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNakUyUEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTEyMTBfRGF0YT4NCjxCYXNlLTAtMTIxMF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTIxMF9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMjExX0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTEyMTFfSGFzRGF0YT4NCjxCYXNlLTAtMTIxMV9EYXRhIGlkPSJyZWYtMTIxNCI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TWpFM1BDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMjExX0RhdGE+DQo8QmFzZS0wLTEyMTFfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTEyMTFfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTIxMl9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMjEyX0hhc0RhdGE+DQo8QmFzZS0wLTEyMTJfRGF0YSBpZD0icmVmLTEyMTUiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE1qRTRQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTIxMl9EYXRhPg0KPEJhc2UtMC0xMjEyX0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMjEyX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEyMTNfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTIxM19IYXNEYXRhPg0KPEJhc2UtMC0xMjEzX0RhdGEgaWQ9InJlZi0xMjE2Ij5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNakU1UEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTEyMTNfRGF0YT4NCjxCYXNlLTAtMTIxM19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTIxM19IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMjE0X0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTEyMTRfSGFzRGF0YT4NCjxCYXNlLTAtMTIxNF9EYXRhIGlkPSJyZWYtMTIxNyI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TWpJd1BDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMjE0X0RhdGE+DQo8QmFzZS0wLTEyMTRfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTEyMTRfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTIxNV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMjE1X0hhc0RhdGE+DQo8QmFzZS0wLTEyMTVfRGF0YSBpZD0icmVmLTEyMTgiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE1qSXhQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTIxNV9EYXRhPg0KPEJhc2UtMC0xMjE1X0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMjE1X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEyMTZfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTIxNl9IYXNEYXRhPg0KPEJhc2UtMC0xMjE2X0RhdGEgaWQ9InJlZi0xMjE5Ij5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNakl5UEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTEyMTZfRGF0YT4NCjxCYXNlLTAtMTIxNl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTIxNl9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMjE3X0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTEyMTdfSGFzRGF0YT4NCjxCYXNlLTAtMTIxN19EYXRhIGlkPSJyZWYtMTIyMCI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TWpJelBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMjE3X0RhdGE+DQo8QmFzZS0wLTEyMTdfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTEyMTdfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTIxOF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMjE4X0hhc0RhdGE+DQo8QmFzZS0wLTEyMThfRGF0YSBpZD0icmVmLTEyMjEiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE1qSTBQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTIxOF9EYXRhPg0KPEJhc2UtMC0xMjE4X0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMjE4X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEyMTlfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTIxOV9IYXNEYXRhPg0KPEJhc2UtMC0xMjE5X0RhdGEgaWQ9InJlZi0xMjIyIj5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNakkxUEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTEyMTlfRGF0YT4NCjxCYXNlLTAtMTIxOV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTIxOV9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMjIwX0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTEyMjBfSGFzRGF0YT4NCjxCYXNlLTAtMTIyMF9EYXRhIGlkPSJyZWYtMTIyMyI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TWpJMlBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMjIwX0RhdGE+DQo8QmFzZS0wLTEyMjBfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTEyMjBfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTIyMV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMjIxX0hhc0RhdGE+DQo8QmFzZS0wLTEyMjFfRGF0YSBpZD0icmVmLTEyMjQiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE1qSTNQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTIyMV9EYXRhPg0KPEJhc2UtMC0xMjIxX0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMjIxX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEyMjJfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTIyMl9IYXNEYXRhPg0KPEJhc2UtMC0xMjIyX0RhdGEgaWQ9InJlZi0xMjI1Ij5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNakk0UEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTEyMjJfRGF0YT4NCjxCYXNlLTAtMTIyMl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTIyMl9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMjIzX0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTEyMjNfSGFzRGF0YT4NCjxCYXNlLTAtMTIyM19EYXRhIGlkPSJyZWYtMTIyNiI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TWpJNVBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMjIzX0RhdGE+DQo8QmFzZS0wLTEyMjNfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTEyMjNfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTIyNF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMjI0X0hhc0RhdGE+DQo8QmFzZS0wLTEyMjRfRGF0YSBpZD0icmVmLTEyMjciPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE1qTXdQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTIyNF9EYXRhPg0KPEJhc2UtMC0xMjI0X0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMjI0X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEyMjVfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTIyNV9IYXNEYXRhPg0KPEJhc2UtMC0xMjI1X0RhdGEgaWQ9InJlZi0xMjI4Ij5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNak14UEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTEyMjVfRGF0YT4NCjxCYXNlLTAtMTIyNV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTIyNV9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMjI2X0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTEyMjZfSGFzRGF0YT4NCjxCYXNlLTAtMTIyNl9EYXRhIGlkPSJyZWYtMTIyOSI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TWpNeVBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMjI2X0RhdGE+DQo8QmFzZS0wLTEyMjZfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTEyMjZfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTIyN19IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMjI3X0hhc0RhdGE+DQo8QmFzZS0wLTEyMjdfRGF0YSBpZD0icmVmLTEyMzAiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE1qTXpQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTIyN19EYXRhPg0KPEJhc2UtMC0xMjI3X0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMjI3X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEyMjhfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTIyOF9IYXNEYXRhPg0KPEJhc2UtMC0xMjI4X0RhdGEgaWQ9InJlZi0xMjMxIj5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNak0wUEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTEyMjhfRGF0YT4NCjxCYXNlLTAtMTIyOF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTIyOF9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMjI5X0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTEyMjlfSGFzRGF0YT4NCjxCYXNlLTAtMTIyOV9EYXRhIGlkPSJyZWYtMTIzMiI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TWpNMVBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMjI5X0RhdGE+DQo8QmFzZS0wLTEyMjlfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTEyMjlfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTIzMF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMjMwX0hhc0RhdGE+DQo8QmFzZS0wLTEyMzBfRGF0YSBpZD0icmVmLTEyMzMiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE1qTTJQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTIzMF9EYXRhPg0KPEJhc2UtMC0xMjMwX0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMjMwX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEyMzFfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTIzMV9IYXNEYXRhPg0KPEJhc2UtMC0xMjMxX0RhdGEgaWQ9InJlZi0xMjM0Ij5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNak0zUEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTEyMzFfRGF0YT4NCjxCYXNlLTAtMTIzMV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTIzMV9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMjMyX0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTEyMzJfSGFzRGF0YT4NCjxCYXNlLTAtMTIzMl9EYXRhIGlkPSJyZWYtMTIzNSI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TWpNNFBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMjMyX0RhdGE+DQo8QmFzZS0wLTEyMzJfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTEyMzJfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTIzM19IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMjMzX0hhc0RhdGE+DQo8QmFzZS0wLTEyMzNfRGF0YSBpZD0icmVmLTEyMzYiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE1qTTVQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTIzM19EYXRhPg0KPEJhc2UtMC0xMjMzX0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMjMzX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEyMzRfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTIzNF9IYXNEYXRhPg0KPEJhc2UtMC0xMjM0X0RhdGEgaWQ9InJlZi0xMjM3Ij5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNalF3UEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTEyMzRfRGF0YT4NCjxCYXNlLTAtMTIzNF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTIzNF9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMjM1X0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTEyMzVfSGFzRGF0YT4NCjxCYXNlLTAtMTIzNV9EYXRhIGlkPSJyZWYtMTIzOCI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TWpReFBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMjM1X0RhdGE+DQo8QmFzZS0wLTEyMzVfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTEyMzVfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTIzNl9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMjM2X0hhc0RhdGE+DQo8QmFzZS0wLTEyMzZfRGF0YSBpZD0icmVmLTEyMzkiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE1qUXlQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTIzNl9EYXRhPg0KPEJhc2UtMC0xMjM2X0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMjM2X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEyMzdfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTIzN19IYXNEYXRhPg0KPEJhc2UtMC0xMjM3X0RhdGEgaWQ9InJlZi0xMjQwIj5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNalF6UEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTEyMzdfRGF0YT4NCjxCYXNlLTAtMTIzN19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTIzN19IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMjM4X0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTEyMzhfSGFzRGF0YT4NCjxCYXNlLTAtMTIzOF9EYXRhIGlkPSJyZWYtMTI0MSI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TWpRMFBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMjM4X0RhdGE+DQo8QmFzZS0wLTEyMzhfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTEyMzhfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTIzOV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMjM5X0hhc0RhdGE+DQo8QmFzZS0wLTEyMzlfRGF0YSBpZD0icmVmLTEyNDIiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE1qUTFQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTIzOV9EYXRhPg0KPEJhc2UtMC0xMjM5X0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMjM5X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEyNDBfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTI0MF9IYXNEYXRhPg0KPEJhc2UtMC0xMjQwX0RhdGEgaWQ9InJlZi0xMjQzIj5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNalEyUEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTEyNDBfRGF0YT4NCjxCYXNlLTAtMTI0MF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTI0MF9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMjQxX0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTEyNDFfSGFzRGF0YT4NCjxCYXNlLTAtMTI0MV9EYXRhIGlkPSJyZWYtMTI0NCI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TWpRM1BDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMjQxX0RhdGE+DQo8QmFzZS0wLTEyNDFfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTEyNDFfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTI0Ml9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMjQyX0hhc0RhdGE+DQo8QmFzZS0wLTEyNDJfRGF0YSBpZD0icmVmLTEyNDUiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE1qUTRQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTI0Ml9EYXRhPg0KPEJhc2UtMC0xMjQyX0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMjQyX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEyNDNfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTI0M19IYXNEYXRhPg0KPEJhc2UtMC0xMjQzX0RhdGEgaWQ9InJlZi0xMjQ2Ij5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNalE1UEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTEyNDNfRGF0YT4NCjxCYXNlLTAtMTI0M19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTI0M19IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMjQ0X0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTEyNDRfSGFzRGF0YT4NCjxCYXNlLTAtMTI0NF9EYXRhIGlkPSJyZWYtMTI0NyI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TWpVd1BDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMjQ0X0RhdGE+DQo8QmFzZS0wLTEyNDRfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTEyNDRfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTI0NV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMjQ1X0hhc0RhdGE+DQo8QmFzZS0wLTEyNDVfRGF0YSBpZD0icmVmLTEyNDgiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE1qVXhQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTI0NV9EYXRhPg0KPEJhc2UtMC0xMjQ1X0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMjQ1X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEyNDZfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTI0Nl9IYXNEYXRhPg0KPEJhc2UtMC0xMjQ2X0RhdGEgaWQ9InJlZi0xMjQ5Ij5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNalV5UEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTEyNDZfRGF0YT4NCjxCYXNlLTAtMTI0Nl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTI0Nl9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMjQ3X0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTEyNDdfSGFzRGF0YT4NCjxCYXNlLTAtMTI0N19EYXRhIGlkPSJyZWYtMTI1MCI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TWpVelBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMjQ3X0RhdGE+DQo8QmFzZS0wLTEyNDdfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTEyNDdfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTI0OF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMjQ4X0hhc0RhdGE+DQo8QmFzZS0wLTEyNDhfRGF0YSBpZD0icmVmLTEyNTEiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE1qVTBQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTI0OF9EYXRhPg0KPEJhc2UtMC0xMjQ4X0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMjQ4X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEyNDlfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTI0OV9IYXNEYXRhPg0KPEJhc2UtMC0xMjQ5X0RhdGEgaWQ9InJlZi0xMjUyIj5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNalUxUEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTEyNDlfRGF0YT4NCjxCYXNlLTAtMTI0OV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTI0OV9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMjUwX0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTEyNTBfSGFzRGF0YT4NCjxCYXNlLTAtMTI1MF9EYXRhIGlkPSJyZWYtMTI1MyI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TWpVMlBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMjUwX0RhdGE+DQo8QmFzZS0wLTEyNTBfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTEyNTBfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTI1MV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMjUxX0hhc0RhdGE+DQo8QmFzZS0wLTEyNTFfRGF0YSBpZD0icmVmLTEyNTQiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE1qVTNQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTI1MV9EYXRhPg0KPEJhc2UtMC0xMjUxX0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMjUxX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEyNTJfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTI1Ml9IYXNEYXRhPg0KPEJhc2UtMC0xMjUyX0RhdGEgaWQ9InJlZi0xMjU1Ij5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNalU0UEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTEyNTJfRGF0YT4NCjxCYXNlLTAtMTI1Ml9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTI1Ml9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMjUzX0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTEyNTNfSGFzRGF0YT4NCjxCYXNlLTAtMTI1M19EYXRhIGlkPSJyZWYtMTI1NiI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TWpVNVBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMjUzX0RhdGE+DQo8QmFzZS0wLTEyNTNfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTEyNTNfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTI1NF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMjU0X0hhc0RhdGE+DQo8QmFzZS0wLTEyNTRfRGF0YSBpZD0icmVmLTEyNTciPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE1qWXdQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTI1NF9EYXRhPg0KPEJhc2UtMC0xMjU0X0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMjU0X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEyNTVfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTI1NV9IYXNEYXRhPg0KPEJhc2UtMC0xMjU1X0RhdGEgaWQ9InJlZi0xMjU4Ij5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNall4UEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTEyNTVfRGF0YT4NCjxCYXNlLTAtMTI1NV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTI1NV9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMjU2X0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTEyNTZfSGFzRGF0YT4NCjxCYXNlLTAtMTI1Nl9EYXRhIGlkPSJyZWYtMTI1OSI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TWpZeVBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMjU2X0RhdGE+DQo8QmFzZS0wLTEyNTZfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTEyNTZfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTI1N19IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMjU3X0hhc0RhdGE+DQo8QmFzZS0wLTEyNTdfRGF0YSBpZD0icmVmLTEyNjAiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE1qWXpQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTI1N19EYXRhPg0KPEJhc2UtMC0xMjU3X0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMjU3X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEyNThfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTI1OF9IYXNEYXRhPg0KPEJhc2UtMC0xMjU4X0RhdGEgaWQ9InJlZi0xMjYxIj5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNalkwUEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTEyNThfRGF0YT4NCjxCYXNlLTAtMTI1OF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTI1OF9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMjU5X0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTEyNTlfSGFzRGF0YT4NCjxCYXNlLTAtMTI1OV9EYXRhIGlkPSJyZWYtMTI2MiI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TWpZMVBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMjU5X0RhdGE+DQo8QmFzZS0wLTEyNTlfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTEyNTlfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTI2MF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMjYwX0hhc0RhdGE+DQo8QmFzZS0wLTEyNjBfRGF0YSBpZD0icmVmLTEyNjMiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE1qWTJQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTI2MF9EYXRhPg0KPEJhc2UtMC0xMjYwX0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMjYwX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEyNjFfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTI2MV9IYXNEYXRhPg0KPEJhc2UtMC0xMjYxX0RhdGEgaWQ9InJlZi0xMjY0Ij5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNalkzUEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTEyNjFfRGF0YT4NCjxCYXNlLTAtMTI2MV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTI2MV9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMjYyX0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTEyNjJfSGFzRGF0YT4NCjxCYXNlLTAtMTI2Ml9EYXRhIGlkPSJyZWYtMTI2NSI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TWpZNFBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMjYyX0RhdGE+DQo8QmFzZS0wLTEyNjJfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTEyNjJfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTI2M19IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMjYzX0hhc0RhdGE+DQo8QmFzZS0wLTEyNjNfRGF0YSBpZD0icmVmLTEyNjYiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE1qWTVQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTI2M19EYXRhPg0KPEJhc2UtMC0xMjYzX0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMjYzX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEyNjRfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTI2NF9IYXNEYXRhPg0KPEJhc2UtMC0xMjY0X0RhdGEgaWQ9InJlZi0xMjY3Ij5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNamN3UEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTEyNjRfRGF0YT4NCjxCYXNlLTAtMTI2NF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTI2NF9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMjY1X0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTEyNjVfSGFzRGF0YT4NCjxCYXNlLTAtMTI2NV9EYXRhIGlkPSJyZWYtMTI2OCI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TWpjeFBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMjY1X0RhdGE+DQo8QmFzZS0wLTEyNjVfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTEyNjVfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTI2Nl9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMjY2X0hhc0RhdGE+DQo8QmFzZS0wLTEyNjZfRGF0YSBpZD0icmVmLTEyNjkiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE1qY3lQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTI2Nl9EYXRhPg0KPEJhc2UtMC0xMjY2X0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMjY2X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEyNjdfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTI2N19IYXNEYXRhPg0KPEJhc2UtMC0xMjY3X0RhdGEgaWQ9InJlZi0xMjcwIj5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNamN6UEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTEyNjdfRGF0YT4NCjxCYXNlLTAtMTI2N19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTI2N19IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMjY4X0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTEyNjhfSGFzRGF0YT4NCjxCYXNlLTAtMTI2OF9EYXRhIGlkPSJyZWYtMTI3MSI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TWpjMFBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMjY4X0RhdGE+DQo8QmFzZS0wLTEyNjhfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTEyNjhfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTI2OV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMjY5X0hhc0RhdGE+DQo8QmFzZS0wLTEyNjlfRGF0YSBpZD0icmVmLTEyNzIiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE1qYzFQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTI2OV9EYXRhPg0KPEJhc2UtMC0xMjY5X0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMjY5X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEyNzBfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTI3MF9IYXNEYXRhPg0KPEJhc2UtMC0xMjcwX0RhdGEgaWQ9InJlZi0xMjczIj5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNamMyUEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTEyNzBfRGF0YT4NCjxCYXNlLTAtMTI3MF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTI3MF9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMjcxX0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTEyNzFfSGFzRGF0YT4NCjxCYXNlLTAtMTI3MV9EYXRhIGlkPSJyZWYtMTI3NCI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TWpjM1BDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMjcxX0RhdGE+DQo8QmFzZS0wLTEyNzFfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTEyNzFfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTI3Ml9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMjcyX0hhc0RhdGE+DQo8QmFzZS0wLTEyNzJfRGF0YSBpZD0icmVmLTEyNzUiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE1qYzRQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTI3Ml9EYXRhPg0KPEJhc2UtMC0xMjcyX0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMjcyX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEyNzNfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTI3M19IYXNEYXRhPg0KPEJhc2UtMC0xMjczX0RhdGEgaWQ9InJlZi0xMjc2Ij5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNamM1UEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTEyNzNfRGF0YT4NCjxCYXNlLTAtMTI3M19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTI3M19IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMjc0X0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTEyNzRfSGFzRGF0YT4NCjxCYXNlLTAtMTI3NF9EYXRhIGlkPSJyZWYtMTI3NyI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TWpnd1BDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMjc0X0RhdGE+DQo8QmFzZS0wLTEyNzRfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTEyNzRfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTI3NV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMjc1X0hhc0RhdGE+DQo8QmFzZS0wLTEyNzVfRGF0YSBpZD0icmVmLTEyNzgiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE1qZ3hQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTI3NV9EYXRhPg0KPEJhc2UtMC0xMjc1X0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMjc1X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEyNzZfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTI3Nl9IYXNEYXRhPg0KPEJhc2UtMC0xMjc2X0RhdGEgaWQ9InJlZi0xMjc5Ij5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNamd5UEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTEyNzZfRGF0YT4NCjxCYXNlLTAtMTI3Nl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTI3Nl9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMjc3X0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTEyNzdfSGFzRGF0YT4NCjxCYXNlLTAtMTI3N19EYXRhIGlkPSJyZWYtMTI4MCI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TWpnelBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMjc3X0RhdGE+DQo8QmFzZS0wLTEyNzdfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTEyNzdfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTI3OF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMjc4X0hhc0RhdGE+DQo8QmFzZS0wLTEyNzhfRGF0YSBpZD0icmVmLTEyODEiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE1qZzBQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTI3OF9EYXRhPg0KPEJhc2UtMC0xMjc4X0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMjc4X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEyNzlfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTI3OV9IYXNEYXRhPg0KPEJhc2UtMC0xMjc5X0RhdGEgaWQ9InJlZi0xMjgyIj5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNamcxUEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTEyNzlfRGF0YT4NCjxCYXNlLTAtMTI3OV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTI3OV9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMjgwX0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTEyODBfSGFzRGF0YT4NCjxCYXNlLTAtMTI4MF9EYXRhIGlkPSJyZWYtMTI4MyI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TWpnMlBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMjgwX0RhdGE+DQo8QmFzZS0wLTEyODBfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTEyODBfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTI4MV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMjgxX0hhc0RhdGE+DQo8QmFzZS0wLTEyODFfRGF0YSBpZD0icmVmLTEyODQiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE1qZzNQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTI4MV9EYXRhPg0KPEJhc2UtMC0xMjgxX0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMjgxX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEyODJfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTI4Ml9IYXNEYXRhPg0KPEJhc2UtMC0xMjgyX0RhdGEgaWQ9InJlZi0xMjg1Ij5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNamc0UEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTEyODJfRGF0YT4NCjxCYXNlLTAtMTI4Ml9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTI4Ml9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMjgzX0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTEyODNfSGFzRGF0YT4NCjxCYXNlLTAtMTI4M19EYXRhIGlkPSJyZWYtMTI4NiI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TWpnNVBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMjgzX0RhdGE+DQo8QmFzZS0wLTEyODNfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTEyODNfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTI4NF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMjg0X0hhc0RhdGE+DQo8QmFzZS0wLTEyODRfRGF0YSBpZD0icmVmLTEyODciPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE1qa3dQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTI4NF9EYXRhPg0KPEJhc2UtMC0xMjg0X0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMjg0X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEyODVfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTI4NV9IYXNEYXRhPg0KPEJhc2UtMC0xMjg1X0RhdGEgaWQ9InJlZi0xMjg4Ij5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNamt4UEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTEyODVfRGF0YT4NCjxCYXNlLTAtMTI4NV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTI4NV9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMjg2X0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTEyODZfSGFzRGF0YT4NCjxCYXNlLTAtMTI4Nl9EYXRhIGlkPSJyZWYtMTI4OSI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TWpreVBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMjg2X0RhdGE+DQo8QmFzZS0wLTEyODZfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTEyODZfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTI4N19IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMjg3X0hhc0RhdGE+DQo8QmFzZS0wLTEyODdfRGF0YSBpZD0icmVmLTEyOTAiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE1qa3pQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTI4N19EYXRhPg0KPEJhc2UtMC0xMjg3X0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMjg3X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEyODhfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTI4OF9IYXNEYXRhPg0KPEJhc2UtMC0xMjg4X0RhdGEgaWQ9InJlZi0xMjkxIj5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNamswUEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTEyODhfRGF0YT4NCjxCYXNlLTAtMTI4OF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTI4OF9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMjg5X0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTEyODlfSGFzRGF0YT4NCjxCYXNlLTAtMTI4OV9EYXRhIGlkPSJyZWYtMTI5MiI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TWprMVBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMjg5X0RhdGE+DQo8QmFzZS0wLTEyODlfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTEyODlfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTI5MF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMjkwX0hhc0RhdGE+DQo8QmFzZS0wLTEyOTBfRGF0YSBpZD0icmVmLTEyOTMiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE1qazJQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTI5MF9EYXRhPg0KPEJhc2UtMC0xMjkwX0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMjkwX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEyOTFfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTI5MV9IYXNEYXRhPg0KPEJhc2UtMC0xMjkxX0RhdGEgaWQ9InJlZi0xMjk0Ij5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNamszUEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTEyOTFfRGF0YT4NCjxCYXNlLTAtMTI5MV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTI5MV9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMjkyX0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTEyOTJfSGFzRGF0YT4NCjxCYXNlLTAtMTI5Ml9EYXRhIGlkPSJyZWYtMTI5NSI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TWprNFBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMjkyX0RhdGE+DQo8QmFzZS0wLTEyOTJfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTEyOTJfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTI5M19IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMjkzX0hhc0RhdGE+DQo8QmFzZS0wLTEyOTNfRGF0YSBpZD0icmVmLTEyOTYiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE1qazVQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTI5M19EYXRhPg0KPEJhc2UtMC0xMjkzX0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMjkzX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEyOTRfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTI5NF9IYXNEYXRhPg0KPEJhc2UtMC0xMjk0X0RhdGEgaWQ9InJlZi0xMjk3Ij5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNekF3UEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTEyOTRfRGF0YT4NCjxCYXNlLTAtMTI5NF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTI5NF9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMjk1X0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTEyOTVfSGFzRGF0YT4NCjxCYXNlLTAtMTI5NV9EYXRhIGlkPSJyZWYtMTI5OCI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TXpBeFBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMjk1X0RhdGE+DQo8QmFzZS0wLTEyOTVfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTEyOTVfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTI5Nl9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMjk2X0hhc0RhdGE+DQo8QmFzZS0wLTEyOTZfRGF0YSBpZD0icmVmLTEyOTkiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE16QXlQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTI5Nl9EYXRhPg0KPEJhc2UtMC0xMjk2X0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMjk2X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEyOTdfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTI5N19IYXNEYXRhPg0KPEJhc2UtMC0xMjk3X0RhdGEgaWQ9InJlZi0xMzAwIj5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNekF6UEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTEyOTdfRGF0YT4NCjxCYXNlLTAtMTI5N19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTI5N19IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMjk4X0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTEyOThfSGFzRGF0YT4NCjxCYXNlLTAtMTI5OF9EYXRhIGlkPSJyZWYtMTMwMSI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TXpBMFBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMjk4X0RhdGE+DQo8QmFzZS0wLTEyOThfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTEyOThfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTI5OV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMjk5X0hhc0RhdGE+DQo8QmFzZS0wLTEyOTlfRGF0YSBpZD0icmVmLTEzMDIiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE16QTFQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTI5OV9EYXRhPg0KPEJhc2UtMC0xMjk5X0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMjk5X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEzMDBfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTMwMF9IYXNEYXRhPg0KPEJhc2UtMC0xMzAwX0RhdGEgaWQ9InJlZi0xMzAzIj5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNekEyUEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTEzMDBfRGF0YT4NCjxCYXNlLTAtMTMwMF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTMwMF9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMzAxX0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTEzMDFfSGFzRGF0YT4NCjxCYXNlLTAtMTMwMV9EYXRhIGlkPSJyZWYtMTMwNCI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TXpBM1BDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMzAxX0RhdGE+DQo8QmFzZS0wLTEzMDFfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTEzMDFfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTMwMl9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMzAyX0hhc0RhdGE+DQo8QmFzZS0wLTEzMDJfRGF0YSBpZD0icmVmLTEzMDUiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE16QTRQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTMwMl9EYXRhPg0KPEJhc2UtMC0xMzAyX0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMzAyX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEzMDNfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTMwM19IYXNEYXRhPg0KPEJhc2UtMC0xMzAzX0RhdGEgaWQ9InJlZi0xMzA2Ij5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNekE1UEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTEzMDNfRGF0YT4NCjxCYXNlLTAtMTMwM19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTMwM19IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMzA0X0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTEzMDRfSGFzRGF0YT4NCjxCYXNlLTAtMTMwNF9EYXRhIGlkPSJyZWYtMTMwNyI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TXpFd1BDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMzA0X0RhdGE+DQo8QmFzZS0wLTEzMDRfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTEzMDRfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTMwNV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMzA1X0hhc0RhdGE+DQo8QmFzZS0wLTEzMDVfRGF0YSBpZD0icmVmLTEzMDgiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE16RXhQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTMwNV9EYXRhPg0KPEJhc2UtMC0xMzA1X0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMzA1X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEzMDZfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTMwNl9IYXNEYXRhPg0KPEJhc2UtMC0xMzA2X0RhdGEgaWQ9InJlZi0xMzA5Ij5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNekV5UEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTEzMDZfRGF0YT4NCjxCYXNlLTAtMTMwNl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTMwNl9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMzA3X0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTEzMDdfSGFzRGF0YT4NCjxCYXNlLTAtMTMwN19EYXRhIGlkPSJyZWYtMTMxMCI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TXpFelBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMzA3X0RhdGE+DQo8QmFzZS0wLTEzMDdfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTEzMDdfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTMwOF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMzA4X0hhc0RhdGE+DQo8QmFzZS0wLTEzMDhfRGF0YSBpZD0icmVmLTEzMTEiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE16RTBQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTMwOF9EYXRhPg0KPEJhc2UtMC0xMzA4X0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMzA4X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEzMDlfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTMwOV9IYXNEYXRhPg0KPEJhc2UtMC0xMzA5X0RhdGEgaWQ9InJlZi0xMzEyIj5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNekUxUEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTEzMDlfRGF0YT4NCjxCYXNlLTAtMTMwOV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTMwOV9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMzEwX0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTEzMTBfSGFzRGF0YT4NCjxCYXNlLTAtMTMxMF9EYXRhIGlkPSJyZWYtMTMxMyI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TXpFMlBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMzEwX0RhdGE+DQo8QmFzZS0wLTEzMTBfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTEzMTBfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTMxMV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMzExX0hhc0RhdGE+DQo8QmFzZS0wLTEzMTFfRGF0YSBpZD0icmVmLTEzMTQiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE16RTNQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTMxMV9EYXRhPg0KPEJhc2UtMC0xMzExX0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMzExX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEzMTJfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTMxMl9IYXNEYXRhPg0KPEJhc2UtMC0xMzEyX0RhdGEgaWQ9InJlZi0xMzE1Ij5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNekU0UEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTEzMTJfRGF0YT4NCjxCYXNlLTAtMTMxMl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTMxMl9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMzEzX0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTEzMTNfSGFzRGF0YT4NCjxCYXNlLTAtMTMxM19EYXRhIGlkPSJyZWYtMTMxNiI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TXpFNVBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMzEzX0RhdGE+DQo8QmFzZS0wLTEzMTNfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTEzMTNfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTMxNF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMzE0X0hhc0RhdGE+DQo8QmFzZS0wLTEzMTRfRGF0YSBpZD0icmVmLTEzMTciPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE16SXdQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTMxNF9EYXRhPg0KPEJhc2UtMC0xMzE0X0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMzE0X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEzMTVfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTMxNV9IYXNEYXRhPg0KPEJhc2UtMC0xMzE1X0RhdGEgaWQ9InJlZi0xMzE4Ij5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNekl4UEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTEzMTVfRGF0YT4NCjxCYXNlLTAtMTMxNV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTMxNV9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMzE2X0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTEzMTZfSGFzRGF0YT4NCjxCYXNlLTAtMTMxNl9EYXRhIGlkPSJyZWYtMTMxOSI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TXpJeVBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMzE2X0RhdGE+DQo8QmFzZS0wLTEzMTZfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTEzMTZfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTMxN19IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMzE3X0hhc0RhdGE+DQo8QmFzZS0wLTEzMTdfRGF0YSBpZD0icmVmLTEzMjAiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE16SXpQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTMxN19EYXRhPg0KPEJhc2UtMC0xMzE3X0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMzE3X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEzMThfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTMxOF9IYXNEYXRhPg0KPEJhc2UtMC0xMzE4X0RhdGEgaWQ9InJlZi0xMzIxIj5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNekkwUEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTEzMThfRGF0YT4NCjxCYXNlLTAtMTMxOF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTMxOF9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMzE5X0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTEzMTlfSGFzRGF0YT4NCjxCYXNlLTAtMTMxOV9EYXRhIGlkPSJyZWYtMTMyMiI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TXpJMVBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMzE5X0RhdGE+DQo8QmFzZS0wLTEzMTlfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTEzMTlfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTMyMF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMzIwX0hhc0RhdGE+DQo8QmFzZS0wLTEzMjBfRGF0YSBpZD0icmVmLTEzMjMiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE16STJQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTMyMF9EYXRhPg0KPEJhc2UtMC0xMzIwX0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMzIwX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEzMjFfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTMyMV9IYXNEYXRhPg0KPEJhc2UtMC0xMzIxX0RhdGEgaWQ9InJlZi0xMzI0Ij5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNekkzUEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTEzMjFfRGF0YT4NCjxCYXNlLTAtMTMyMV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTMyMV9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMzIyX0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTEzMjJfSGFzRGF0YT4NCjxCYXNlLTAtMTMyMl9EYXRhIGlkPSJyZWYtMTMyNSI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TXpJNFBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMzIyX0RhdGE+DQo8QmFzZS0wLTEzMjJfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTEzMjJfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTMyM19IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMzIzX0hhc0RhdGE+DQo8QmFzZS0wLTEzMjNfRGF0YSBpZD0icmVmLTEzMjYiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE16STVQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTMyM19EYXRhPg0KPEJhc2UtMC0xMzIzX0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMzIzX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEzMjRfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTMyNF9IYXNEYXRhPg0KPEJhc2UtMC0xMzI0X0RhdGEgaWQ9InJlZi0xMzI3Ij5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNek13UEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTEzMjRfRGF0YT4NCjxCYXNlLTAtMTMyNF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTMyNF9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMzI1X0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTEzMjVfSGFzRGF0YT4NCjxCYXNlLTAtMTMyNV9EYXRhIGlkPSJyZWYtMTMyOCI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TXpNeFBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMzI1X0RhdGE+DQo8QmFzZS0wLTEzMjVfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTEzMjVfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTMyNl9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMzI2X0hhc0RhdGE+DQo8QmFzZS0wLTEzMjZfRGF0YSBpZD0icmVmLTEzMjkiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE16TXlQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTMyNl9EYXRhPg0KPEJhc2UtMC0xMzI2X0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMzI2X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEzMjdfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTMyN19IYXNEYXRhPg0KPEJhc2UtMC0xMzI3X0RhdGEgaWQ9InJlZi0xMzMwIj5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNek16UEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTEzMjdfRGF0YT4NCjxCYXNlLTAtMTMyN19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTMyN19IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMzI4X0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTEzMjhfSGFzRGF0YT4NCjxCYXNlLTAtMTMyOF9EYXRhIGlkPSJyZWYtMTMzMSI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TXpNMFBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMzI4X0RhdGE+DQo8QmFzZS0wLTEzMjhfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTEzMjhfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTMyOV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMzI5X0hhc0RhdGE+DQo8QmFzZS0wLTEzMjlfRGF0YSBpZD0icmVmLTEzMzIiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE16TTFQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTMyOV9EYXRhPg0KPEJhc2UtMC0xMzI5X0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMzI5X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEzMzBfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTMzMF9IYXNEYXRhPg0KPEJhc2UtMC0xMzMwX0RhdGEgaWQ9InJlZi0xMzMzIj5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNek0yUEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTEzMzBfRGF0YT4NCjxCYXNlLTAtMTMzMF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTMzMF9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMzMxX0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTEzMzFfSGFzRGF0YT4NCjxCYXNlLTAtMTMzMV9EYXRhIGlkPSJyZWYtMTMzNCI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TXpNM1BDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMzMxX0RhdGE+DQo8QmFzZS0wLTEzMzFfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTEzMzFfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTMzMl9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMzMyX0hhc0RhdGE+DQo8QmFzZS0wLTEzMzJfRGF0YSBpZD0icmVmLTEzMzUiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE16TTRQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTMzMl9EYXRhPg0KPEJhc2UtMC0xMzMyX0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMzMyX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEzMzNfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTMzM19IYXNEYXRhPg0KPEJhc2UtMC0xMzMzX0RhdGEgaWQ9InJlZi0xMzM2Ij5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNek01UEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTEzMzNfRGF0YT4NCjxCYXNlLTAtMTMzM19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTMzM19IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMzM0X0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTEzMzRfSGFzRGF0YT4NCjxCYXNlLTAtMTMzNF9EYXRhIGlkPSJyZWYtMTMzNyI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TXpRd1BDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMzM0X0RhdGE+DQo8QmFzZS0wLTEzMzRfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTEzMzRfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTMzNV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMzM1X0hhc0RhdGE+DQo8QmFzZS0wLTEzMzVfRGF0YSBpZD0icmVmLTEzMzgiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE16UXhQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTMzNV9EYXRhPg0KPEJhc2UtMC0xMzM1X0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMzM1X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEzMzZfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTMzNl9IYXNEYXRhPg0KPEJhc2UtMC0xMzM2X0RhdGEgaWQ9InJlZi0xMzM5Ij5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNelF5UEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTEzMzZfRGF0YT4NCjxCYXNlLTAtMTMzNl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTMzNl9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMzM3X0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTEzMzdfSGFzRGF0YT4NCjxCYXNlLTAtMTMzN19EYXRhIGlkPSJyZWYtMTM0MCI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TXpRelBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMzM3X0RhdGE+DQo8QmFzZS0wLTEzMzdfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTEzMzdfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTMzOF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMzM4X0hhc0RhdGE+DQo8QmFzZS0wLTEzMzhfRGF0YSBpZD0icmVmLTEzNDEiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE16UTBQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTMzOF9EYXRhPg0KPEJhc2UtMC0xMzM4X0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMzM4X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEzMzlfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTMzOV9IYXNEYXRhPg0KPEJhc2UtMC0xMzM5X0RhdGEgaWQ9InJlZi0xMzQyIj5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNelExUEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTEzMzlfRGF0YT4NCjxCYXNlLTAtMTMzOV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTMzOV9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMzQwX0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTEzNDBfSGFzRGF0YT4NCjxCYXNlLTAtMTM0MF9EYXRhIGlkPSJyZWYtMTM0MyI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TXpRMlBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMzQwX0RhdGE+DQo8QmFzZS0wLTEzNDBfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTEzNDBfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTM0MV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMzQxX0hhc0RhdGE+DQo8QmFzZS0wLTEzNDFfRGF0YSBpZD0icmVmLTEzNDQiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE16UTNQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTM0MV9EYXRhPg0KPEJhc2UtMC0xMzQxX0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMzQxX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEzNDJfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTM0Ml9IYXNEYXRhPg0KPEJhc2UtMC0xMzQyX0RhdGEgaWQ9InJlZi0xMzQ1Ij5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNelE0UEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTEzNDJfRGF0YT4NCjxCYXNlLTAtMTM0Ml9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTM0Ml9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMzQzX0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTEzNDNfSGFzRGF0YT4NCjxCYXNlLTAtMTM0M19EYXRhIGlkPSJyZWYtMTM0NiI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TXpRNVBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMzQzX0RhdGE+DQo8QmFzZS0wLTEzNDNfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTEzNDNfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTM0NF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMzQ0X0hhc0RhdGE+DQo8QmFzZS0wLTEzNDRfRGF0YSBpZD0icmVmLTEzNDciPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE16VXdQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTM0NF9EYXRhPg0KPEJhc2UtMC0xMzQ0X0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMzQ0X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEzNDVfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTM0NV9IYXNEYXRhPg0KPEJhc2UtMC0xMzQ1X0RhdGEgaWQ9InJlZi0xMzQ4Ij5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNelV4UEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTEzNDVfRGF0YT4NCjxCYXNlLTAtMTM0NV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTM0NV9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMzQ2X0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTEzNDZfSGFzRGF0YT4NCjxCYXNlLTAtMTM0Nl9EYXRhIGlkPSJyZWYtMTM0OSI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TXpVeVBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMzQ2X0RhdGE+DQo8QmFzZS0wLTEzNDZfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTEzNDZfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTM0N19IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMzQ3X0hhc0RhdGE+DQo8QmFzZS0wLTEzNDdfRGF0YSBpZD0icmVmLTEzNTAiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE16VXpQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTM0N19EYXRhPg0KPEJhc2UtMC0xMzQ3X0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMzQ3X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEzNDhfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTM0OF9IYXNEYXRhPg0KPEJhc2UtMC0xMzQ4X0RhdGEgaWQ9InJlZi0xMzUxIj5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNelUwUEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTEzNDhfRGF0YT4NCjxCYXNlLTAtMTM0OF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTM0OF9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMzQ5X0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTEzNDlfSGFzRGF0YT4NCjxCYXNlLTAtMTM0OV9EYXRhIGlkPSJyZWYtMTM1MiI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TXpVMVBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMzQ5X0RhdGE+DQo8QmFzZS0wLTEzNDlfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTEzNDlfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTM1MF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMzUwX0hhc0RhdGE+DQo8QmFzZS0wLTEzNTBfRGF0YSBpZD0icmVmLTEzNTMiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE16VTJQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTM1MF9EYXRhPg0KPEJhc2UtMC0xMzUwX0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMzUwX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEzNTFfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTM1MV9IYXNEYXRhPg0KPEJhc2UtMC0xMzUxX0RhdGEgaWQ9InJlZi0xMzU0Ij5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNelUzUEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTEzNTFfRGF0YT4NCjxCYXNlLTAtMTM1MV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTM1MV9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMzUyX0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTEzNTJfSGFzRGF0YT4NCjxCYXNlLTAtMTM1Ml9EYXRhIGlkPSJyZWYtMTM1NSI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TXpVNFBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMzUyX0RhdGE+DQo8QmFzZS0wLTEzNTJfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTEzNTJfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTM1M19IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMzUzX0hhc0RhdGE+DQo8QmFzZS0wLTEzNTNfRGF0YSBpZD0icmVmLTEzNTYiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE16VTVQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTM1M19EYXRhPg0KPEJhc2UtMC0xMzUzX0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMzUzX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEzNTRfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTM1NF9IYXNEYXRhPg0KPEJhc2UtMC0xMzU0X0RhdGEgaWQ9InJlZi0xMzU3Ij5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNell3UEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTEzNTRfRGF0YT4NCjxCYXNlLTAtMTM1NF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTM1NF9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMzU1X0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTEzNTVfSGFzRGF0YT4NCjxCYXNlLTAtMTM1NV9EYXRhIGlkPSJyZWYtMTM1OCI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TXpZeFBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMzU1X0RhdGE+DQo8QmFzZS0wLTEzNTVfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTEzNTVfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTM1Nl9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMzU2X0hhc0RhdGE+DQo8QmFzZS0wLTEzNTZfRGF0YSBpZD0icmVmLTEzNTkiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE16WXlQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTM1Nl9EYXRhPg0KPEJhc2UtMC0xMzU2X0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMzU2X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEzNTdfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTM1N19IYXNEYXRhPg0KPEJhc2UtMC0xMzU3X0RhdGEgaWQ9InJlZi0xMzYwIj5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNell6UEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTEzNTdfRGF0YT4NCjxCYXNlLTAtMTM1N19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTM1N19IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMzU4X0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTEzNThfSGFzRGF0YT4NCjxCYXNlLTAtMTM1OF9EYXRhIGlkPSJyZWYtMTM2MSI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TXpZMFBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMzU4X0RhdGE+DQo8QmFzZS0wLTEzNThfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTEzNThfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTM1OV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMzU5X0hhc0RhdGE+DQo8QmFzZS0wLTEzNTlfRGF0YSBpZD0icmVmLTEzNjIiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE16WTFQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTM1OV9EYXRhPg0KPEJhc2UtMC0xMzU5X0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMzU5X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEzNjBfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTM2MF9IYXNEYXRhPg0KPEJhc2UtMC0xMzYwX0RhdGEgaWQ9InJlZi0xMzYzIj5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNelkyUEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTEzNjBfRGF0YT4NCjxCYXNlLTAtMTM2MF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTM2MF9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMzYxX0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTEzNjFfSGFzRGF0YT4NCjxCYXNlLTAtMTM2MV9EYXRhIGlkPSJyZWYtMTM2NCI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TXpZM1BDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMzYxX0RhdGE+DQo8QmFzZS0wLTEzNjFfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTEzNjFfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTM2Ml9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMzYyX0hhc0RhdGE+DQo8QmFzZS0wLTEzNjJfRGF0YSBpZD0icmVmLTEzNjUiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE16WTRQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTM2Ml9EYXRhPg0KPEJhc2UtMC0xMzYyX0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMzYyX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEzNjNfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTM2M19IYXNEYXRhPg0KPEJhc2UtMC0xMzYzX0RhdGEgaWQ9InJlZi0xMzY2Ij5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNelk1UEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTEzNjNfRGF0YT4NCjxCYXNlLTAtMTM2M19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTM2M19IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMzY0X0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTEzNjRfSGFzRGF0YT4NCjxCYXNlLTAtMTM2NF9EYXRhIGlkPSJyZWYtMTM2NyI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TXpjd1BDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMzY0X0RhdGE+DQo8QmFzZS0wLTEzNjRfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTEzNjRfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTM2NV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMzY1X0hhc0RhdGE+DQo8QmFzZS0wLTEzNjVfRGF0YSBpZD0icmVmLTEzNjgiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE16Y3hQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTM2NV9EYXRhPg0KPEJhc2UtMC0xMzY1X0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMzY1X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEzNjZfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTM2Nl9IYXNEYXRhPg0KPEJhc2UtMC0xMzY2X0RhdGEgaWQ9InJlZi0xMzY5Ij5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNemN5UEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTEzNjZfRGF0YT4NCjxCYXNlLTAtMTM2Nl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTM2Nl9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMzY3X0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTEzNjdfSGFzRGF0YT4NCjxCYXNlLTAtMTM2N19EYXRhIGlkPSJyZWYtMTM3MCI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TXpjelBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMzY3X0RhdGE+DQo8QmFzZS0wLTEzNjdfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTEzNjdfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTM2OF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMzY4X0hhc0RhdGE+DQo8QmFzZS0wLTEzNjhfRGF0YSBpZD0icmVmLTEzNzEiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE16YzBQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTM2OF9EYXRhPg0KPEJhc2UtMC0xMzY4X0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMzY4X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEzNjlfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTM2OV9IYXNEYXRhPg0KPEJhc2UtMC0xMzY5X0RhdGEgaWQ9InJlZi0xMzcyIj5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNemMxUEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTEzNjlfRGF0YT4NCjxCYXNlLTAtMTM2OV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTM2OV9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMzcwX0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTEzNzBfSGFzRGF0YT4NCjxCYXNlLTAtMTM3MF9EYXRhIGlkPSJyZWYtMTM3MyI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TXpjMlBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMzcwX0RhdGE+DQo8QmFzZS0wLTEzNzBfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTEzNzBfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTM3MV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMzcxX0hhc0RhdGE+DQo8QmFzZS0wLTEzNzFfRGF0YSBpZD0icmVmLTEzNzQiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE16YzNQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTM3MV9EYXRhPg0KPEJhc2UtMC0xMzcxX0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMzcxX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEzNzJfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTM3Ml9IYXNEYXRhPg0KPEJhc2UtMC0xMzcyX0RhdGEgaWQ9InJlZi0xMzc1Ij5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNemM0UEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTEzNzJfRGF0YT4NCjxCYXNlLTAtMTM3Ml9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTM3Ml9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMzczX0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTEzNzNfSGFzRGF0YT4NCjxCYXNlLTAtMTM3M19EYXRhIGlkPSJyZWYtMTM3NiI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TXpjNVBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMzczX0RhdGE+DQo8QmFzZS0wLTEzNzNfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTEzNzNfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTM3NF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMzc0X0hhc0RhdGE+DQo8QmFzZS0wLTEzNzRfRGF0YSBpZD0icmVmLTEzNzciPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE16Z3dQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTM3NF9EYXRhPg0KPEJhc2UtMC0xMzc0X0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMzc0X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEzNzVfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTM3NV9IYXNEYXRhPg0KPEJhc2UtMC0xMzc1X0RhdGEgaWQ9InJlZi0xMzc4Ij5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNemd4UEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTEzNzVfRGF0YT4NCjxCYXNlLTAtMTM3NV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTM3NV9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMzc2X0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTEzNzZfSGFzRGF0YT4NCjxCYXNlLTAtMTM3Nl9EYXRhIGlkPSJyZWYtMTM3OSI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TXpneVBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMzc2X0RhdGE+DQo8QmFzZS0wLTEzNzZfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTEzNzZfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTM3N19IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMzc3X0hhc0RhdGE+DQo8QmFzZS0wLTEzNzdfRGF0YSBpZD0icmVmLTEzODAiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE16Z3pQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTM3N19EYXRhPg0KPEJhc2UtMC0xMzc3X0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMzc3X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEzNzhfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTM3OF9IYXNEYXRhPg0KPEJhc2UtMC0xMzc4X0RhdGEgaWQ9InJlZi0xMzgxIj5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNemcwUEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTEzNzhfRGF0YT4NCjxCYXNlLTAtMTM3OF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTM3OF9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMzc5X0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTEzNzlfSGFzRGF0YT4NCjxCYXNlLTAtMTM3OV9EYXRhIGlkPSJyZWYtMTM4MiI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TXpnMVBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMzc5X0RhdGE+DQo8QmFzZS0wLTEzNzlfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTEzNzlfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTM4MF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMzgwX0hhc0RhdGE+DQo8QmFzZS0wLTEzODBfRGF0YSBpZD0icmVmLTEzODMiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE16ZzJQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTM4MF9EYXRhPg0KPEJhc2UtMC0xMzgwX0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMzgwX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEzODFfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTM4MV9IYXNEYXRhPg0KPEJhc2UtMC0xMzgxX0RhdGEgaWQ9InJlZi0xMzg0Ij5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNemczUEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTEzODFfRGF0YT4NCjxCYXNlLTAtMTM4MV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTM4MV9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMzgyX0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTEzODJfSGFzRGF0YT4NCjxCYXNlLTAtMTM4Ml9EYXRhIGlkPSJyZWYtMTM4NSI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TXpnNFBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMzgyX0RhdGE+DQo8QmFzZS0wLTEzODJfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTEzODJfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTM4M19IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMzgzX0hhc0RhdGE+DQo8QmFzZS0wLTEzODNfRGF0YSBpZD0icmVmLTEzODYiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE16ZzVQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTM4M19EYXRhPg0KPEJhc2UtMC0xMzgzX0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMzgzX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEzODRfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTM4NF9IYXNEYXRhPg0KPEJhc2UtMC0xMzg0X0RhdGEgaWQ9InJlZi0xMzg3Ij5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNemt3UEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTEzODRfRGF0YT4NCjxCYXNlLTAtMTM4NF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTM4NF9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMzg1X0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTEzODVfSGFzRGF0YT4NCjxCYXNlLTAtMTM4NV9EYXRhIGlkPSJyZWYtMTM4OCI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TXpreFBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMzg1X0RhdGE+DQo8QmFzZS0wLTEzODVfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTEzODVfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTM4Nl9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMzg2X0hhc0RhdGE+DQo8QmFzZS0wLTEzODZfRGF0YSBpZD0icmVmLTEzODkiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE16a3lQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTM4Nl9EYXRhPg0KPEJhc2UtMC0xMzg2X0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMzg2X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEzODdfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTM4N19IYXNEYXRhPg0KPEJhc2UtMC0xMzg3X0RhdGEgaWQ9InJlZi0xMzkwIj5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNemt6UEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTEzODdfRGF0YT4NCjxCYXNlLTAtMTM4N19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTM4N19IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMzg4X0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTEzODhfSGFzRGF0YT4NCjxCYXNlLTAtMTM4OF9EYXRhIGlkPSJyZWYtMTM5MSI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TXprMFBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMzg4X0RhdGE+DQo8QmFzZS0wLTEzODhfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTEzODhfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTM4OV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMzg5X0hhc0RhdGE+DQo8QmFzZS0wLTEzODlfRGF0YSBpZD0icmVmLTEzOTIiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE16azFQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTM4OV9EYXRhPg0KPEJhc2UtMC0xMzg5X0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMzg5X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEzOTBfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTM5MF9IYXNEYXRhPg0KPEJhc2UtMC0xMzkwX0RhdGEgaWQ9InJlZi0xMzkzIj5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNemsyUEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTEzOTBfRGF0YT4NCjxCYXNlLTAtMTM5MF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTM5MF9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMzkxX0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTEzOTFfSGFzRGF0YT4NCjxCYXNlLTAtMTM5MV9EYXRhIGlkPSJyZWYtMTM5NCI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TXprM1BDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMzkxX0RhdGE+DQo8QmFzZS0wLTEzOTFfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTEzOTFfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTM5Ml9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMzkyX0hhc0RhdGE+DQo8QmFzZS0wLTEzOTJfRGF0YSBpZD0icmVmLTEzOTUiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE16azRQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTM5Ml9EYXRhPg0KPEJhc2UtMC0xMzkyX0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMzkyX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEzOTNfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTM5M19IYXNEYXRhPg0KPEJhc2UtMC0xMzkzX0RhdGEgaWQ9InJlZi0xMzk2Ij5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhNems1UEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTEzOTNfRGF0YT4NCjxCYXNlLTAtMTM5M19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTM5M19IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMzk0X0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTEzOTRfSGFzRGF0YT4NCjxCYXNlLTAtMTM5NF9EYXRhIGlkPSJyZWYtMTM5NyI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TkRBd1BDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMzk0X0RhdGE+DQo8QmFzZS0wLTEzOTRfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTEzOTRfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTM5NV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMzk1X0hhc0RhdGE+DQo8QmFzZS0wLTEzOTVfRGF0YSBpZD0icmVmLTEzOTgiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE5EQXhQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTM5NV9EYXRhPg0KPEJhc2UtMC0xMzk1X0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMzk1X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEzOTZfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTM5Nl9IYXNEYXRhPg0KPEJhc2UtMC0xMzk2X0RhdGEgaWQ9InJlZi0xMzk5Ij5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhOREF5UEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTEzOTZfRGF0YT4NCjxCYXNlLTAtMTM5Nl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTM5Nl9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xMzk3X0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTEzOTdfSGFzRGF0YT4NCjxCYXNlLTAtMTM5N19EYXRhIGlkPSJyZWYtMTQwMCI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TkRBelBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xMzk3X0RhdGE+DQo8QmFzZS0wLTEzOTdfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTEzOTdfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTM5OF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xMzk4X0hhc0RhdGE+DQo8QmFzZS0wLTEzOThfRGF0YSBpZD0icmVmLTE0MDEiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE5EQTBQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTM5OF9EYXRhPg0KPEJhc2UtMC0xMzk4X0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xMzk4X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTEzOTlfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTM5OV9IYXNEYXRhPg0KPEJhc2UtMC0xMzk5X0RhdGEgaWQ9InJlZi0xNDAyIj5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhOREExUEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTEzOTlfRGF0YT4NCjxCYXNlLTAtMTM5OV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTM5OV9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xNDAwX0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTE0MDBfSGFzRGF0YT4NCjxCYXNlLTAtMTQwMF9EYXRhIGlkPSJyZWYtMTQwMyI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TkRBMlBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xNDAwX0RhdGE+DQo8QmFzZS0wLTE0MDBfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTE0MDBfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTQwMV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xNDAxX0hhc0RhdGE+DQo8QmFzZS0wLTE0MDFfRGF0YSBpZD0icmVmLTE0MDQiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE5EQTNQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTQwMV9EYXRhPg0KPEJhc2UtMC0xNDAxX0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xNDAxX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTE0MDJfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTQwMl9IYXNEYXRhPg0KPEJhc2UtMC0xNDAyX0RhdGEgaWQ9InJlZi0xNDA1Ij5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhOREE0UEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTE0MDJfRGF0YT4NCjxCYXNlLTAtMTQwMl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTQwMl9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xNDAzX0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTE0MDNfSGFzRGF0YT4NCjxCYXNlLTAtMTQwM19EYXRhIGlkPSJyZWYtMTQwNiI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TkRBNVBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xNDAzX0RhdGE+DQo8QmFzZS0wLTE0MDNfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTE0MDNfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTQwNF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xNDA0X0hhc0RhdGE+DQo8QmFzZS0wLTE0MDRfRGF0YSBpZD0icmVmLTE0MDciPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE5ERXdQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTQwNF9EYXRhPg0KPEJhc2UtMC0xNDA0X0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xNDA0X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTE0MDVfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTQwNV9IYXNEYXRhPg0KPEJhc2UtMC0xNDA1X0RhdGEgaWQ9InJlZi0xNDA4Ij5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhOREV4UEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTE0MDVfRGF0YT4NCjxCYXNlLTAtMTQwNV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTQwNV9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xNDA2X0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTE0MDZfSGFzRGF0YT4NCjxCYXNlLTAtMTQwNl9EYXRhIGlkPSJyZWYtMTQwOSI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TkRFeVBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xNDA2X0RhdGE+DQo8QmFzZS0wLTE0MDZfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTE0MDZfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTQwN19IYXNEYXRhPnRydWU8L0Jhc2UtMC0xNDA3X0hhc0RhdGE+DQo8QmFzZS0wLTE0MDdfRGF0YSBpZD0icmVmLTE0MTAiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE5ERXpQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTQwN19EYXRhPg0KPEJhc2UtMC0xNDA3X0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xNDA3X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTE0MDhfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTQwOF9IYXNEYXRhPg0KPEJhc2UtMC0xNDA4X0RhdGEgaWQ9InJlZi0xNDExIj5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhOREUwUEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTE0MDhfRGF0YT4NCjxCYXNlLTAtMTQwOF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTQwOF9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xNDA5X0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTE0MDlfSGFzRGF0YT4NCjxCYXNlLTAtMTQwOV9EYXRhIGlkPSJyZWYtMTQxMiI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TkRFMVBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xNDA5X0RhdGE+DQo8QmFzZS0wLTE0MDlfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTE0MDlfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTQxMF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xNDEwX0hhc0RhdGE+DQo8QmFzZS0wLTE0MTBfRGF0YSBpZD0icmVmLTE0MTMiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE5ERTJQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTQxMF9EYXRhPg0KPEJhc2UtMC0xNDEwX0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xNDEwX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTE0MTFfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTQxMV9IYXNEYXRhPg0KPEJhc2UtMC0xNDExX0RhdGEgaWQ9InJlZi0xNDE0Ij5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhOREUzUEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTE0MTFfRGF0YT4NCjxCYXNlLTAtMTQxMV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTQxMV9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xNDEyX0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTE0MTJfSGFzRGF0YT4NCjxCYXNlLTAtMTQxMl9EYXRhIGlkPSJyZWYtMTQxNSI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TkRFNFBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xNDEyX0RhdGE+DQo8QmFzZS0wLTE0MTJfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTE0MTJfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTQxM19IYXNEYXRhPnRydWU8L0Jhc2UtMC0xNDEzX0hhc0RhdGE+DQo8QmFzZS0wLTE0MTNfRGF0YSBpZD0icmVmLTE0MTYiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE5ERTVQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTQxM19EYXRhPg0KPEJhc2UtMC0xNDEzX0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xNDEzX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTE0MTRfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTQxNF9IYXNEYXRhPg0KPEJhc2UtMC0xNDE0X0RhdGEgaWQ9InJlZi0xNDE3Ij5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhOREl3UEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTE0MTRfRGF0YT4NCjxCYXNlLTAtMTQxNF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTQxNF9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xNDE1X0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTE0MTVfSGFzRGF0YT4NCjxCYXNlLTAtMTQxNV9EYXRhIGlkPSJyZWYtMTQxOCI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TkRJeFBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xNDE1X0RhdGE+DQo8QmFzZS0wLTE0MTVfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTE0MTVfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTQxNl9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xNDE2X0hhc0RhdGE+DQo8QmFzZS0wLTE0MTZfRGF0YSBpZD0icmVmLTE0MTkiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE5ESXlQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTQxNl9EYXRhPg0KPEJhc2UtMC0xNDE2X0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xNDE2X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTE0MTdfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTQxN19IYXNEYXRhPg0KPEJhc2UtMC0xNDE3X0RhdGEgaWQ9InJlZi0xNDIwIj5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhOREl6UEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTE0MTdfRGF0YT4NCjxCYXNlLTAtMTQxN19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTQxN19IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xNDE4X0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTE0MThfSGFzRGF0YT4NCjxCYXNlLTAtMTQxOF9EYXRhIGlkPSJyZWYtMTQyMSI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TkRJMFBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xNDE4X0RhdGE+DQo8QmFzZS0wLTE0MThfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTE0MThfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTQxOV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xNDE5X0hhc0RhdGE+DQo8QmFzZS0wLTE0MTlfRGF0YSBpZD0icmVmLTE0MjIiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE5ESTFQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTQxOV9EYXRhPg0KPEJhc2UtMC0xNDE5X0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xNDE5X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTE0MjBfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTQyMF9IYXNEYXRhPg0KPEJhc2UtMC0xNDIwX0RhdGEgaWQ9InJlZi0xNDIzIj5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhOREkyUEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTE0MjBfRGF0YT4NCjxCYXNlLTAtMTQyMF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTQyMF9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xNDIxX0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTE0MjFfSGFzRGF0YT4NCjxCYXNlLTAtMTQyMV9EYXRhIGlkPSJyZWYtMTQyNCI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TkRJM1BDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xNDIxX0RhdGE+DQo8QmFzZS0wLTE0MjFfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTE0MjFfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTQyMl9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xNDIyX0hhc0RhdGE+DQo8QmFzZS0wLTE0MjJfRGF0YSBpZD0icmVmLTE0MjUiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE5ESTRQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTQyMl9EYXRhPg0KPEJhc2UtMC0xNDIyX0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xNDIyX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTE0MjNfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTQyM19IYXNEYXRhPg0KPEJhc2UtMC0xNDIzX0RhdGEgaWQ9InJlZi0xNDI2Ij5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhOREk1UEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTE0MjNfRGF0YT4NCjxCYXNlLTAtMTQyM19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTQyM19IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xNDI0X0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTE0MjRfSGFzRGF0YT4NCjxCYXNlLTAtMTQyNF9EYXRhIGlkPSJyZWYtMTQyNyI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TkRNd1BDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xNDI0X0RhdGE+DQo8QmFzZS0wLTE0MjRfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTE0MjRfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTQyNV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xNDI1X0hhc0RhdGE+DQo8QmFzZS0wLTE0MjVfRGF0YSBpZD0icmVmLTE0MjgiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE5ETXhQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTQyNV9EYXRhPg0KPEJhc2UtMC0xNDI1X0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xNDI1X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTE0MjZfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTQyNl9IYXNEYXRhPg0KPEJhc2UtMC0xNDI2X0RhdGEgaWQ9InJlZi0xNDI5Ij5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhORE15UEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTE0MjZfRGF0YT4NCjxCYXNlLTAtMTQyNl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTQyNl9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xNDI3X0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTE0MjdfSGFzRGF0YT4NCjxCYXNlLTAtMTQyN19EYXRhIGlkPSJyZWYtMTQzMCI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TkRNelBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xNDI3X0RhdGE+DQo8QmFzZS0wLTE0MjdfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTE0MjdfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTQyOF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xNDI4X0hhc0RhdGE+DQo8QmFzZS0wLTE0MjhfRGF0YSBpZD0icmVmLTE0MzEiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE5ETTBQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTQyOF9EYXRhPg0KPEJhc2UtMC0xNDI4X0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xNDI4X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTE0MjlfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTQyOV9IYXNEYXRhPg0KPEJhc2UtMC0xNDI5X0RhdGEgaWQ9InJlZi0xNDMyIj5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhORE0xUEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTE0MjlfRGF0YT4NCjxCYXNlLTAtMTQyOV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTQyOV9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xNDMwX0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTE0MzBfSGFzRGF0YT4NCjxCYXNlLTAtMTQzMF9EYXRhIGlkPSJyZWYtMTQzMyI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TkRNMlBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xNDMwX0RhdGE+DQo8QmFzZS0wLTE0MzBfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTE0MzBfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTQzMV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xNDMxX0hhc0RhdGE+DQo8QmFzZS0wLTE0MzFfRGF0YSBpZD0icmVmLTE0MzQiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE5ETTNQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTQzMV9EYXRhPg0KPEJhc2UtMC0xNDMxX0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xNDMxX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTE0MzJfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTQzMl9IYXNEYXRhPg0KPEJhc2UtMC0xNDMyX0RhdGEgaWQ9InJlZi0xNDM1Ij5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhORE00UEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTE0MzJfRGF0YT4NCjxCYXNlLTAtMTQzMl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTQzMl9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xNDMzX0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTE0MzNfSGFzRGF0YT4NCjxCYXNlLTAtMTQzM19EYXRhIGlkPSJyZWYtMTQzNiI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TkRNNVBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xNDMzX0RhdGE+DQo8QmFzZS0wLTE0MzNfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTE0MzNfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTQzNF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xNDM0X0hhc0RhdGE+DQo8QmFzZS0wLTE0MzRfRGF0YSBpZD0icmVmLTE0MzciPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE5EUXdQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTQzNF9EYXRhPg0KPEJhc2UtMC0xNDM0X0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xNDM0X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTE0MzVfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTQzNV9IYXNEYXRhPg0KPEJhc2UtMC0xNDM1X0RhdGEgaWQ9InJlZi0xNDM4Ij5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhORFF4UEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTE0MzVfRGF0YT4NCjxCYXNlLTAtMTQzNV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTQzNV9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xNDM2X0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTE0MzZfSGFzRGF0YT4NCjxCYXNlLTAtMTQzNl9EYXRhIGlkPSJyZWYtMTQzOSI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TkRReVBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xNDM2X0RhdGE+DQo8QmFzZS0wLTE0MzZfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTE0MzZfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTQzN19IYXNEYXRhPnRydWU8L0Jhc2UtMC0xNDM3X0hhc0RhdGE+DQo8QmFzZS0wLTE0MzdfRGF0YSBpZD0icmVmLTE0NDAiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE5EUXpQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTQzN19EYXRhPg0KPEJhc2UtMC0xNDM3X0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xNDM3X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTE0MzhfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTQzOF9IYXNEYXRhPg0KPEJhc2UtMC0xNDM4X0RhdGEgaWQ9InJlZi0xNDQxIj5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhORFEwUEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTE0MzhfRGF0YT4NCjxCYXNlLTAtMTQzOF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTQzOF9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xNDM5X0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTE0MzlfSGFzRGF0YT4NCjxCYXNlLTAtMTQzOV9EYXRhIGlkPSJyZWYtMTQ0MiI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TkRRMVBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xNDM5X0RhdGE+DQo8QmFzZS0wLTE0MzlfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTE0MzlfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTQ0MF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xNDQwX0hhc0RhdGE+DQo8QmFzZS0wLTE0NDBfRGF0YSBpZD0icmVmLTE0NDMiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE5EUTJQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTQ0MF9EYXRhPg0KPEJhc2UtMC0xNDQwX0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xNDQwX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTE0NDFfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTQ0MV9IYXNEYXRhPg0KPEJhc2UtMC0xNDQxX0RhdGEgaWQ9InJlZi0xNDQ0Ij5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhORFEzUEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTE0NDFfRGF0YT4NCjxCYXNlLTAtMTQ0MV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTQ0MV9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xNDQyX0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTE0NDJfSGFzRGF0YT4NCjxCYXNlLTAtMTQ0Ml9EYXRhIGlkPSJyZWYtMTQ0NSI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TkRRNFBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xNDQyX0RhdGE+DQo8QmFzZS0wLTE0NDJfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTE0NDJfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTQ0M19IYXNEYXRhPnRydWU8L0Jhc2UtMC0xNDQzX0hhc0RhdGE+DQo8QmFzZS0wLTE0NDNfRGF0YSBpZD0icmVmLTE0NDYiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE5EUTVQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTQ0M19EYXRhPg0KPEJhc2UtMC0xNDQzX0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xNDQzX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTE0NDRfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTQ0NF9IYXNEYXRhPg0KPEJhc2UtMC0xNDQ0X0RhdGEgaWQ9InJlZi0xNDQ3Ij5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhORFV3UEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTE0NDRfRGF0YT4NCjxCYXNlLTAtMTQ0NF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTQ0NF9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xNDQ1X0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTE0NDVfSGFzRGF0YT4NCjxCYXNlLTAtMTQ0NV9EYXRhIGlkPSJyZWYtMTQ0OCI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TkRVeFBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xNDQ1X0RhdGE+DQo8QmFzZS0wLTE0NDVfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTE0NDVfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTQ0Nl9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xNDQ2X0hhc0RhdGE+DQo8QmFzZS0wLTE0NDZfRGF0YSBpZD0icmVmLTE0NDkiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE5EVXlQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTQ0Nl9EYXRhPg0KPEJhc2UtMC0xNDQ2X0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xNDQ2X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTE0NDdfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTQ0N19IYXNEYXRhPg0KPEJhc2UtMC0xNDQ3X0RhdGEgaWQ9InJlZi0xNDUwIj5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhORFV6UEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTE0NDdfRGF0YT4NCjxCYXNlLTAtMTQ0N19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTQ0N19IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xNDQ4X0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTE0NDhfSGFzRGF0YT4NCjxCYXNlLTAtMTQ0OF9EYXRhIGlkPSJyZWYtMTQ1MSI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TkRVMFBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xNDQ4X0RhdGE+DQo8QmFzZS0wLTE0NDhfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTE0NDhfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTQ0OV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xNDQ5X0hhc0RhdGE+DQo8QmFzZS0wLTE0NDlfRGF0YSBpZD0icmVmLTE0NTIiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE5EVTFQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTQ0OV9EYXRhPg0KPEJhc2UtMC0xNDQ5X0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xNDQ5X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTE0NTBfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTQ1MF9IYXNEYXRhPg0KPEJhc2UtMC0xNDUwX0RhdGEgaWQ9InJlZi0xNDUzIj5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhORFUyUEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTE0NTBfRGF0YT4NCjxCYXNlLTAtMTQ1MF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTQ1MF9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xNDUxX0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTE0NTFfSGFzRGF0YT4NCjxCYXNlLTAtMTQ1MV9EYXRhIGlkPSJyZWYtMTQ1NCI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TkRVM1BDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xNDUxX0RhdGE+DQo8QmFzZS0wLTE0NTFfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTE0NTFfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTQ1Ml9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xNDUyX0hhc0RhdGE+DQo8QmFzZS0wLTE0NTJfRGF0YSBpZD0icmVmLTE0NTUiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE5EVTRQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTQ1Ml9EYXRhPg0KPEJhc2UtMC0xNDUyX0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xNDUyX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTE0NTNfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTQ1M19IYXNEYXRhPg0KPEJhc2UtMC0xNDUzX0RhdGEgaWQ9InJlZi0xNDU2Ij5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhORFU1UEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTE0NTNfRGF0YT4NCjxCYXNlLTAtMTQ1M19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTQ1M19IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xNDU0X0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTE0NTRfSGFzRGF0YT4NCjxCYXNlLTAtMTQ1NF9EYXRhIGlkPSJyZWYtMTQ1NyI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TkRZd1BDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xNDU0X0RhdGE+DQo8QmFzZS0wLTE0NTRfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTE0NTRfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTQ1NV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xNDU1X0hhc0RhdGE+DQo8QmFzZS0wLTE0NTVfRGF0YSBpZD0icmVmLTE0NTgiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE5EWXhQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTQ1NV9EYXRhPg0KPEJhc2UtMC0xNDU1X0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xNDU1X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTE0NTZfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTQ1Nl9IYXNEYXRhPg0KPEJhc2UtMC0xNDU2X0RhdGEgaWQ9InJlZi0xNDU5Ij5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhORFl5UEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTE0NTZfRGF0YT4NCjxCYXNlLTAtMTQ1Nl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTQ1Nl9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xNDU3X0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTE0NTdfSGFzRGF0YT4NCjxCYXNlLTAtMTQ1N19EYXRhIGlkPSJyZWYtMTQ2MCI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TkRZelBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xNDU3X0RhdGE+DQo8QmFzZS0wLTE0NTdfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTE0NTdfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTQ1OF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xNDU4X0hhc0RhdGE+DQo8QmFzZS0wLTE0NThfRGF0YSBpZD0icmVmLTE0NjEiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE5EWTBQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTQ1OF9EYXRhPg0KPEJhc2UtMC0xNDU4X0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xNDU4X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTE0NTlfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTQ1OV9IYXNEYXRhPg0KPEJhc2UtMC0xNDU5X0RhdGEgaWQ9InJlZi0xNDYyIj5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhORFkxUEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTE0NTlfRGF0YT4NCjxCYXNlLTAtMTQ1OV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTQ1OV9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xNDYwX0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTE0NjBfSGFzRGF0YT4NCjxCYXNlLTAtMTQ2MF9EYXRhIGlkPSJyZWYtMTQ2MyI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TkRZMlBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xNDYwX0RhdGE+DQo8QmFzZS0wLTE0NjBfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTE0NjBfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTQ2MV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xNDYxX0hhc0RhdGE+DQo8QmFzZS0wLTE0NjFfRGF0YSBpZD0icmVmLTE0NjQiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE5EWTNQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTQ2MV9EYXRhPg0KPEJhc2UtMC0xNDYxX0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xNDYxX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTE0NjJfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTQ2Ml9IYXNEYXRhPg0KPEJhc2UtMC0xNDYyX0RhdGEgaWQ9InJlZi0xNDY1Ij5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhORFk0UEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTE0NjJfRGF0YT4NCjxCYXNlLTAtMTQ2Ml9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTQ2Ml9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xNDYzX0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTE0NjNfSGFzRGF0YT4NCjxCYXNlLTAtMTQ2M19EYXRhIGlkPSJyZWYtMTQ2NiI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TkRZNVBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xNDYzX0RhdGE+DQo8QmFzZS0wLTE0NjNfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTE0NjNfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTQ2NF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xNDY0X0hhc0RhdGE+DQo8QmFzZS0wLTE0NjRfRGF0YSBpZD0icmVmLTE0NjciPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE5EY3dQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTQ2NF9EYXRhPg0KPEJhc2UtMC0xNDY0X0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xNDY0X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTE0NjVfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTQ2NV9IYXNEYXRhPg0KPEJhc2UtMC0xNDY1X0RhdGEgaWQ9InJlZi0xNDY4Ij5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhORGN4UEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTE0NjVfRGF0YT4NCjxCYXNlLTAtMTQ2NV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTQ2NV9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xNDY2X0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTE0NjZfSGFzRGF0YT4NCjxCYXNlLTAtMTQ2Nl9EYXRhIGlkPSJyZWYtMTQ2OSI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TkRjeVBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xNDY2X0RhdGE+DQo8QmFzZS0wLTE0NjZfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTE0NjZfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTQ2N19IYXNEYXRhPnRydWU8L0Jhc2UtMC0xNDY3X0hhc0RhdGE+DQo8QmFzZS0wLTE0NjdfRGF0YSBpZD0icmVmLTE0NzAiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE5EY3pQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTQ2N19EYXRhPg0KPEJhc2UtMC0xNDY3X0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xNDY3X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTE0NjhfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTQ2OF9IYXNEYXRhPg0KPEJhc2UtMC0xNDY4X0RhdGEgaWQ9InJlZi0xNDcxIj5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhORGMwUEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTE0NjhfRGF0YT4NCjxCYXNlLTAtMTQ2OF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTQ2OF9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xNDY5X0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTE0NjlfSGFzRGF0YT4NCjxCYXNlLTAtMTQ2OV9EYXRhIGlkPSJyZWYtMTQ3MiI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TkRjMVBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xNDY5X0RhdGE+DQo8QmFzZS0wLTE0NjlfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTE0NjlfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTQ3MF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xNDcwX0hhc0RhdGE+DQo8QmFzZS0wLTE0NzBfRGF0YSBpZD0icmVmLTE0NzMiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE5EYzJQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTQ3MF9EYXRhPg0KPEJhc2UtMC0xNDcwX0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xNDcwX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTE0NzFfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTQ3MV9IYXNEYXRhPg0KPEJhc2UtMC0xNDcxX0RhdGEgaWQ9InJlZi0xNDc0Ij5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhORGMzUEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTE0NzFfRGF0YT4NCjxCYXNlLTAtMTQ3MV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTQ3MV9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xNDcyX0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTE0NzJfSGFzRGF0YT4NCjxCYXNlLTAtMTQ3Ml9EYXRhIGlkPSJyZWYtMTQ3NSI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TkRjNFBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xNDcyX0RhdGE+DQo8QmFzZS0wLTE0NzJfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTE0NzJfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTQ3M19IYXNEYXRhPnRydWU8L0Jhc2UtMC0xNDczX0hhc0RhdGE+DQo8QmFzZS0wLTE0NzNfRGF0YSBpZD0icmVmLTE0NzYiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE5EYzVQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTQ3M19EYXRhPg0KPEJhc2UtMC0xNDczX0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xNDczX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTE0NzRfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTQ3NF9IYXNEYXRhPg0KPEJhc2UtMC0xNDc0X0RhdGEgaWQ9InJlZi0xNDc3Ij5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhORGd3UEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTE0NzRfRGF0YT4NCjxCYXNlLTAtMTQ3NF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTQ3NF9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xNDc1X0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTE0NzVfSGFzRGF0YT4NCjxCYXNlLTAtMTQ3NV9EYXRhIGlkPSJyZWYtMTQ3OCI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TkRneFBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xNDc1X0RhdGE+DQo8QmFzZS0wLTE0NzVfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTE0NzVfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTQ3Nl9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xNDc2X0hhc0RhdGE+DQo8QmFzZS0wLTE0NzZfRGF0YSBpZD0icmVmLTE0NzkiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE5EZ3lQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTQ3Nl9EYXRhPg0KPEJhc2UtMC0xNDc2X0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xNDc2X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTE0NzdfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTQ3N19IYXNEYXRhPg0KPEJhc2UtMC0xNDc3X0RhdGEgaWQ9InJlZi0xNDgwIj5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhORGd6UEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTE0NzdfRGF0YT4NCjxCYXNlLTAtMTQ3N19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTQ3N19IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xNDc4X0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTE0NzhfSGFzRGF0YT4NCjxCYXNlLTAtMTQ3OF9EYXRhIGlkPSJyZWYtMTQ4MSI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TkRnMFBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xNDc4X0RhdGE+DQo8QmFzZS0wLTE0NzhfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTE0NzhfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTQ3OV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xNDc5X0hhc0RhdGE+DQo8QmFzZS0wLTE0NzlfRGF0YSBpZD0icmVmLTE0ODIiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE5EZzFQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTQ3OV9EYXRhPg0KPEJhc2UtMC0xNDc5X0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xNDc5X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTE0ODBfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTQ4MF9IYXNEYXRhPg0KPEJhc2UtMC0xNDgwX0RhdGEgaWQ9InJlZi0xNDgzIj5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhORGcyUEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTE0ODBfRGF0YT4NCjxCYXNlLTAtMTQ4MF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTQ4MF9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xNDgxX0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTE0ODFfSGFzRGF0YT4NCjxCYXNlLTAtMTQ4MV9EYXRhIGlkPSJyZWYtMTQ4NCI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TkRnM1BDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xNDgxX0RhdGE+DQo8QmFzZS0wLTE0ODFfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTE0ODFfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTQ4Ml9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xNDgyX0hhc0RhdGE+DQo8QmFzZS0wLTE0ODJfRGF0YSBpZD0icmVmLTE0ODUiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE5EZzRQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTQ4Ml9EYXRhPg0KPEJhc2UtMC0xNDgyX0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xNDgyX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTE0ODNfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTQ4M19IYXNEYXRhPg0KPEJhc2UtMC0xNDgzX0RhdGEgaWQ9InJlZi0xNDg2Ij5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhORGc1UEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTE0ODNfRGF0YT4NCjxCYXNlLTAtMTQ4M19IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTQ4M19IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xNDg0X0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTE0ODRfSGFzRGF0YT4NCjxCYXNlLTAtMTQ4NF9EYXRhIGlkPSJyZWYtMTQ4NyI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TkRrd1BDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xNDg0X0RhdGE+DQo8QmFzZS0wLTE0ODRfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTE0ODRfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTQ4NV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xNDg1X0hhc0RhdGE+DQo8QmFzZS0wLTE0ODVfRGF0YSBpZD0icmVmLTE0ODgiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE5Ea3hQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTQ4NV9EYXRhPg0KPEJhc2UtMC0xNDg1X0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xNDg1X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTE0ODZfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTQ4Nl9IYXNEYXRhPg0KPEJhc2UtMC0xNDg2X0RhdGEgaWQ9InJlZi0xNDg5Ij5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhORGt5UEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTE0ODZfRGF0YT4NCjxCYXNlLTAtMTQ4Nl9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTQ4Nl9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xNDg3X0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTE0ODdfSGFzRGF0YT4NCjxCYXNlLTAtMTQ4N19EYXRhIGlkPSJyZWYtMTQ5MCI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TkRrelBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xNDg3X0RhdGE+DQo8QmFzZS0wLTE0ODdfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTE0ODdfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTQ4OF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xNDg4X0hhc0RhdGE+DQo8QmFzZS0wLTE0ODhfRGF0YSBpZD0icmVmLTE0OTEiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE5EazBQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTQ4OF9EYXRhPg0KPEJhc2UtMC0xNDg4X0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xNDg4X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTE0ODlfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTQ4OV9IYXNEYXRhPg0KPEJhc2UtMC0xNDg5X0RhdGEgaWQ9InJlZi0xNDkyIj5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhORGsxUEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTE0ODlfRGF0YT4NCjxCYXNlLTAtMTQ4OV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTQ4OV9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xNDkwX0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTE0OTBfSGFzRGF0YT4NCjxCYXNlLTAtMTQ5MF9EYXRhIGlkPSJyZWYtMTQ5MyI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TkRrMlBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xNDkwX0RhdGE+DQo8QmFzZS0wLTE0OTBfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTE0OTBfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTQ5MV9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xNDkxX0hhc0RhdGE+DQo8QmFzZS0wLTE0OTFfRGF0YSBpZD0icmVmLTE0OTQiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE5EazNQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTQ5MV9EYXRhPg0KPEJhc2UtMC0xNDkxX0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xNDkxX0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTE0OTJfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTQ5Ml9IYXNEYXRhPg0KPEJhc2UtMC0xNDkyX0RhdGEgaWQ9InJlZi0xNDk1Ij5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhORGs0UEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTE0OTJfRGF0YT4NCjxCYXNlLTAtMTQ5Ml9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTQ5Ml9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xNDkzX0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTE0OTNfSGFzRGF0YT4NCjxCYXNlLTAtMTQ5M19EYXRhIGlkPSJyZWYtMTQ5NiI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TkRrNVBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xNDkzX0RhdGE+DQo8QmFzZS0wLTE0OTNfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTE0OTNfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTQ5NF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xNDk0X0hhc0RhdGE+DQo8QmFzZS0wLTE0OTRfRGF0YSBpZD0icmVmLTE0OTciPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE5UQXdQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTQ5NF9EYXRhPg0KPEJhc2UtMC0xNDk0X0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xNDk0X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTE0OTVfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTQ5NV9IYXNEYXRhPg0KPEJhc2UtMC0xNDk1X0RhdGEgaWQ9InJlZi0xNDk4Ij5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhOVEF4UEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTE0OTVfRGF0YT4NCjxCYXNlLTAtMTQ5NV9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTQ5NV9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xNDk2X0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTE0OTZfSGFzRGF0YT4NCjxCYXNlLTAtMTQ5Nl9EYXRhIGlkPSJyZWYtMTQ5OSI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TlRBeVBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xNDk2X0RhdGE+DQo8QmFzZS0wLTE0OTZfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTE0OTZfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTQ5N19IYXNEYXRhPnRydWU8L0Jhc2UtMC0xNDk3X0hhc0RhdGE+DQo8QmFzZS0wLTE0OTdfRGF0YSBpZD0icmVmLTE1MDAiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE5UQXpQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTQ5N19EYXRhPg0KPEJhc2UtMC0xNDk3X0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xNDk3X0hhc05lc3RlZERhdGE+DQo8QmFzZS0wLTE0OThfSGFzRGF0YT50cnVlPC9CYXNlLTAtMTQ5OF9IYXNEYXRhPg0KPEJhc2UtMC0xNDk4X0RhdGEgaWQ9InJlZi0xNTAxIj5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBKUkVodmJHUmxjaUJwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMFpHU1ZSaGNtZGxkQzlHUmtsVVlYSm5aWFFsTWtNbE1qQldaWEp6YVc5dUpUTkVNaTR5TGpBdU5EQXdOaVV5UXlVeU1FTjFiSFIxY21VbE0wUnVaWFYwY21Gc0pUSkRKVEl3VUhWaWJHbGpTMlY1Vkc5clpXNGxNMFJ1ZFd4c0lqNE5DanhwYm5SSlJENHhOVEEwUEM5cGJuUkpSRDROQ2p3dllURTZTVVJJYjJ4a1pYSStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wLTE0OThfRGF0YT4NCjxCYXNlLTAtMTQ5OF9IYXNOZXN0ZWREYXRhPmZhbHNlPC9CYXNlLTAtMTQ5OF9IYXNOZXN0ZWREYXRhPg0KPEJhc2UtMC0xNDk5X0hhc0RhdGE+dHJ1ZTwvQmFzZS0wLTE0OTlfSGFzRGF0YT4NCjxCYXNlLTAtMTQ5OV9EYXRhIGlkPSJyZWYtMTUwMiI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwSlJFaHZiR1JsY2lCcFpEMGljbVZtTFRFaUlIaHRiRzV6T21FeFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1dGFXTnliM052Wm5RdVkyOXRMMk5zY2k5dWMyRnpjMlZ0TDBaR1NWUmhjbWRsZEM5R1JrbFVZWEpuWlhRbE1rTWxNakJXWlhKemFXOXVKVE5FTWk0eUxqQXVOREF3TmlVeVF5VXlNRU4xYkhSMWNtVWxNMFJ1WlhWMGNtRnNKVEpESlRJd1VIVmliR2xqUzJWNVZHOXJaVzRsTTBSdWRXeHNJajROQ2p4cGJuUkpSRDR4TlRBMVBDOXBiblJKUkQ0TkNqd3ZZVEU2U1VSSWIyeGtaWEkrRFFvOEwxTlBRVkF0UlU1V09rSnZaSGsrRFFvOEwxTlBRVkF0UlU1V09rVnVkbVZzYjNCbFBnMEs8L0Jhc2UtMC0xNDk5X0RhdGE+DQo8QmFzZS0wLTE0OTlfSGFzTmVzdGVkRGF0YT5mYWxzZTwvQmFzZS0wLTE0OTlfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTAtMTUwMF9IYXNEYXRhPnRydWU8L0Jhc2UtMC0xNTAwX0hhc0RhdGE+DQo8QmFzZS0wLTE1MDBfRGF0YSBpZD0icmVmLTE1MDMiPlBGTlBRVkF0UlU1V09rVnVkbVZzYjNCbElIaHRiRzV6T25oemFUMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFdGFXNXpkR0Z1WTJVaUlIaHRiRzV6T25oelpEMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TVM5WVRVeFRZMmhsYldFaUlIaHRiRzV6T2xOUFFWQXRSVTVEUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUlnZUcxc2JuTTZVMDlCVUMxRlRsWTlJbWgwZEhBNkx5OXpZMmhsYldGekxuaHRiSE52WVhBdWIzSm5MM052WVhBdlpXNTJaV3h2Y0dVdklpQjRiV3h1Y3pwamJISTlJbWgwZEhBNkx5OXpZMmhsYldGekxtMXBZM0p2YzI5bWRDNWpiMjB2YzI5aGNDOWxibU52WkdsdVp5OWpiSEl2TVM0d0lpQlRUMEZRTFVWT1ZqcGxibU52WkdsdVoxTjBlV3hsUFNKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5emIyRndMMlZ1WTI5a2FXNW5MeUkrRFFvOFUwOUJVQzFGVGxZNlFtOWtlVDROQ2p4aE1UcEpSRWh2YkdSbGNpQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwwWkdTVlJoY21kbGRDOUdSa2xVWVhKblpYUWxNa01sTWpCV1pYSnphVzl1SlRORU1pNHlMakF1TkRBd05pVXlReVV5TUVOMWJIUjFjbVVsTTBSdVpYVjBjbUZzSlRKREpUSXdVSFZpYkdsalMyVjVWRzlyWlc0bE0wUnVkV3hzSWo0TkNqeHBiblJKUkQ0eE5UQTJQQzlwYm5SSlJENE5Dand2WVRFNlNVUkliMnhrWlhJK0RRbzhMMU5QUVZBdFJVNVdPa0p2WkhrK0RRbzhMMU5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxQZzBLPC9CYXNlLTAtMTUwMF9EYXRhPg0KPEJhc2UtMC0xNTAwX0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0xNTAwX0hhc05lc3RlZERhdGE+DQo8L2ExOkNhbGxTaXRlX3gwMDJCX1RyYWNlU2VyaWFsaXNlckhlbHBlcj4NCjwvU09BUC1FTlY6Qm9keT4NCjwvU09BUC1FTlY6RW52ZWxvcGU+DQo=" + "WrapperObject_InClassDecl-1_InFunctionScope-1_Instance0_181afb69-460d-458d-af52-0b409ca26796": "H4sIAAAAAAAACnXdMY4lthFF0b107GBI1i+yFDvxGiQFAqTUiZUJ2rufHffJBnjRbWAwp/8npn7+6+vff/znzz9+/+dvf/729dPPf339/v8/fP31y9e//vnL10/r82P//fX3P74bjobS8NHQGq6Gp2EwrB8algaVL5UvlS+VL5UvlS+VL5VvlW+Vb5VvlW+Vb5VvlW+Vb5VvlR+VH5UflR+VH5UflR+VH5UflR+Vl8pL5aXyUnmpvFReKi+Vl8pL5R+Vf1T+UflH5R+Vf1T+UflH5R+Vf1TeKm+Vt8pb5a3yVnmrvFXeKm+VX5VflV+VX5VflV+VX5VflV+VX5U/lT+VP5U/lT+VP5U/lT+VP5U/lY/KR+Wj8lH5qHxUPioflY/KB+X9A+X9A+Utw7UM1zJcy3Atw7UM1zJcy3Atw7UM1zJcy3Atw7UM1zJcy3Atw7UM1zJcy3Atw7UM1zJcy3Atw7UM1zJcy3Atw7UM1zJcy3Atw7UM1zJcy3Atw7UM1zJcy3Atw7UM1zJcy3Atw7UM1zJcy3Atw7UM1zJcy3Atw7UM1zJcy3Atw7UM1zJcy3Atw7UM1zJcy3Atw7UM1zJcy3Atw7UM1zJcy3Atw7UM1zJcy3Atw7UM1zJcy3Atw7UM1zJcy3Atw7UM1zJcy3Atw7UM1zJcy3Atw7UM1zJcy3Atw7UMd2W4K8NdGe7KcFeGuzLcleGuDHdluCvDXRnuynBXhrsy3JXhrgx3Zbgrw10Z7spwV4a7MtyV4a4Md2W4K8NdGe7KcFeGuzLcleGuDHdluCvDXRnuynBXhrsy3JXhrgx3Zbgrw10Z7spwV4a7MtyV4a4Md2W4K8NdGe7KcFeGuzLcleGuDHdluCvDXRnuynBXhrsy3JXhrgx3Zbgrw10Z7spwV4a7MtyV4a4Md2W4K8NdGe7KcFeGuzLcleGuDHdluCvDXRnuynBXhrsy3JXhrgx3Zbgrw10Z7spwV4a7MtyV4a4Md2W4K8NdGe7KcE+GezLck+GeDPdkuCfDPRnuyXBPhnsy3JPhngz3ZLgnwz0Z7slwT4Z7MtyT4Z4M92S4J8M9Ge7JcE+GezLck+GeDPdkuCfDPRnuyXBPhnsy3JPhngz3ZLgnwz0Z7slwT4Z7MtyT4Z4M92S4J8M9Ge7JcE+GezLck+GeDPdkuCfDPRnuyXBPhnsy3JPhngz3ZLgnwz0Z7slwT4Z7MtyT4Z4M92S4J8M9Ge7JcE+GezLck+GeDPdkuCfDPRnuyXBPhnsy3JPhngz3ZLgnwz0Z7slwT4Z7MtyT4Z4M92S4J8M9Ge7JcE+GezLck+GeDDcy3MhwI8ONDDcy3MhwI8ONDDcy3MhwI8ONDDcy3MhwI8ONDDcy3MhwI8ONDDcy3MhwI8ONDDcy3MhwI8ONDDcy3MhwI8ONDDcy3MhwI8ONDDcy3MhwI8ONDDcy3MhwI8ONDDcy3MhwI8ONDDcy3MhwI8ONDDcy3MhwI8ONDDcy3MhwI8ONDDcy3MhwI8ONDDcy3MhwI8ONDDcy3MhwI8ONDDcy3MhwI8ONDDcy3MhwI8ONDDcy3MhwI8ONDDcy3MhwI8ONDDcy3MhwI8ONDDcy3MhwI8ONDDcy3MhwI8MNDLd/wHAZvi/P8H15hu/LM3xfnuH78gzfl2f4vjzD9+UZVA7DZVA5DJdB5TBcBpXDcBlUDsNlUDkMl0HlMFwGlcNwGVQOw2VQOQyXQeUwXAaVw3AZVA7DZVA5DJdB5TBcBpXDcBlUDsNlUDkMl0HlMFwGlcNwGVQOw2VQOQyXQeUwXAaVw3AZVA7DZVA5DJdB5TBcBpXDcBlUDsNlUDkMl0HlMFwGlcNwGVQOw2VQOQyXQeUwXAaVw3AZVA7DZVA5DJdB5TBcBpXDcBlUDsNlUDkMl0HlMFwGlcNwGVQOw2VA+ZLhlgy3ZLglwy0ZbslwS4ZbMtyS4ZYMt2S4JcMtGW7JcEuGWzLckuGWDLdkuCXDLRluyXBLhlsy3JLhlgy3ZLglwy0ZbslwS4ZbMtyS4ZYMt2S4JcMtGW7JcEuGWzLckuGWDLdkuCXDLRluyXBLhlsy3JLhlgy3ZLglwy0ZbslwS4ZbMtyS4ZYMt2S4JcMtGW7JcEuGWzLckuGWDLdkuCXD5R27BpXLcHkkrEHlMlxeYGpQuQyX520aVC7D5e2QBpXLcHmYoUHlMly+9dagchkuXylikOHyhZQGlctw+bRfg8pluHyUqkHlMlw+p9KA8nzKoQHl+R1ZA8rzG5YGlMfnGlQuwwU/GlQuw+VfFg0ql+Hy11aDymW4/Ew0qFyG2zLcluG2DLdluC3DbRluy3Bbhtsy3Jbhtgy3Zbgtw20ZbstwW4bbMtyW4bYMt2W4LcNtGW7LcFuG2zLcluG2DLdluC3DbRluy3Bbhtsy3Jbhtgy3Zbgtw20ZbstwW4bbMtyW4bYMt2W4LcNtGW7LcFuG2zLcluG2DLdluC3DbRluy3Bbhtsy3Jbhtgy3Zbgtw20ZbstwW4bbMtyW4bYMt2W4LcNtGW7LcFuG2zLcluG2DLdluC3DHRnuyHBHhjsy3JHhjgx3ZLgjwx0Z7shwR4Y7MtyR4Y4Md2S4I8MdGe7IcEeGOzLckeGODHdkuCPDHRnuyHBHhjsy3JHhjgx3ZLgjwx0Z7shwR4Y7MtyR4Y4Md2S4I8MdGe7IcEeGOzLckeGODHdkuCPDHRnuyHBHhjsy3JHhjgx3ZLgjwx0Z7shwR4Y7MtyR4Y4Md2S4I8MdGe7IcEeGOzLckeGODHdkuCPDHRnuyHBHhjsy3JHhjgx3ZLgjwx0Z7shwR4Y7MtyR4Y4Md2S4I8MdGe7IcEeGOzLckeGODHdkuCPDHRnuyHBHhjsyXMlwJcOVDFcyXMlwJcOVDFcyXMlwJcOVDFcyXMlwJcOVDFcyXMlwJcOVDFcyXMlwJcOVDFcyXMlwJcOVDFcyXMlwJcOVDFcyXMlwJcOVDFcyXMlwJcOVDFcyXMlwJcOVDFcyXMlwJcOVDFcyXMlwJcOVDFcyXMlwJcOVDFcyXMlwJcOVDFcyXMlwJcOVDFcyXMlwJcOVDFcyXMlwJcOVDFcyXMlwJcOVDFcyXMlwJcOVDFcyXMlwJcOVDFcyXMlwJcOVDFcyXMlwJcOVDFcyXMlwJcOVDFcyXMlwJcOVDFcy3EeG+8hwutOQAeW605AB5brTkAHlutOQQeUynO40ZFC5DKc7DRlULsPpTkMGlctwutOQQeUynO40ZFC5DKc7DRlULsPpTkO+C1O5DKc7DRlULsPpTkMGlctwutOQQeUynO40ZFC5DKc7DRlULsPpTkMGlctwutOQQeUynO40ZFC5DKc7DRlULsPpTkO+rlW5DKc7DRlULsPpTkMGlctwutOQQeUynO40ZFC5DKc7DRlULsPpTkMGlctwutOQQeUynO40ZFC5DKc7DRlULsPpTkNeFKhchtOdhgwql+F0pyGDymU43WnIgHLdaciAct1pyIBy3WnIgHLdaciAct1pyKByGU53GjKoXIbTnYYMKpfhdKchg8plON1pyKByGU53GjKoXIbTnYYMKpfhdKchr3pULsPpTkMGlctwutOQQeUynO40ZFC5DKc7DRlULsPpTkMGlctwutOQQeUynO40ZFC5DKc7DRlULsPpTkMGlctwutOQh2cql+F0pyGDymU43WnIoHIZTncaMqhchtOdhgwql+F0pyGDymU43WnIoHIZTncaMqhchtOdhgwql+F0pyGDymU43WnI20iVy3C605BB5TKc7jRkULkMpzsNGVCuOw0ZUK47DRlQrjsNGVCuOw0ZUK47DRlULsPpTkMGlctwutOQQeUynO40ZFC5DKc7DRlULsPpTkMGlctwutOQQeUynO405H2yymU43WnIoHIZTncaMqhchtOdhgwql+F0pyGDymU43WnIoHIZTncaMqhchtOdhgwql+F0pyGDymU43WnIoHIZTncatu40ZFC5DKc7DRlULsPpTkMGlctwutOwdachg8plON1pyKByGU53GjKoXIbTnYatOw0ZVC7D6U5DBpXLcLrTkEHlMpzuNGzdacigchlOdxoyqFyG052GDCqX4XSnYetOQwaU605DBpTrTkMGlOtOQwaU605DBpXLcLrTkEHlMpzuNGRQuQynOw0ZVC7D6U5DBpXLcLrTkEHlMpzuNGRQuQynOw1bdxoyqFyG052GDCqX4XSnIYPKZTjdadi605BB5TKc7jRkULkMpzsNGVQuw+lOw9adhgwql+F0pyGDymU43WnIoHIZTncatu40ZFC5DKc7DRlULsPpTkMGlctwutOwdachg8plON1pyKByGU53GjKoXIbTnYatOw0ZVC7D6U5DBpXLcLrTkEHlMpzuNGzdacigchlOdxoyqFyG052GDCqX4XSnYetOQwaU605DBpTrTkMGlOtOQwaU605DBpXLcLrTkEHlMpzuNGRQuQynOw0ZVC7D6U5DBpXLcLrTkEHlMpzuNGRQuQynOw1bdxoyqFyG052GDCqX4XSnIYPKZTjdadi605BB5TKc7jRkULkMpzsNGVQuw+lOw9adhgwql+F0pyGDymU43WnIoHIZTncatu40ZFC5DKc7DRlULsPpTkMGlctwutOwdachg8plON1pyKByGU53GjKoXIbTnYatOw0ZVC7D6U5DBpXLcLrTkEHlMpzuNGzdacig8lG5DKc7DRlULsPpTkMGlcNw+a9Fvi/P8H15hv+V//r3r/8FZNYCQKeSAAA=" } } ], @@ -116,12 +145,12 @@ "ScaleFactor": 1.0, "HasRunWithoutCrash": true, "IsVisibleInDynamoLibrary": true, - "Version": "2.2.0.4006", - "RunType": "Manual", + "Version": "3.0.0.5795", + "RunType": "Automatic", "RunPeriod": "1000" }, "Camera": { - "Name": "Background Preview", + "Name": "_Background Preview", "EyeX": -17.0, "EyeY": 24.0, "EyeZ": 50.0, @@ -132,41 +161,42 @@ "UpY": 1.0, "UpZ": 0.0 }, + "ConnectorPins": [], "NodeViews": [ { - "ShowGeometry": true, - "Name": "WrapperObject.WrapperObject", - "Id": "5ad33880a88e47f0a5a156d1edbfae2b", - "IsSetAsInput": false, - "IsSetAsOutput": false, - "Excluded": false, - "X": 427.5, - "Y": 213.75 - }, - { - "ShowGeometry": true, - "Name": "WrapperObject.ID", "Id": "056d9c584f3b42acabec727e64188fae", + "Name": "WrapperObject.ID", "IsSetAsInput": false, "IsSetAsOutput": false, "Excluded": false, + "ShowGeometry": true, "X": 692.5, "Y": 278.75 }, { - "ShowGeometry": true, - "Name": "Code Block", "Id": "56c98070e24545b883c0ee1d3e82b958", + "Name": "Code Block", "IsSetAsInput": false, "IsSetAsOutput": false, "Excluded": false, + "ShowGeometry": true, "X": 265.0, "Y": 396.0 + }, + { + "Id": "181afb69460d458daf520b409ca26796", + "Name": "WrapperObject.WrapperObject", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 354.0, + "Y": 222.5 } ], "Annotations": [], - "X": 0.0, - "Y": 0.0, + "X": -98.0, + "Y": -135.0, "Zoom": 1.0 } } \ No newline at end of file diff --git a/test/core/docbrowser/pkgs/PackageWithNodeDocumentation/bin/Package.dll b/test/core/docbrowser/pkgs/PackageWithNodeDocumentation/bin/PackageWithDocs.dll similarity index 50% rename from test/core/docbrowser/pkgs/PackageWithNodeDocumentation/bin/Package.dll rename to test/core/docbrowser/pkgs/PackageWithNodeDocumentation/bin/PackageWithDocs.dll index 58050bf72fc..400efff6e17 100644 Binary files a/test/core/docbrowser/pkgs/PackageWithNodeDocumentation/bin/Package.dll and b/test/core/docbrowser/pkgs/PackageWithNodeDocumentation/bin/PackageWithDocs.dll differ diff --git a/test/core/docbrowser/pkgs/PackageWithNodeDocumentation/doc/PackageWithDocs.Package.Hello.dyn b/test/core/docbrowser/pkgs/PackageWithNodeDocumentation/doc/PackageWithDocs.Package.Hello.dyn new file mode 100644 index 00000000000..98f7422125b --- /dev/null +++ b/test/core/docbrowser/pkgs/PackageWithNodeDocumentation/doc/PackageWithDocs.Package.Hello.dyn @@ -0,0 +1 @@ +I am a .dyn file. diff --git a/test/core/docbrowser/pkgs/PackageWithNodeDocumentation/doc/Package.Package.Hello.md b/test/core/docbrowser/pkgs/PackageWithNodeDocumentation/doc/PackageWithDocs.Package.Hello.md similarity index 100% rename from test/core/docbrowser/pkgs/PackageWithNodeDocumentation/doc/Package.Package.Hello.md rename to test/core/docbrowser/pkgs/PackageWithNodeDocumentation/doc/PackageWithDocs.Package.Hello.md diff --git a/test/core/docbrowser/pkgs/PackageWithNodeDocumentation/pkg.json b/test/core/docbrowser/pkgs/PackageWithNodeDocumentation/pkg.json index 6a3c2dae084..12f2654e9dc 100644 --- a/test/core/docbrowser/pkgs/PackageWithNodeDocumentation/pkg.json +++ b/test/core/docbrowser/pkgs/PackageWithNodeDocumentation/pkg.json @@ -1 +1 @@ -{"license":"","file_hash":null,"name":"Package","version":"1.0.0","description":"original package","group":"","keywords":null,"dependencies":[],"contents":"","engine_version":"2.1.0.7840","engine":"dynamo","engine_metadata":"","site_url":"","repository_url":"","contains_binaries":true,"node_libraries":["Package, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"]} \ No newline at end of file +{"license":"","file_hash":null,"name":"Package","version":"1.0.0","description":"original package","group":"","keywords":null,"dependencies":[],"contents":"","engine_version":"2.1.0.7840","engine":"dynamo","engine_metadata":"","site_url":"","repository_url":"","contains_binaries":true,"node_libraries":["PackageWithDocs, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"]} \ No newline at end of file diff --git a/test/core/docbrowser/pkgs/RootPackageFolder/DuplicatePackageWithNodeDocumentation/doc/Random.Doc.md b/test/core/docbrowser/pkgs/RootPackageFolder/DuplicatePackageWithNodeDocumentation/doc/Random.Doc.md new file mode 100644 index 00000000000..c5bcf021670 --- /dev/null +++ b/test/core/docbrowser/pkgs/RootPackageFolder/DuplicatePackageWithNodeDocumentation/doc/Random.Doc.md @@ -0,0 +1,43 @@ +# Hello Dynamo! +This content is from the markdown file created for the `CustomNodeExample` node! + +In Markdown we can create headers simply by using `#`, let's try it: + +# Here's a header 1 `#` +## This is a header 2 `##` +### This is a header 3 `###` +#### This i.. Okay think you got it! + +We can also create cool stuff like tables! Here's an example: + +| column1 | column2 | +| ------- | ------- | +| row_1_1 | row_1_2 | +| row_2_1 | row_2_2 | +| row_3_1 | row_3_2 | + +Here's how you create the above table in markdown: +``` +| column1 | column2 | +| ------- | ------- | +| row_1_1 | row_1_2 | +| row_2_1 | row_2_2 | +| row_3_1 | row_3_2 | +``` + +How about some syntax highlighting in you documentation? +``` csharp +public void HelloDynamo(string message) +{ + System.Console.WriteLine(message); +} +``` + +
``` csharp
+public void HelloDynamo(string message)
+{
+    System.Console.WriteLine(message);
+}
+```
+ +![Dynamo Icon image](./icon.png) diff --git a/test/core/docbrowser/pkgs/RootPackageFolder/DuplicatePackageWithNodeDocumentation/doc/readme.txt b/test/core/docbrowser/pkgs/RootPackageFolder/DuplicatePackageWithNodeDocumentation/doc/readme.txt new file mode 100644 index 00000000000..e69de29bb2d diff --git a/test/core/docbrowser/pkgs/RootPackageFolder/DuplicatePackageWithNodeDocumentation/pkg.json b/test/core/docbrowser/pkgs/RootPackageFolder/DuplicatePackageWithNodeDocumentation/pkg.json new file mode 100644 index 00000000000..6a3c2dae084 --- /dev/null +++ b/test/core/docbrowser/pkgs/RootPackageFolder/DuplicatePackageWithNodeDocumentation/pkg.json @@ -0,0 +1 @@ +{"license":"","file_hash":null,"name":"Package","version":"1.0.0","description":"original package","group":"","keywords":null,"dependencies":[],"contents":"","engine_version":"2.1.0.7840","engine":"dynamo","engine_metadata":"","site_url":"","repository_url":"","contains_binaries":true,"node_libraries":["Package, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"]} \ No newline at end of file diff --git a/test/core/docbrowser/pkgs/RootPackageFolder/PackageWithNodeDocumentation/doc/Random.Doc.md b/test/core/docbrowser/pkgs/RootPackageFolder/PackageWithNodeDocumentation/doc/Random.Doc.md new file mode 100644 index 00000000000..c5bcf021670 --- /dev/null +++ b/test/core/docbrowser/pkgs/RootPackageFolder/PackageWithNodeDocumentation/doc/Random.Doc.md @@ -0,0 +1,43 @@ +# Hello Dynamo! +This content is from the markdown file created for the `CustomNodeExample` node! + +In Markdown we can create headers simply by using `#`, let's try it: + +# Here's a header 1 `#` +## This is a header 2 `##` +### This is a header 3 `###` +#### This i.. Okay think you got it! + +We can also create cool stuff like tables! Here's an example: + +| column1 | column2 | +| ------- | ------- | +| row_1_1 | row_1_2 | +| row_2_1 | row_2_2 | +| row_3_1 | row_3_2 | + +Here's how you create the above table in markdown: +``` +| column1 | column2 | +| ------- | ------- | +| row_1_1 | row_1_2 | +| row_2_1 | row_2_2 | +| row_3_1 | row_3_2 | +``` + +How about some syntax highlighting in you documentation? +``` csharp +public void HelloDynamo(string message) +{ + System.Console.WriteLine(message); +} +``` + +
``` csharp
+public void HelloDynamo(string message)
+{
+    System.Console.WriteLine(message);
+}
+```
+ +![Dynamo Icon image](./icon.png) diff --git a/test/core/docbrowser/pkgs/RootPackageFolder/PackageWithNodeDocumentation/doc/readme.txt b/test/core/docbrowser/pkgs/RootPackageFolder/PackageWithNodeDocumentation/doc/readme.txt new file mode 100644 index 00000000000..e69de29bb2d diff --git a/test/core/docbrowser/pkgs/RootPackageFolder/PackageWithNodeDocumentation/pkg.json b/test/core/docbrowser/pkgs/RootPackageFolder/PackageWithNodeDocumentation/pkg.json new file mode 100644 index 00000000000..6a3c2dae084 --- /dev/null +++ b/test/core/docbrowser/pkgs/RootPackageFolder/PackageWithNodeDocumentation/pkg.json @@ -0,0 +1 @@ +{"license":"","file_hash":null,"name":"Package","version":"1.0.0","description":"original package","group":"","keywords":null,"dependencies":[],"contents":"","engine_version":"2.1.0.7840","engine":"dynamo","engine_metadata":"","site_url":"","repository_url":"","contains_binaries":true,"node_libraries":["Package, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"]} \ No newline at end of file diff --git a/test/core/docbrowser/pkgs/SingleFolderPublishPackageDocs/doc.md b/test/core/docbrowser/pkgs/SingleFolderPublishPackageDocs/doc.md new file mode 100644 index 00000000000..e69de29bb2d diff --git a/test/core/docbrowser/pkgs/SingleFolderPublishPackageDocs/export.xml b/test/core/docbrowser/pkgs/SingleFolderPublishPackageDocs/export.xml new file mode 100644 index 00000000000..cc49cb77cb1 --- /dev/null +++ b/test/core/docbrowser/pkgs/SingleFolderPublishPackageDocs/export.xml @@ -0,0 +1,144 @@ + + + false + true + 335 + en-US + Millimeters + 0 + true + true + true + true + true + 100 + 70 + BEZIER + + + IsBackgroundPreviewActive + true + + + true + 1 + 0 + 128 + false + true + 245 + 86 + 1539 + 802 + true + f3 + 10 + + P:\Archilizer\Clients\Autodesk\Projects\23 - Q2\Zoom States\zoom-states.dyn + P:\Archilizer\Clients\Autodesk\Projects\23 - Q3\MyPackage\TestPublishMyNode.dyf + P:\Archilizer\Clients\Autodesk\Projects\22 - Q4\Python\test_scipy.dyn + P:\Archilizer\Clients\Autodesk\Projects\22 - Q4\Python Restyle\color code restyle.dyn + P:\Archilizer\Clients\Autodesk\Projects\23 - Q1\DYN-4513 Improvement Allow pin note to node via drag, hover and release\drag&drop.dyn + P:\Archilizer\Clients\Autodesk\Projects\23 - Q1\Background Helpers\Plane Axes\axes.dyn + + C:\Users\DeyanNenov\AppData\Roaming\Dynamo\Dynamo Core\backup + + C:\Users\DeyanNenov\AppData\Roaming\Dynamo\Dynamo Core\backup\backup.DYN + + + C:\Users\DeyanNenov\AppData\Roaming\Dynamo\Dynamo Core\2.19\packages\MyPackage + %BuiltInPackages% + C:\Users\DeyanNenov\AppData\Roaming\Dynamo\Dynamo Core\2.19 + C:\ProgramData\Dynamo\Dynamo Core\2.19\packages + + false + + C:\ProgramData\Autodesk + C:\Program Files\Autodesk + + + + 60000 + 1 + true + false + false + true + false + 10 + 10 + false + true + false + false + + C:\Users\DeyanNenov\AppData\Roaming\Dynamo\Dynamo Core\2.19 + + ProtoGeometry.dll:Autodesk.DesignScript.Geometry.TSpline + + + + Documentation Browser + 68B45FC0-0BD1-435C-BF28-B97CB03C71C8 + DockRight + false + + + Workspace References + A6706BF5-11C2-458F-B7C8-B745A77EF7FD + DockRight + false + + + Package Details + C71CA1B9-BF9F-425A-A12C-53DF56770406 + DockRight + false + + + Graph Node Manager + F76F4274-537D-4782-B1E9-27E8FDE2186F + DockRight + false + + + false + false + Automatic + MLRecommendation + false + + + Actions + B9F9E1 + true + 36 + 4d68be4a-a04d-4945-9dd5-cdf61079d790 + + + Inputs + FFB8D8 + true + 36 + 883066aa-1fe2-44a4-9bd1-c3df86bfe9f6 + + + Outputs + FFC999 + true + 36 + 07655dc1-2d65-4fed-8d6a-37235d3e3a8d + + + Review + A4E1FF + true + 36 + bc688959-ce34-4bf5-90f8-6ddd23f80989 + + + 300 + 2.4.0 + + + \ No newline at end of file diff --git a/test/core/docbrowser/pkgs/SingleFolderPublishPackageDocs/pkg.Migrations.xml b/test/core/docbrowser/pkgs/SingleFolderPublishPackageDocs/pkg.Migrations.xml new file mode 100644 index 00000000000..4f192f6d51e --- /dev/null +++ b/test/core/docbrowser/pkgs/SingleFolderPublishPackageDocs/pkg.Migrations.xml @@ -0,0 +1,1518 @@ + + + + + + + + + lcop_selection_set_tree/Architecture/ART.CurtainWalls;lcop_selection_set_tree/Architecture/ART.Floors;lcop_selection_set_tree/Architecture/ART.Entourage;lcop_selection_set_tree/Architecture/ART.Floors;lcop_selection_set_tree/Architecture/ART.CurtainWalls;lcop_selection_set_tree/Architecture/ART.Floors;lcop_selection_set_tree/Architecture/ART.CurtainWalls + + + + + lcop_selection_set_tree/Structure/STR.Columns + + + + + + + + + lcop_selection_set_tree/Architecture/ART.Walls + + + + + lcop_selection_set_tree/Structure/STR.Columns + + + + + + + + + lcop_selection_set_tree/Architecture/ART.Floors + + + + + lcop_selection_set_tree/Architecture/ART.Site;lcop_selection_set_tree/Architecture/ART.Furniture;lcop_selection_set_tree/Architecture/ART.Doors;lcop_selection_set_tree/Architecture/ART.Furniture + + + + + + + + + lcop_selection_set_tree/Architecture/ART.Furniture;lcop_selection_set_tree/Architecture/ART.Floors;lcop_selection_set_tree/Architecture/ART.Roofs;lcop_selection_set_tree/Architecture/ART.Windows;lcop_selection_set_tree/Architecture/ART.Furniture;lcop_selection_set_tree/Architecture/ART.Floors;lcop_selection_set_tree/Architecture/ART.Doors;lcop_selection_set_tree/Architecture/ART.CurtainWalls;lcop_selection_set_tree/Architecture/ART.Furniture;lcop_selection_set_tree/Architecture/ART.Floors + + + + + lcop_selection_set_tree/MEP/MEP.ElectricalFixtures + + + + + + + + + lcop_selection_set_tree/Architecture + + + + + lcop_selection_set_tree/Structure/STR.Columns + + + + + + + + + + + + + Source File + + + -ART- + + + + + Element + + + Category + + + Casework + + + + + + + + + + + Source File + + + -ART- + + + + + Element + + + Category + + + Ceilings + + + + + + + + + + + Source File + + + -ART- + + + + + Element + + + Category + + + Columns + + + + + Element + + + Category + + + Structural Columns + + + + + + + + + + + Source File + + + -ART- + + + + + Element + + + Category + + + Curtain Panels + + + + + Element + + + Category + + + Curtain Systems + + + + + Element + + + Category + + + Curtain Wall Mullions + + + + + + + + + + + Source File + + + -ART- + + + + + Element + + + Category + + + Doors + + + + + + + + + + + Source File + + + -ART- + + + + + Element + + + Category + + + Entourage + + + + + + + + + + + Source File + + + -ART- + + + + + Element + + + Category + + + Floors + + + + + Element + + + Category + + + Slab Edges + + + + + + + + + + + Source File + + + -ART- + + + + + Element + + + Category + + + Furniture + + + + + Element + + + Category + + + Furniture Systems + + + + + + + + + + + Source File + + + -ART- + + + + + Element + + + Category + + + Furniture Systems + + + + + + + + + + + Source File + + + -ART- + + + + + Element + + + Category + + + Generic Models + + + + + + + + + + + Source File + + + -ART- + + + + + Element + + + Category + + + Parking + + + + + + + + + + + Source File + + + -ART- + + + + + Element + + + Category + + + Parts + + + + + + + + + + + Source File + + + -ART- + + + + + Element + + + Category + + + Planting + + + + + + + + + + + Source File + + + -ART- + + + + + Element + + + Category + + + Plumbing Fixtures + + + + + + + + + + + Source File + + + -ART- + + + + + Element + + + Category + + + Railings + + + + + Element + + + Category + + + Handrails + + + + + Element + + + Category + + + Top Rails + + + + + + + + + + + Source File + + + -ART- + + + + + Element + + + Category + + + Ramps + + + + + + + + + + + Source File + + + -ART- + + + + + Element + + + Category + + + Roofs + + + + + + + + + + + Source File + + + -ART- + + + + + Element + + + Category + + + Shaft Openings + + + + + + + + + + + Source File + + + -ART- + + + + + Element + + + Category + + + Site + + + + + + + + + + + Source File + + + -ART- + + + + + Element + + + Category + + + Specialty Equipment + + + + + + + + + + + Source File + + + -ART- + + + + + Element + + + Category + + + Stairs + + + + + Element + + + Category + + + Landings + + + + + Element + + + Category + + + Runs + + + + + Element + + + Category + + + Gutters + + + + + Element + + + Category + + + Wall Sweeps + + + + + Element + + + Category + + + Duct + + + + + Element + + + Category + + + Supports + + + + + Element + + + Category + + + Telephone Devices + + + + + Element + + + Category + + + Pipe + + + + + Element + + + Category + + + Handrails + + + + + + + + + + + Source File + + + -ART- + + + + + Element + + + Category + + + Topography + + + + + + + + + + + Source File + + + -ART- + + + + + Element + + + Category + + + Walls + + + + + Element + + + Category + + + Wall Sweeps + + + + + + + + + + + Source File + + + -ART- + + + + + Element + + + Category + + + Windows + + + + + + + + + + + Source File + + + -ART- + + + + + Element + + + Category + + + Windows + + + + + + + + + + + + + Source File + + + -STR- + + + + + Element + + + Category + + + Generic Models + + + + + + + + + + + Source File + + + -STR- + + + + + Element + + + Category + + + Slab Edges + + + + + + + + + + + Source File + + + -STR- + + + + + Element + + + Category + + + Beams + + + + + + + + + + + Source File + + + -STR- + + + + + Element + + + Category + + + Columns + + + + + + + + + + + Source File + + + -STR- + + + + + Element + + + Category + + + Structural Connections + + + + + + + + + + + Source File + + + -STR- + + + + + Element + + + Category + + + Structural Foundations + + + + + + + + + + + Source File + + + -STR- + + + + + Element + + + Category + + + Structural Framing + + + + + + + + + + + Source File + + + -STR- + + + + + Element + + + Category + + + Walls + + + + + + + + + + + + + Source File + + + -MEP- + + + + + Element + + + Category + + + Air Terminals + + + + + + + + + + + Source File + + + -MEP- + + + + + Element + + + Category + + + Cable Trays + + + + + Element + + + Category + + + Cable Tray Fittings + + + + + Element + + + Category + + + Cable Tray Runs + + + + + + + + + + + Source File + + + -MEP- + + + + + Element + + + Category + + + Devices + + + + + + + + + + + Source File + + + -MEP- + + + + + Element + + + Category + + + Conduits + + + + + Element + + + Category + + + Conduit Fittings + + + + + Element + + + Category + + + Conduit Runs + + + + + + + + + + + Source File + + + -MEP- + + + + + Element + + + Category + + + Duct + + + + + + + + + + + Source File + + + -MEP- + + + + + Element + + + Category + + + Electrical Equipment + + + + + + + + + + + Source File + + + -MEP- + + + + + Element + + + Category + + + Electrical Fixtures + + + + + + + + + + + Source File + + + -MEP- + + + + + Element + + + Category + + + Generic Models + + + + + + + + + + + Source File + + + -MEP- + + + + + Element + + + Category + + + HVACZones + + + + + + + + + + + Source File + + + -MEP- + + + + + Element + + + Category + + + Lighting Fixtures + + + + + + + + + + + Source File + + + -MEP- + + + + + Element + + + Category + + + Mechanical Equipment + + + + + + + + + + + Source File + + + -MEP- + + + + + Element + + + Category + + + Pipe + + + + + + + + + + + Source File + + + -MEP- + + + + + Element + + + Category + + + Plumbing Fixtures + + + + + + + + + + + Source File + + + -MEP- + + + + + Element + + + Category + + + Specialty Equipment + + + + + + + + + + + Source File + + + -MEP- + + + + + Element + + + Category + + + Sprinklers + + + + + + + + + + + diff --git a/test/core/docbrowser/pkgs/SingleFolderPublishPackageDocs/pkg.json b/test/core/docbrowser/pkgs/SingleFolderPublishPackageDocs/pkg.json new file mode 100644 index 00000000000..5f3fdfb11e8 --- /dev/null +++ b/test/core/docbrowser/pkgs/SingleFolderPublishPackageDocs/pkg.json @@ -0,0 +1 @@ +{"license":"MIT","file_hash":null,"name":"ADSE","version":"0.0.1","description":"Package for doing digital engineering","group":"ADSE","keywords":["adse"],"dependencies":[],"host_dependencies":["Civil 3D","CPython3"],"contents":"ADSE_C3D_Psets_Xlsx2LayerWiseExtendedData - No description provided","engine_version":"2.17.0.3472","engine":"dynamo","engine_metadata":"","site_url":"https://oscarjacobsen.no/dynamo","repository_url":"https://oscarjacobsen.no/dynamo","contains_binaries":false,"node_libraries":[],"copyright_holder":"Oscar Jacobsen","copyright_year":"2023"} \ No newline at end of file diff --git a/test/core/docbrowser/pkgs/SingleFolderPublishPackageDocs/pkg.xml b/test/core/docbrowser/pkgs/SingleFolderPublishPackageDocs/pkg.xml new file mode 100644 index 00000000000..cc49cb77cb1 --- /dev/null +++ b/test/core/docbrowser/pkgs/SingleFolderPublishPackageDocs/pkg.xml @@ -0,0 +1,144 @@ + + + false + true + 335 + en-US + Millimeters + 0 + true + true + true + true + true + 100 + 70 + BEZIER + + + IsBackgroundPreviewActive + true + + + true + 1 + 0 + 128 + false + true + 245 + 86 + 1539 + 802 + true + f3 + 10 + + P:\Archilizer\Clients\Autodesk\Projects\23 - Q2\Zoom States\zoom-states.dyn + P:\Archilizer\Clients\Autodesk\Projects\23 - Q3\MyPackage\TestPublishMyNode.dyf + P:\Archilizer\Clients\Autodesk\Projects\22 - Q4\Python\test_scipy.dyn + P:\Archilizer\Clients\Autodesk\Projects\22 - Q4\Python Restyle\color code restyle.dyn + P:\Archilizer\Clients\Autodesk\Projects\23 - Q1\DYN-4513 Improvement Allow pin note to node via drag, hover and release\drag&drop.dyn + P:\Archilizer\Clients\Autodesk\Projects\23 - Q1\Background Helpers\Plane Axes\axes.dyn + + C:\Users\DeyanNenov\AppData\Roaming\Dynamo\Dynamo Core\backup + + C:\Users\DeyanNenov\AppData\Roaming\Dynamo\Dynamo Core\backup\backup.DYN + + + C:\Users\DeyanNenov\AppData\Roaming\Dynamo\Dynamo Core\2.19\packages\MyPackage + %BuiltInPackages% + C:\Users\DeyanNenov\AppData\Roaming\Dynamo\Dynamo Core\2.19 + C:\ProgramData\Dynamo\Dynamo Core\2.19\packages + + false + + C:\ProgramData\Autodesk + C:\Program Files\Autodesk + + + + 60000 + 1 + true + false + false + true + false + 10 + 10 + false + true + false + false + + C:\Users\DeyanNenov\AppData\Roaming\Dynamo\Dynamo Core\2.19 + + ProtoGeometry.dll:Autodesk.DesignScript.Geometry.TSpline + + + + Documentation Browser + 68B45FC0-0BD1-435C-BF28-B97CB03C71C8 + DockRight + false + + + Workspace References + A6706BF5-11C2-458F-B7C8-B745A77EF7FD + DockRight + false + + + Package Details + C71CA1B9-BF9F-425A-A12C-53DF56770406 + DockRight + false + + + Graph Node Manager + F76F4274-537D-4782-B1E9-27E8FDE2186F + DockRight + false + + + false + false + Automatic + MLRecommendation + false + + + Actions + B9F9E1 + true + 36 + 4d68be4a-a04d-4945-9dd5-cdf61079d790 + + + Inputs + FFB8D8 + true + 36 + 883066aa-1fe2-44a4-9bd1-c3df86bfe9f6 + + + Outputs + FFC999 + true + 36 + 07655dc1-2d65-4fed-8d6a-37235d3e3a8d + + + Review + A4E1FF + true + 36 + bc688959-ce34-4bf5-90f8-6ddd23f80989 + + + 300 + 2.4.0 + + + \ No newline at end of file diff --git a/test/core/docbrowser/pkgs/_AllFileTypesPackageDocs/doc/Random.Doc.md b/test/core/docbrowser/pkgs/_AllFileTypesPackageDocs/doc/Random.Doc.md new file mode 100644 index 00000000000..c5bcf021670 --- /dev/null +++ b/test/core/docbrowser/pkgs/_AllFileTypesPackageDocs/doc/Random.Doc.md @@ -0,0 +1,43 @@ +# Hello Dynamo! +This content is from the markdown file created for the `CustomNodeExample` node! + +In Markdown we can create headers simply by using `#`, let's try it: + +# Here's a header 1 `#` +## This is a header 2 `##` +### This is a header 3 `###` +#### This i.. Okay think you got it! + +We can also create cool stuff like tables! Here's an example: + +| column1 | column2 | +| ------- | ------- | +| row_1_1 | row_1_2 | +| row_2_1 | row_2_2 | +| row_3_1 | row_3_2 | + +Here's how you create the above table in markdown: +``` +| column1 | column2 | +| ------- | ------- | +| row_1_1 | row_1_2 | +| row_2_1 | row_2_2 | +| row_3_1 | row_3_2 | +``` + +How about some syntax highlighting in you documentation? +``` csharp +public void HelloDynamo(string message) +{ + System.Console.WriteLine(message); +} +``` + +
``` csharp
+public void HelloDynamo(string message)
+{
+    System.Console.WriteLine(message);
+}
+```
+ +![Dynamo Icon image](./icon.png) diff --git a/test/core/docbrowser/pkgs/_AllFileTypesPackageDocs/doc/readme.txt b/test/core/docbrowser/pkgs/_AllFileTypesPackageDocs/doc/readme.txt new file mode 100644 index 00000000000..e69de29bb2d diff --git a/test/core/docbrowser/pkgs/_AllFileTypesPackageDocs/dyf/3DView by BoundingBox.dyf b/test/core/docbrowser/pkgs/_AllFileTypesPackageDocs/dyf/3DView by BoundingBox.dyf new file mode 100644 index 00000000000..06ebf117688 --- /dev/null +++ b/test/core/docbrowser/pkgs/_AllFileTypesPackageDocs/dyf/3DView by BoundingBox.dyf @@ -0,0 +1,215 @@ +{ + "Uuid": "42548128-8606-41a0-920b-3cfa3a66d961", + "IsCustomNode": true, + "Category": "GeniusLoci.View", + "Description": "Use a boundingbox to create a new 3D View with a specified name.\r\nNote: Use the \"Remove Special Characters from String\" node to obtain a view name without prohibited characters.", + "Name": "3DView by BoundingBox", + "ElementResolver": { + "ResolutionMap": {} + }, + "Inputs": [], + "Outputs": [], + "Nodes": [ + { + "ConcreteType": "Dynamo.Graph.Nodes.CustomNodes.Symbol, DynamoCore", + "NodeType": "InputNode", + "Parameter": { + "Name": "boundingBox", + "TypeName": "var", + "TypeRank": -1, + "DefaultValue": null, + "Description": "Future Section box" + }, + "Id": "1f37198f21bd4b82805efb8b8022b4ac", + "Inputs": [], + "Outputs": [ + { + "Id": "68ec359e976f4bdf8e312d869e77a667", + "Name": "", + "Description": "Symbole", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Un paramètre de fonction, utiliser avec des noeuds personnalisÊs.\r\n\r\nVous pouvez spÊcifier le type et la valeur par dÊfaut du paramètre. Par exemple,\r\n\r\nentrÊe: var[]..[]\r\nvaleur: bool = false" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CustomNodes.Output, DynamoCore", + "NodeType": "OutputNode", + "ElementResolver": null, + "Symbol": "Views", + "Id": "c965bdcc3e5f45908a096aba97526350", + "Inputs": [ + { + "Id": "dbf7a3b472904bb593e8d0f86be37ef8", + "Name": "", + "Description": "", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [], + "Replication": "Disabled", + "Description": "Sortie de fonction, utiliser avec les noeuds personnalisÊs" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CustomNodes.Symbol, DynamoCore", + "NodeType": "InputNode", + "Parameter": { + "Name": "viewName", + "TypeName": "var", + "TypeRank": -1, + "DefaultValue": null, + "Description": "" + }, + "Id": "def2cd54e3cb400d9a4d2919d36027e5", + "Inputs": [], + "Outputs": [ + { + "Id": "308f2190efb948778f276449a97b538d", + "Name": "", + "Description": "Symbole", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Un paramètre de fonction, utiliser avec des noeuds personnalisÊs.\r\n\r\nVous pouvez spÊcifier le type et la valeur par dÊfaut du paramètre. Par exemple,\r\n\r\nentrÊe: var[]..[]\r\nvaleur: bool = false" + }, + { + "ConcreteType": "PythonNodeModels.PythonNode, PythonNodeModels", + "NodeType": "PythonScriptNode", + "Code": "import clr\nclr.AddReference('RevitAPI')\nimport Autodesk\nfrom Autodesk.Revit.DB import *\n\nclr.AddReference('RevitNodes')\nimport Revit\nclr.ImportExtensions(Revit.GeometryConversion)\n\nclr.AddReference('RevitServices')\nimport RevitServices\nfrom RevitServices.Persistence import DocumentManager\nfrom RevitServices.Transactions import TransactionManager\ndoc = DocumentManager.Instance.CurrentDBDocument\n\ndef tolist(obj1):\n if hasattr(obj1,\"__iter__\"): return obj1\n else: return [obj1]\n\nbboxs = tolist(IN[0])\nviewNames = tolist(IN[1])\nviews=[]\n\n#Get 3D View ViewFamilyType\nviewTypeColl = FilteredElementCollector(doc).OfClass(ViewFamilyType)\nfor i in viewTypeColl:\n\tif i.ViewFamily == ViewFamily.ThreeDimensional:\n\t\tviewType = i\n\telse:\n\t\tcontinue\n\nfor bbox,viewName in zip(bboxs,viewNames):\n\tnewmax = UnwrapElement(bbox.MaxPoint).ToRevitType()\n\tnewmin = UnwrapElement(bbox.MinPoint).ToRevitType()\n\tnewbox = BoundingBoxXYZ()\n\tnewbox.Max = newmax\n\tnewbox.Min = newmin\n\ttry:\n\t\tTransactionManager.Instance.EnsureInTransaction(doc)\n\t\tview = View3D.CreateIsometric(doc, viewType.Id)\n\t\tview.Name = viewName\n\t\tview.SetSectionBox(newbox)\n\t\tviews.append(view)\n\t\tTransactionManager.Instance.TransactionTaskDone()\n\texcept Exception, ex:\n\t\tviews.append(ex.message)\n\nOUT = views", + "VariableInputPorts": true, + "Id": "9a773cf94f2544fd86b7a2812569fbad", + "Inputs": [ + { + "Id": "a46192192b9c4057b6e4b5bd823a364d", + "Name": "IN[0]", + "Description": "Input #0", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "20f553569bfd44468fbdcb408899653c", + "Name": "IN[1]", + "Description": "Input #1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "1e019420186d422ab1e988aa94a08052", + "Name": "OUT", + "Description": "RÊsultat du script Python", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "ExÊcute un script IronPython intÊgrÊ." + } + ], + "Connectors": [ + { + "Start": "68ec359e976f4bdf8e312d869e77a667", + "End": "a46192192b9c4057b6e4b5bd823a364d", + "Id": "d4bc75277ea14356a2bb4bf7dbb5381f" + }, + { + "Start": "308f2190efb948778f276449a97b538d", + "End": "20f553569bfd44468fbdcb408899653c", + "Id": "c6e33f1e3fed45f992bfb276166b3a4f" + }, + { + "Start": "1e019420186d422ab1e988aa94a08052", + "End": "dbf7a3b472904bb593e8d0f86be37ef8", + "Id": "0f88d4baf72c4ec7a67efb66b5f20812" + } + ], + "Dependencies": [], + "NodeLibraryDependencies": [], + "Bindings": [], + "View": { + "Dynamo": { + "ScaleFactor": 1.0, + "HasRunWithoutCrash": false, + "IsVisibleInDynamoLibrary": true, + "Version": "2.6.1.8786", + "RunType": "Manual", + "RunPeriod": "1000" + }, + "Camera": { + "Name": "Aperçu en arrière-plan", + "EyeX": -17.0, + "EyeY": 24.0, + "EyeZ": 50.0, + "LookX": 12.0, + "LookY": -13.0, + "LookZ": -58.0, + "UpX": 0.0, + "UpY": 1.0, + "UpZ": 0.0 + }, + "NodeViews": [ + { + "ShowGeometry": true, + "Name": "Input", + "Id": "1f37198f21bd4b82805efb8b8022b4ac", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "X": 250.705708561732, + "Y": 13.8975315705315 + }, + { + "ShowGeometry": true, + "Name": "Output", + "Id": "c965bdcc3e5f45908a096aba97526350", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "X": 665.115303176804, + "Y": 44.9801991454159 + }, + { + "ShowGeometry": true, + "Name": "Input", + "Id": "def2cd54e3cb400d9a4d2919d36027e5", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "X": 326.086828276943, + "Y": 100.453846562683 + }, + { + "ShowGeometry": true, + "Name": "Python Script", + "Id": "9a773cf94f2544fd86b7a2812569fbad", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "X": 493.462008990311, + "Y": 37.7996033682453 + } + ], + "Annotations": [], + "X": -280.967276858415, + "Y": 265.743005781289, + "Zoom": 1.16438980805626 + } +} \ No newline at end of file diff --git a/test/core/docbrowser/pkgs/_AllFileTypesPackageDocs/extra/Package.Migrations.xml b/test/core/docbrowser/pkgs/_AllFileTypesPackageDocs/extra/Package.Migrations.xml new file mode 100644 index 00000000000..39539b94265 --- /dev/null +++ b/test/core/docbrowser/pkgs/_AllFileTypesPackageDocs/extra/Package.Migrations.xml @@ -0,0 +1,7 @@ + + + + Revit.CurveElement.RemoveDuplicates + Revit.CurveElement.FindDuplicates + + \ No newline at end of file diff --git a/test/core/docbrowser/pkgs/_AllFileTypesPackageDocs/pkg.json b/test/core/docbrowser/pkgs/_AllFileTypesPackageDocs/pkg.json new file mode 100644 index 00000000000..6a3c2dae084 --- /dev/null +++ b/test/core/docbrowser/pkgs/_AllFileTypesPackageDocs/pkg.json @@ -0,0 +1 @@ +{"license":"","file_hash":null,"name":"Package","version":"1.0.0","description":"original package","group":"","keywords":null,"dependencies":[],"contents":"","engine_version":"2.1.0.7840","engine":"dynamo","engine_metadata":"","site_url":"","repository_url":"","contains_binaries":true,"node_libraries":["Package, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"]} \ No newline at end of file diff --git a/test/core/dummy_node/2080_JSONTESTCRASH undo_redo.dyn b/test/core/dummy_node/2080_JSONTESTCRASH undo_redo.dyn index f968441f2a1..81485a7590b 100644 --- a/test/core/dummy_node/2080_JSONTESTCRASH undo_redo.dyn +++ b/test/core/dummy_node/2080_JSONTESTCRASH undo_redo.dyn @@ -53,6 +53,7 @@ "Connectors": [], "Dependencies": [], "NodeLibraryDependencies": [], + "EnableLegacyPolyCurveBehavior": true, "Thumbnail": "", "GraphDocumentationURL": null, "Author": "None provided", diff --git a/test/core/json/Abstract_BoundingBox_JSONParsing.dyn b/test/core/json/Abstract_BoundingBox_JSONParsing.dyn new file mode 100644 index 00000000000..78fb3a565b3 --- /dev/null +++ b/test/core/json/Abstract_BoundingBox_JSONParsing.dyn @@ -0,0 +1,1666 @@ +{ + "Uuid": "4b802105-0bd8-4d97-b885-450c0e387121", + "IsCustomNode": false, + "Description": null, + "Name": "Abstract_BoundingBox_JSONParsing", + "ElementResolver": { + "ResolutionMap": { + "DSCore.Object": { + "Key": "DSCore.Object", + "Value": "DSCoreNodes.dll" + }, + "DSCore.Data": { + "Key": "DSCore.Data", + "Value": "DSCoreNodes.dll" + }, + "DesignScript.Builtin.Dictionary": { + "Key": "DesignScript.Builtin.Dictionary", + "Value": "DesignScriptBuiltin.dll" + }, + "Color": { + "Key": "DSCore.Color", + "Value": "DSCoreNodes.dll" + }, + "DSCore.DateTime.Now": { + "Key": "DSCore.DateTime", + "Value": "DSCoreNodes.dll" + }, + "DSCore.DateTime": { + "Key": "DSCore.DateTime", + "Value": "DSCoreNodes.dll" + }, + "Point": { + "Key": "Autodesk.DesignScript.Geometry.Point", + "Value": "ProtoGeometry.dll" + } + } + }, + "Inputs": [], + "Outputs": [], + "Nodes": [ + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "abb39e07db0845cf9438478defffbf68", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "dbcac05940544a66b4609df6f02a96c6", + "Name": "list", + "Description": "List to be checked on whether all items are true.\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "0c1dac5833db48b4a8000eed71ef29b6", + "Name": "bool", + "Description": "True if all items from list are true, false if one or more items is not true", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.List.AllTrue@var[]..[]", + "Replication": "Auto", + "Description": "Determines if all items in the given list is a boolean and has a true value.\n\nList.AllTrue (list: var[]..[]): bool" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "7a98c37fc2ed423a99326e14bbfabb25", + "NodeType": "CodeBlockNode", + "Inputs": [], + "Outputs": [ + { + "Id": "76aa57ea55564a38becba295d85ae879", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "130c0dc44a074f248adae798ec21623b", + "Name": "", + "Description": "Value of expression at line 2", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "efc83b4fb5cb47ba84bd761d7c75f610", + "Name": "", + "Description": "Value of expression at line 3", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "30d3220f220d48199f9bc328dd70ed52", + "Name": "", + "Description": "Value of expression at line 4", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "5480b09e55064d0cadd30c73b29959b9", + "Name": "", + "Description": "Value of expression at line 5", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "cb8a2f9278444af28f390b7c99b0421c", + "Name": "", + "Description": "Value of expression at line 6", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "9;\n0;\n10;\n3;\n5;\n7;" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "98e5a3baa0bc408d9c662177fadf500c", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "805c79f3e1d84919919c8451f7c03f9d", + "Name": "amount", + "Description": "Amount of random numbers the result list will contain.\n\nint", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "72d2f4c9c8c849238fe3ae42484cc7f2", + "Name": "value1", + "Description": "Lower end of the range for the random number.\n\ndouble", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "29da235d34554e74a1ccbd83c7c27334", + "Name": "value2", + "Description": "Higher end of the range for the random number.\n\ndouble", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "50ec1beb0a304890b58f73a5a849a4fc", + "Name": "seed", + "Description": "Seed value for the random number generator.\n\nint", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "ccca9210b64542d99e4b5214f9a990ca", + "Name": "number", + "Description": "List of random numbers in the range [lower_number, higher_number).", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Math.RandomList@int,double,double,int", + "Replication": "Auto", + "Description": "Produces a list containing the given amount of random doubles in the defined range of [lower_number, higher_number) based on an initial seed value.\n\nMath.RandomList (amount: int, value1: double, value2: double, seed: int): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "cded9169891a4994a652e0e6320de247", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "fd13a24a9ac04d4bb656b648a60c3514", + "Name": "amount", + "Description": "Amount of random numbers the result list will contain.\n\nint", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "259567966279487f948ea1ccec8d6c7c", + "Name": "value1", + "Description": "Lower end of the range for the random number.\n\ndouble", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "81a6b27dc8b840188a7f6d8d00c57d0c", + "Name": "value2", + "Description": "Higher end of the range for the random number.\n\ndouble", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "8287fe8395204fdfa4498a3ce7a5624e", + "Name": "seed", + "Description": "Seed value for the random number generator.\n\nint", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "3be1595c7c5243f5b4f3b8534046694a", + "Name": "number", + "Description": "List of random numbers in the range [lower_number, higher_number).", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Math.RandomList@int,double,double,int", + "Replication": "Auto", + "Description": "Produces a list containing the given amount of random doubles in the defined range of [lower_number, higher_number) based on an initial seed value.\n\nMath.RandomList (amount: int, value1: double, value2: double, seed: int): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "507bcbcd570d412d95d0d911e28ad850", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "7d3507f1c0b44989a91c39324f591a14", + "Name": "geometry", + "Description": "Autodesk.DesignScript.Geometry.Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "c74dbc65e7634c41a4a56e0222c570e8", + "Name": "other", + "Description": "Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "7670f3b5c962411a830f3b1fb3d301ed", + "Name": "bool", + "Description": "bool", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Geometry.IsAlmostEqualTo@Autodesk.DesignScript.Geometry.Geometry", + "Replication": "Auto", + "Description": "Check if the two objects have the same representational geometry or numerical values\n\nGeometry.IsAlmostEqualTo (other: Geometry): bool" + }, + { + "ConcreteType": "CoreNodeModels.CreateList, CoreNodeModels", + "VariableInputPorts": true, + "Id": "8283f95dc06e43a1805cc05624916e31", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "b99125d900994e8199837f9bc48d0847", + "Name": "item0", + "Description": "Item Index #0", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "48850bb34fcb44648ff95bf1dd33969f", + "Name": "item1", + "Description": "Item Index #1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "edd1066f0740423aaeec88c88e201541", + "Name": "list", + "Description": "A list (type: var[]..[])", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Makes a new list from the given inputs" + }, + { + "ConcreteType": "CoreNodeModels.CreateList, CoreNodeModels", + "VariableInputPorts": true, + "Id": "74de7332418e4ffca35a2c709ba1a36d", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "3d69176725fb416790fc0aaad87e2286", + "Name": "item0", + "Description": "Item Index #0", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "1f81658ac711494fa6ec3c58ba190c47", + "Name": "item1", + "Description": "Item Index #1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "06ba95aef8904d928e7f81c6d0502469", + "Name": "list", + "Description": "A list (type: var[]..[])", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Makes a new list from the given inputs" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "b338af6eb8594df0adaa521a5f6f708c", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "194f9ece71b7429e834db4ebd58dbcfc", + "Name": "boundingBox", + "Description": "Autodesk.DesignScript.Geometry.BoundingBox", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "963582a83c9c4198b559e35cbbd3f7ef", + "Name": "Point", + "Description": "Point", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.BoundingBox.MinPoint", + "Replication": "Auto", + "Description": "The minimum point\n\nBoundingBox.MinPoint: Point" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "fe6aec3c667e4087916f8ea132b087cd", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "3e931a56c9ef4c0bb9e3628b781e9d23", + "Name": "boundingBox", + "Description": "Autodesk.DesignScript.Geometry.BoundingBox", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "5e91ac5377234266bda30d56af2a3c7e", + "Name": "Point", + "Description": "Point", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.BoundingBox.MaxPoint", + "Replication": "Auto", + "Description": "The maximum point\n\nBoundingBox.MaxPoint: Point" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "59c7c739ca314adb853544a5a12a1093", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "03ead7cb6ead48b496533d155f1f51e3", + "Name": "boundingBox", + "Description": "Autodesk.DesignScript.Geometry.BoundingBox", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "b126fcb6b91e4070a46915deebde26b5", + "Name": "Point", + "Description": "Point", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.BoundingBox.MinPoint", + "Replication": "Auto", + "Description": "The minimum point\n\nBoundingBox.MinPoint: Point" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "48d5660406db42539b4aebe2fbb76591", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "19eeeb3ee91a499bab37dd92a65ee96c", + "Name": "boundingBox", + "Description": "Autodesk.DesignScript.Geometry.BoundingBox", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "3b5823f2170e4da68276da51fa4f361e", + "Name": "Point", + "Description": "Point", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.BoundingBox.MaxPoint", + "Replication": "Auto", + "Description": "The maximum point\n\nBoundingBox.MaxPoint: Point" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "82ee7e54fe7d4faa960d5173d029f181", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "92e5122f31cb43a08ba5c070154e675c", + "Name": "values", + "Description": "A List of values\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "25a42c15733e450cb773c2f4ebf7f09e", + "Name": "json", + "Description": "A JSON string where primitive types (e.g. double, int, boolean), Lists, and Dictionary's will be turned into the associated JSON type.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Data.StringifyJSON@var[]..[]", + "Replication": "Auto", + "Description": "Stringify converts an arbitrary value or a list of arbitrary values to JSON. Replication can be used to apply the operation over a list, producing a list of JSON strings.\n\nData.StringifyJSON (values: var[]..[]): string" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "64fe831fa20c433e8e725720fddc0dfc", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "d0c24164f8074d7d8a6b3d495e93ab7e", + "Name": "json", + "Description": "A JSON string\n\nstring", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "174ad2ab62c04bbb86582e46695d70e3", + "Name": "result", + "Description": "The result type depends on the content of the input string. The result type can be a primitive value (e.g. string, boolean, double), a List, or a Dictionary.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Data.ParseJSON@string", + "Replication": "Auto", + "Description": "Parse converts an arbitrary JSON string to a value. It is the opposite of JSON.Stringify.\n\nData.ParseJSON (json: string): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "bdfd177d16b043df9dbfc86ba43f0e74", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "0cda52fa6a234098bea0779264216bec", + "Name": "geom", + "Description": "Geometry[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "830a6eb77e3e40d18eefcc4a84813059", + "Name": "BoundingBox", + "Description": "BoundingBox", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.BoundingBox.ByGeometry@Autodesk.DesignScript.Geometry.Geometry[]", + "Replication": "Auto", + "Description": "Create an axis-aligned BoundingBox around input Geometry.\n\nBoundingBox.ByGeometry (geom: Geometry[]): BoundingBox" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "fc10da168ed64013be85ae3cb098721a", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "d8822abfa95a4356a4ba63caeaaecd15", + "Name": "amount", + "Description": "Amount of random numbers the result list will contain.\n\nint", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "93e6c1f6b4164f1daee74c173f0f733b", + "Name": "value1", + "Description": "Lower end of the range for the random number.\n\ndouble", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "d9cfdb97a57d4800b33e1b64ea7d025f", + "Name": "value2", + "Description": "Higher end of the range for the random number.\n\ndouble", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "7d0fe8b61df84c3387594c9d72fe6a16", + "Name": "seed", + "Description": "Seed value for the random number generator.\n\nint", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "804d3a300cf44c5c826f1f2bae376fc2", + "Name": "number", + "Description": "List of random numbers in the range [lower_number, higher_number).", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Math.RandomList@int,double,double,int", + "Replication": "Auto", + "Description": "Produces a list containing the given amount of random doubles in the defined range of [lower_number, higher_number) based on an initial seed value.\n\nMath.RandomList (amount: int, value1: double, value2: double, seed: int): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "f1f60638a970426ba830ec8a3395b782", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "9dcb911b0345406ab845d81c84e77d09", + "Name": "x", + "Description": "X coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "5c72fefb48cd449295705453bb16d7ec", + "Name": "y", + "Description": "Y coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "ae4938ad774c4a8cb364032fa884dc6e", + "Name": "z", + "Description": "Z coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "b41d5d6a6a9d432b9d93a1f82d185cf5", + "Name": "Point", + "Description": "Point created by coordinates", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Point.ByCoordinates@double,double,double", + "Replication": "Auto", + "Description": "Form a Point given 3 cartesian coordinates\n\nPoint.ByCoordinates (x: double = 0, y: double = 0, z: double = 0): Point" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "af4f1b4c89eb4063aabe9cc94209b121", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "f29eb933010444b3a78293f59d3dfd66", + "Name": "boundingBox", + "Description": "Autodesk.DesignScript.Geometry.BoundingBox", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "3773e6a8ab6644c5a26a52abfa7c9cee", + "Name": "CoordinateSystem", + "Description": "CoordinateSystem", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.BoundingBox.ContextCoordinateSystem", + "Replication": "Auto", + "Description": "The CoordinateSystem of the BoundingBox. For an axis-aligned box, the CS is oriented along with the X, Y, Z axes and is located at the center of the box. For a non-aligned box, the CS can have an arbitrary orientation and is centered at the center of the box.\n\nBoundingBox.ContextCoordinateSystem: CoordinateSystem" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "71f965cffbad4dcbaa9d3f745dbfb319", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "c2d697f97c7c4fa2abcd55f265da2dcc", + "Name": "boundingBox", + "Description": "Autodesk.DesignScript.Geometry.BoundingBox", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "0b90cc19a1c441d4b5880dc43668b17f", + "Name": "CoordinateSystem", + "Description": "CoordinateSystem", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.BoundingBox.ContextCoordinateSystem", + "Replication": "Auto", + "Description": "The CoordinateSystem of the BoundingBox. For an axis-aligned box, the CS is oriented along with the X, Y, Z axes and is located at the center of the box. For a non-aligned box, the CS can have an arbitrary orientation and is centered at the center of the box.\n\nBoundingBox.ContextCoordinateSystem: CoordinateSystem" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "c689ce7502544e28bf83e454b81d4504", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "766791bcb599482ca5a93c1220d71240", + "Name": "coordinateSystem", + "Description": "Autodesk.DesignScript.Geometry.CoordinateSystem", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "828b58957636403599e3cf2bcd3f82de", + "Name": "other", + "Description": "other coordinate system\n\nCoordinateSystem", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "86553ad678e54c208aed45d7d8adb044", + "Name": "bool", + "Description": "returns true if coordinate systems are equal", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.CoordinateSystem.IsEqualTo@Autodesk.DesignScript.Geometry.CoordinateSystem", + "Replication": "Auto", + "Description": "Determine if two CoordinateSystems are equal\n\nCoordinateSystem.IsEqualTo (other: CoordinateSystem): bool" + }, + { + "ConcreteType": "CoreNodeModels.CreateList, CoreNodeModels", + "VariableInputPorts": true, + "Id": "24d75003a8854041ba1ea18419520f1d", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "b7afb7f5be63445fa47c4ea40eb5d500", + "Name": "item0", + "Description": "Item Index #0", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "bf36a011238c4b0d9eaca8a2bbd2fdad", + "Name": "item1", + "Description": "Item Index #1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "34168659c91b4f1190d0bb5b8d189145", + "Name": "item2", + "Description": "Item Index #2", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "19d0f9fd40cf47eb88dd77f6cf1174ac", + "Name": "list", + "Description": "A list (type: var[]..[])", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Makes a new list from the given inputs" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "e5cdcbc5eba94e4ebd67e91a7d5e90ba", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "f0452e5f68b342eda3acb3ab919925e9", + "Name": "list", + "Description": "List to flatten.\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "6b0af9e9bf3f4c2a897ced38aa58fdb9", + "Name": "amount", + "Description": "Layers of list nesting to remove (-1 will remove all list nestings)\n\nint\nDefault value : -1", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "57dc77262dbf47c5baeda2364284ceab", + "Name": "list", + "Description": "Flattened list by amount", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.List.Flatten@var[]..[],int", + "Replication": "Auto", + "Description": "Flattens a nested list of lists by a certain amount.\n\nList.Flatten (list: var[]..[], amount: int = -1): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "7857353a4b8e4ef6ae11b29af5a5c2cc", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "eced9a0275974dd09451ec87789038ad", + "Name": "x", + "Description": "Basic type object to compare (e.g. bool, int, double, string, etc.)\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "55f782dc470f4803937b89eae4ccbe82", + "Name": "y", + "Description": "Basic type object to compare (e.g. bool, int, double, string, etc.)\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "337cc0c0d19c414084c7c55def818f4e", + "Name": "bool", + "Description": "Result of equality check", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "==@var[]..[],var[]..[]", + "Replication": "Auto", + "Description": "Compares if x and y are equal\n\n== (x: var[]..[], y: var[]..[]): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "8a830d830efd4c79b1f97e5d529557ed", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "ba54f9ef67a741c780ef9f6f5a3af7fb", + "Name": "object", + "Description": "Object to query type\n\nvar", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "19374f572a0d48e5af380a244c4d482a", + "Name": "string", + "Description": "Type of object.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Object.Type@var", + "Replication": "Auto", + "Description": "Returns the type of object represented as string.\n\nObject.Type (object: var): string" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "8620ae5e3da849078f6c3dddcc26db8c", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "d2ae16e452dc495fa8b0254f8d22ac12", + "Name": "object", + "Description": "Object to query type\n\nvar", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "8913a60f8c584e0289e5f83afc2c5874", + "Name": "string", + "Description": "Type of object.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Object.Type@var", + "Replication": "Auto", + "Description": "Returns the type of object represented as string.\n\nObject.Type (object: var): string" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "5a93b6606ed8481b90c3d55cd79b1f6b", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "aa6e23e9cfb5412eaf2033976cd07b26", + "Name": "geom", + "Description": "Geometry[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "478da5049ac342d5a30db63918d722bb", + "Name": "BoundingBox", + "Description": "Oriented bounding box arounding input geometries.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.BoundingBox.ByMinimumVolume@Autodesk.DesignScript.Geometry.Geometry[]", + "Replication": "Auto", + "Description": "Create a non-axis-aligned, minimum-volume, oriented bounding box around the input geometries.\n\nBoundingBox.ByMinimumVolume (geom: Geometry[]): BoundingBox" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "6ff2bf724c3a4f3e80e99a83358a3302", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "a5289b150c5945abae67d20f515bb918", + "Name": "values", + "Description": "A List of values\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "b07be70ebb8246f2b431f52f556769a0", + "Name": "json", + "Description": "A JSON string where primitive types (e.g. double, int, boolean), Lists, and Dictionary's will be turned into the associated JSON type.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Data.StringifyJSON@var[]..[]", + "Replication": "Auto", + "Description": "Stringify converts an arbitrary value or a list of arbitrary values to JSON. Replication can be used to apply the operation over a list, producing a list of JSON strings.\n\nData.StringifyJSON (values: var[]..[]): string" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "9d611e10bea84fbc93648516e9f677f7", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "3192bc396a234c0491d95c047d36adf7", + "Name": "object", + "Description": "Object to test.\n\nvar", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "0fde4b370198411bb7291b33196ecf8f", + "Name": "bool", + "Description": "Whether object is null.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Object.IsNull@var", + "Replication": "Auto", + "Description": "Determines if the given object is null.\n\nObject.IsNull (object: var): bool" + } + ], + "Connectors": [ + { + "Start": "76aa57ea55564a38becba295d85ae879", + "End": "fd13a24a9ac04d4bb656b648a60c3514", + "Id": "b8705b1f3b504c76bfc662fbb018e106", + "IsHidden": "False" + }, + { + "Start": "76aa57ea55564a38becba295d85ae879", + "End": "805c79f3e1d84919919c8451f7c03f9d", + "Id": "bbe3eb5dc3df464aae10393f5b1142df", + "IsHidden": "False" + }, + { + "Start": "76aa57ea55564a38becba295d85ae879", + "End": "d8822abfa95a4356a4ba63caeaaecd15", + "Id": "ae766b33b62f4f9daa10f21b8bea4ba9", + "IsHidden": "False" + }, + { + "Start": "130c0dc44a074f248adae798ec21623b", + "End": "72d2f4c9c8c849238fe3ae42484cc7f2", + "Id": "74e9427e5fec47889ab10c7b1f768091", + "IsHidden": "False" + }, + { + "Start": "130c0dc44a074f248adae798ec21623b", + "End": "259567966279487f948ea1ccec8d6c7c", + "Id": "576c30342ae2457fb84c157ff69a0839", + "IsHidden": "False" + }, + { + "Start": "130c0dc44a074f248adae798ec21623b", + "End": "93e6c1f6b4164f1daee74c173f0f733b", + "Id": "cec32f4f98a042caa979fa3c3585a81b", + "IsHidden": "False" + }, + { + "Start": "efc83b4fb5cb47ba84bd761d7c75f610", + "End": "29da235d34554e74a1ccbd83c7c27334", + "Id": "419eea921abd4c8d983b03b0a3edf855", + "IsHidden": "False" + }, + { + "Start": "efc83b4fb5cb47ba84bd761d7c75f610", + "End": "81a6b27dc8b840188a7f6d8d00c57d0c", + "Id": "c4cbb1101a304ede8b8486e8b6ac9d6a", + "IsHidden": "False" + }, + { + "Start": "efc83b4fb5cb47ba84bd761d7c75f610", + "End": "d9cfdb97a57d4800b33e1b64ea7d025f", + "Id": "e7a4c7911a4945ab8f525a6ee414145c", + "IsHidden": "False" + }, + { + "Start": "30d3220f220d48199f9bc328dd70ed52", + "End": "50ec1beb0a304890b58f73a5a849a4fc", + "Id": "9ba43c2f8da84bd9aedaee7d527d08e5", + "IsHidden": "False" + }, + { + "Start": "5480b09e55064d0cadd30c73b29959b9", + "End": "8287fe8395204fdfa4498a3ce7a5624e", + "Id": "a06412f71e2d42228ae471026623bafc", + "IsHidden": "False" + }, + { + "Start": "cb8a2f9278444af28f390b7c99b0421c", + "End": "7d0fe8b61df84c3387594c9d72fe6a16", + "Id": "7f9a6c5cadec423ea7c848a0d54263ef", + "IsHidden": "False" + }, + { + "Start": "ccca9210b64542d99e4b5214f9a990ca", + "End": "9dcb911b0345406ab845d81c84e77d09", + "Id": "a20e0b59fea7473aa76cfefdc0c831f2", + "IsHidden": "False" + }, + { + "Start": "3be1595c7c5243f5b4f3b8534046694a", + "End": "5c72fefb48cd449295705453bb16d7ec", + "Id": "ca5bd90191144e96a1d33debaa9f7091", + "IsHidden": "False" + }, + { + "Start": "7670f3b5c962411a830f3b1fb3d301ed", + "End": "bf36a011238c4b0d9eaca8a2bbd2fdad", + "Id": "2880fabd34454cbfb3c34e36a487c6e7", + "IsHidden": "False" + }, + { + "Start": "edd1066f0740423aaeec88c88e201541", + "End": "c74dbc65e7634c41a4a56e0222c570e8", + "Id": "5a206782add74746b73e2999a31046ac", + "IsHidden": "False" + }, + { + "Start": "06ba95aef8904d928e7f81c6d0502469", + "End": "7d3507f1c0b44989a91c39324f591a14", + "Id": "20edba3f0f6448a4adf2d7abfdf09d2c", + "IsHidden": "False" + }, + { + "Start": "963582a83c9c4198b559e35cbbd3f7ef", + "End": "b99125d900994e8199837f9bc48d0847", + "Id": "04825386d24e4fe4ad368fec6cca2bfb", + "IsHidden": "False" + }, + { + "Start": "5e91ac5377234266bda30d56af2a3c7e", + "End": "48850bb34fcb44648ff95bf1dd33969f", + "Id": "9b62ce2fc501499d86c22728e2e592c6", + "IsHidden": "False" + }, + { + "Start": "b126fcb6b91e4070a46915deebde26b5", + "End": "3d69176725fb416790fc0aaad87e2286", + "Id": "ae3790f1e1a145d396c147f902edfaca", + "IsHidden": "False" + }, + { + "Start": "3b5823f2170e4da68276da51fa4f361e", + "End": "1f81658ac711494fa6ec3c58ba190c47", + "Id": "537a060916894f7b81e2da8eec14ab45", + "IsHidden": "False" + }, + { + "Start": "25a42c15733e450cb773c2f4ebf7f09e", + "End": "d0c24164f8074d7d8a6b3d495e93ab7e", + "Id": "dc6f48179169487bb117865714bc5bdd", + "IsHidden": "False" + }, + { + "Start": "174ad2ab62c04bbb86582e46695d70e3", + "End": "194f9ece71b7429e834db4ebd58dbcfc", + "Id": "ed7fdcf13a4a42b19816999a8fb085bf", + "IsHidden": "False" + }, + { + "Start": "174ad2ab62c04bbb86582e46695d70e3", + "End": "3e931a56c9ef4c0bb9e3628b781e9d23", + "Id": "8296b63322594b948924792fd503978e", + "IsHidden": "False" + }, + { + "Start": "174ad2ab62c04bbb86582e46695d70e3", + "End": "c2d697f97c7c4fa2abcd55f265da2dcc", + "Id": "38c7ba70ac6845dca355aff42a3eee0b", + "IsHidden": "False" + }, + { + "Start": "174ad2ab62c04bbb86582e46695d70e3", + "End": "d2ae16e452dc495fa8b0254f8d22ac12", + "Id": "1261a402a07a406e858ed88cde6fac6a", + "IsHidden": "False" + }, + { + "Start": "830a6eb77e3e40d18eefcc4a84813059", + "End": "03ead7cb6ead48b496533d155f1f51e3", + "Id": "a75bf2700d31473e94ef3786385d3ac5", + "IsHidden": "False" + }, + { + "Start": "830a6eb77e3e40d18eefcc4a84813059", + "End": "19eeeb3ee91a499bab37dd92a65ee96c", + "Id": "25a166c8810542cb9eb6ee71b27781b6", + "IsHidden": "False" + }, + { + "Start": "830a6eb77e3e40d18eefcc4a84813059", + "End": "92e5122f31cb43a08ba5c070154e675c", + "Id": "f770ebb4a2dc44c7a7b161c71f46964a", + "IsHidden": "False" + }, + { + "Start": "830a6eb77e3e40d18eefcc4a84813059", + "End": "f29eb933010444b3a78293f59d3dfd66", + "Id": "b4c978d6c16c4b76b3d3e00407eb05ea", + "IsHidden": "False" + }, + { + "Start": "830a6eb77e3e40d18eefcc4a84813059", + "End": "ba54f9ef67a741c780ef9f6f5a3af7fb", + "Id": "0cc8e596176649479752ded3b2b1e81a", + "IsHidden": "False" + }, + { + "Start": "804d3a300cf44c5c826f1f2bae376fc2", + "End": "ae4938ad774c4a8cb364032fa884dc6e", + "Id": "27c53d2941f244e1815adec7a0d2d6e6", + "IsHidden": "False" + }, + { + "Start": "b41d5d6a6a9d432b9d93a1f82d185cf5", + "End": "0cda52fa6a234098bea0779264216bec", + "Id": "bf51f36bdb484ef78ae2c4f632bb5267", + "IsHidden": "False" + }, + { + "Start": "b41d5d6a6a9d432b9d93a1f82d185cf5", + "End": "aa6e23e9cfb5412eaf2033976cd07b26", + "Id": "65e56543487a45bd866016ec585ee636", + "IsHidden": "False" + }, + { + "Start": "3773e6a8ab6644c5a26a52abfa7c9cee", + "End": "766791bcb599482ca5a93c1220d71240", + "Id": "c72e7e78bec1479eb3465add4c864b32", + "IsHidden": "False" + }, + { + "Start": "0b90cc19a1c441d4b5880dc43668b17f", + "End": "828b58957636403599e3cf2bcd3f82de", + "Id": "1a2bb89497954b2a957f568f448bc810", + "IsHidden": "False" + }, + { + "Start": "86553ad678e54c208aed45d7d8adb044", + "End": "b7afb7f5be63445fa47c4ea40eb5d500", + "Id": "58bcb98905964a3d8f9701320823b9af", + "IsHidden": "False" + }, + { + "Start": "19d0f9fd40cf47eb88dd77f6cf1174ac", + "End": "f0452e5f68b342eda3acb3ab919925e9", + "Id": "b5a03253967b49478d2ee092c48e18de", + "IsHidden": "False" + }, + { + "Start": "57dc77262dbf47c5baeda2364284ceab", + "End": "dbcac05940544a66b4609df6f02a96c6", + "Id": "61f455409e4f421c89241dafbd34efbe", + "IsHidden": "False" + }, + { + "Start": "337cc0c0d19c414084c7c55def818f4e", + "End": "34168659c91b4f1190d0bb5b8d189145", + "Id": "42e37ba3c8d249239a8400b8c61ec193", + "IsHidden": "False" + }, + { + "Start": "19374f572a0d48e5af380a244c4d482a", + "End": "eced9a0275974dd09451ec87789038ad", + "Id": "5e9f13d39bb54c6890c90f1de83a1c89", + "IsHidden": "False" + }, + { + "Start": "8913a60f8c584e0289e5f83afc2c5874", + "End": "55f782dc470f4803937b89eae4ccbe82", + "Id": "228edf74207c4fd3a5cdd836a56cb5c8", + "IsHidden": "False" + }, + { + "Start": "478da5049ac342d5a30db63918d722bb", + "End": "a5289b150c5945abae67d20f515bb918", + "Id": "8895f871961d4ab2b0fac706faadeb99", + "IsHidden": "False" + }, + { + "Start": "b07be70ebb8246f2b431f52f556769a0", + "End": "3192bc396a234c0491d95c047d36adf7", + "Id": "dab366c4de5a4c3ca960ad8536cdf540", + "IsHidden": "False" + } + ], + "Dependencies": [], + "NodeLibraryDependencies": [], + "Thumbnail": "", + "GraphDocumentationURL": null, + "ExtensionWorkspaceData": [ + { + "ExtensionGuid": "28992e1d-abb9-417f-8b1b-05e053bee670", + "Name": "Properties", + "Version": "3.0", + "Data": {} + } + ], + "Author": "None provided", + "Linting": { + "activeLinter": "None", + "activeLinterId": "7b75fb44-43fd-4631-a878-29f4d5d8399a", + "warningCount": 0, + "errorCount": 0 + }, + "Bindings": [], + "View": { + "Dynamo": { + "ScaleFactor": 1.0, + "HasRunWithoutCrash": true, + "IsVisibleInDynamoLibrary": true, + "Version": "3.0.0.5795", + "RunType": "Automatic", + "RunPeriod": "1000" + }, + "Camera": { + "Name": "_Background Preview", + "EyeX": 35.09547424316406, + "EyeY": 24.787124633789062, + "EyeZ": 10.063484191894531, + "LookX": -28.12316131591797, + "LookY": -23.191600799560547, + "LookZ": -17.193134307861328, + "UpX": -0.32993781566619873, + "UpY": 0.9222010374069214, + "UpZ": -0.20170855522155762 + }, + "ConnectorPins": [], + "NodeViews": [ + { + "Id": "abb39e07db0845cf9438478defffbf68", + "Name": "List.AllTrue", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1790.450830660846, + "Y": -1199.8609329452945 + }, + { + "Id": "7a98c37fc2ed423a99326e14bbfabb25", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": false, + "X": -1504.9531320290353, + "Y": -1010.2705228420084 + }, + { + "Id": "98e5a3baa0bc408d9c662177fadf500c", + "Name": "Math.RandomList", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -1223.2795389877897, + "Y": -1130.584561583225 + }, + { + "Id": "cded9169891a4994a652e0e6320de247", + "Name": "Math.RandomList", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -1223.6681721741015, + "Y": -894.7442067753082 + }, + { + "Id": "507bcbcd570d412d95d0d911e28ad850", + "Name": "Geometry.IsAlmostEqualTo", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 902.1696902691126, + "Y": -1090.5829784023829 + }, + { + "Id": "8283f95dc06e43a1805cc05624916e31", + "Name": "List Create", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 630.693366178129, + "Y": -823.165104150926 + }, + { + "Id": "74de7332418e4ffca35a2c709ba1a36d", + "Name": "List Create", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 642.1229196832703, + "Y": -1177.569344449488 + }, + { + "Id": "b338af6eb8594df0adaa521a5f6f708c", + "Name": "BoundingBox.MinPoint", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 283.19336617812917, + "Y": -820.165104150926 + }, + { + "Id": "fe6aec3c667e4087916f8ea132b087cd", + "Name": "BoundingBox.MaxPoint", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 283.19336617812917, + "Y": -673.165104150926 + }, + { + "Id": "59c7c739ca314adb853544a5a12a1093", + "Name": "BoundingBox.MinPoint", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 281.795423362158, + "Y": -1255.2604143400542 + }, + { + "Id": "48d5660406db42539b4aebe2fbb76591", + "Name": "BoundingBox.MaxPoint", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 281.795423362158, + "Y": -1108.260414340054 + }, + { + "Id": "82ee7e54fe7d4faa960d5173d029f181", + "Name": "Data.StringifyJSON", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -330.204576637842, + "Y": -885.7604143400542 + }, + { + "Id": "64fe831fa20c433e8e725720fddc0dfc", + "Name": "Data.ParseJSON", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -12.204576637842024, + "Y": -885.7604143400542 + }, + { + "Id": "bdfd177d16b043df9dbfc86ba43f0e74", + "Name": "BoundingBox.ByGeometry", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -699.704576637842, + "Y": -1108.260414340054 + }, + { + "Id": "fc10da168ed64013be85ae3cb098721a", + "Name": "Math.RandomList", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -1226.2071881293928, + "Y": -648.1950505817614 + }, + { + "Id": "f1f60638a970426ba830ec8a3395b782", + "Name": "Point.ByCoordinates", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -932.4157874416844, + "Y": -926.203066680314 + }, + { + "Id": "af4f1b4c89eb4063aabe9cc94209b121", + "Name": "BoundingBox.ContextCoordinateSystem", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 285.9016027556976, + "Y": -1399.9518740059382 + }, + { + "Id": "71f965cffbad4dcbaa9d3f745dbfb319", + "Name": "BoundingBox.ContextCoordinateSystem", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 280.70780933434435, + "Y": -963.1557078378798 + }, + { + "Id": "c689ce7502544e28bf83e454b81d4504", + "Name": "CoordinateSystem.IsEqualTo", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 892.8864084289825, + "Y": -1345.362030730563 + }, + { + "Id": "24d75003a8854041ba1ea18419520f1d", + "Name": "List Create", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1300.756565289894, + "Y": -1200.644793426277 + }, + { + "Id": "e5cdcbc5eba94e4ebd67e91a7d5e90ba", + "Name": "List.Flatten", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1531.734260738786, + "Y": -1199.0754807680996 + }, + { + "Id": "7857353a4b8e4ef6ae11b29af5a5c2cc", + "Name": "==", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 279.2742896528905, + "Y": -498.33127402804655 + }, + { + "Id": "8a830d830efd4c79b1f97e5d529557ed", + "Name": "Object.Type", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -25.198026950789654, + "Y": -561.689661112296 + }, + { + "Id": "8620ae5e3da849078f6c3dddcc26db8c", + "Name": "Object.Type", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -28.777348628623486, + "Y": -416.43890910424386 + }, + { + "Id": "5a93b6606ed8481b90c3d55cd79b1f6b", + "Name": "BoundingBox.ByMinimumVolume", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -821.9708667970486, + "Y": 366.18329630864844 + }, + { + "Id": "6ff2bf724c3a4f3e80e99a83358a3302", + "Name": "Data.StringifyJSON", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -311.2104414594388, + "Y": 361.68160359268904 + }, + { + "Id": "9d611e10bea84fbc93648516e9f677f7", + "Name": "Object.IsNull", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 119.07778009177628, + "Y": 358.0259785393598 + } + ], + "Annotations": [ + { + "Id": "05a977558b984d5ab4b6fed123a88c7c", + "Title": "All True", + "DescriptionText": "", + "IsExpanded": true, + "WidthAdjustment": 0.0, + "HeightAdjustment": 0.0, + "Nodes": [ + "abb39e07db0845cf9438478defffbf68" + ], + "HasNestedGroups": false, + "Left": 1780.450830660846, + "Top": -1272.8609329452945, + "Width": 196.0, + "Height": 205.0, + "FontSize": 36.0, + "GroupStyleId": "00000000-0000-0000-0000-000000000000", + "InitialTop": -1199.8609329452945, + "InitialHeight": 145.0, + "TextblockHeight": 63.0, + "Background": "#FFC1D676" + } + ], + "X": 262.2892414347258, + "Y": 1118.712207231586, + "Zoom": 0.6845541303655803 + } +} \ No newline at end of file diff --git a/test/core/json/Abstract_CoordinateSystem_JSONParsing.dyn b/test/core/json/Abstract_CoordinateSystem_JSONParsing.dyn new file mode 100644 index 00000000000..19eae3aee66 --- /dev/null +++ b/test/core/json/Abstract_CoordinateSystem_JSONParsing.dyn @@ -0,0 +1,4200 @@ +{ + "Uuid": "37cc18f8-e26e-4581-8879-b3bec7f4a87f", + "IsCustomNode": false, + "Description": "", + "Name": "Abstract_CoordinateSystem_JSONParsing", + "ElementResolver": { + "ResolutionMap": {} + }, + "Inputs": [], + "Outputs": [], + "Nodes": [ + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "22e53f300eb1475998c3524582853005", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "54826b4ee4634b2292104b007d4028e0", + "Name": "x", + "Description": "X coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "1d2c5973d9d843d5b0bff0396619fd23", + "Name": "y", + "Description": "Y coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "c89f7d1062e147f3b71a474ae397584b", + "Name": "z", + "Description": "Z coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "358c569b10fb49a98727956c5f8d8676", + "Name": "Vector", + "Description": "Vector created by coordinates", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Vector.ByCoordinates@double,double,double", + "Replication": "Auto", + "Description": "Form a Vector by 3 Euclidean coordinates\n\nVector.ByCoordinates (x: double = 0, y: double = 0, z: double = 0): Vector" + }, + { + "ConcreteType": "CoreNodeModels.Input.DoubleInput, CoreNodeModels", + "NumberType": "Double", + "Id": "0bc4537fdaaa49989eae460399fb3b32", + "NodeType": "NumberInputNode", + "Inputs": [], + "Outputs": [ + { + "Id": "14c2eb659c554fb5b278670c57d1167c", + "Name": "", + "Description": "Double", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Creates a number", + "InputValue": 24.0 + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "241bf2a7dfa446fe9ab9d98885faffbb", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "087585b5b54d4ce4a2061865c303ff64", + "Name": "x", + "Description": "double\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "811805415d244b1d941d1ef1d1ab34d8", + "Name": "y", + "Description": "double\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "6874362eb06949e98e00f248bdbfbc4b", + "Name": "z", + "Description": "double\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "fb22aece6bd44a8f8a0fba80f6934b44", + "Name": "CoordinateSystem", + "Description": "CoordinateSystem", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.CoordinateSystem.ByOrigin@double,double,double", + "Replication": "Auto", + "Description": "Create a CoordinateSystem with origin at X, Y, and Z locations, with X and Y Axes set as WCS X and Y Axes.\n\nCoordinateSystem.ByOrigin (x: double = 0, y: double = 0, z: double = 0): CoordinateSystem" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "4da7356557ca463889c7a43a48c3f5e2", + "NodeType": "CodeBlockNode", + "Inputs": [], + "Outputs": [ + { + "Id": "d111df8a46fc44caa3f4b90fda2b54ba", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "13082af8e52f42468ee059e8d801d2e7", + "Name": "", + "Description": "Value of expression at line 2", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "ae170ad9a05c4d0c8d3a0e37b078bede", + "Name": "", + "Description": "Value of expression at line 3", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "2;\n3;\n4;" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "a12836e87b3941e2be2f3f3345d2a280", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "3d03f11d2c154d74aa4460b34f12efa8", + "Name": "coordinateSystem", + "Description": "Autodesk.DesignScript.Geometry.CoordinateSystem", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "04f2acd5c11549cb81418a69876c7810", + "Name": "origin", + "Description": "Origin point\n\nPoint", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "b47ea166cd7e41b99531b0447be823d1", + "Name": "axis", + "Description": "Vector axis for rotation\n\nVector", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "bc5ba4d74ab642c79f7e4414fdc30b78", + "Name": "degrees", + "Description": "Degrees to rotate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "52d3bb672ee34752a7a61a8af5258735", + "Name": "CoordinateSystem", + "Description": "Rotated coordinate system", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.CoordinateSystem.Rotate@Autodesk.DesignScript.Geometry.Point,Autodesk.DesignScript.Geometry.Vector,double", + "Replication": "Auto", + "Description": "Rotates an object around an origin and an axis by a specified degree\n\nCoordinateSystem.Rotate (origin: Point, axis: Vector, degrees: double = 0): CoordinateSystem" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "e2057a3ed3ed4f8caf8b45da2e9c4cb8", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "d8ec788aa8e94cdfa2c61cfc7e40d2e6", + "Name": "x", + "Description": "X coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "d182d12cf246417497946b2a31a73b43", + "Name": "y", + "Description": "Y coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "9314f77dc60a4dc5a2dcd838a090c5fd", + "Name": "z", + "Description": "Z coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "98df6472dc1344bdbb7948e7b4246bd4", + "Name": "Point", + "Description": "Point created by coordinates", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Point.ByCoordinates@double,double,double", + "Replication": "Auto", + "Description": "Form a Point given 3 cartesian coordinates\n\nPoint.ByCoordinates (x: double = 0, y: double = 0, z: double = 0): Point" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "37f0e1cc45554aaebcc9b5bd473edd8f", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "e517ef8de5e949f0b65bd0dd245e92e4", + "Name": "coordinateSystem", + "Description": "Autodesk.DesignScript.Geometry.CoordinateSystem", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "dd81588661dc43948a2e181f15d56033", + "Name": "amount", + "Description": "Amount to scale\n\ndouble\nDefault value : 1", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "b78eb7328f2946c59c46b6b7103196d7", + "Name": "CoordinateSystem", + "Description": "Scaled coordinate system", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.CoordinateSystem.Scale@double", + "Replication": "Auto", + "Description": "Scale uniformly around the origin\n\nCoordinateSystem.Scale (amount: double = 1): CoordinateSystem" + }, + { + "ConcreteType": "CoreNodeModels.Input.DoubleInput, CoreNodeModels", + "NumberType": "Double", + "Id": "3a3710a0e86244319ab0f9660e730787", + "NodeType": "NumberInputNode", + "Inputs": [], + "Outputs": [ + { + "Id": "6161802dedd3457fa3d101bbe9e793b8", + "Name": "", + "Description": "Double", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Creates a number", + "InputValue": 2.3 + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "6bc521aaf88d45d7b693826696da12ce", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "07dfa5dfbc994255913fcca13d83d82c", + "Name": "json", + "Description": "A JSON string\n\nstring", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "40a3138e3ced422682f810e5e6591290", + "Name": "result", + "Description": "The result type depends on the content of the input string. The result type can be a primitive value (e.g. string, boolean, double), a List, or a Dictionary.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Data.ParseJSON@string", + "Replication": "Auto", + "Description": "Parse converts an arbitrary JSON string to a value. It is the opposite of JSON.Stringify.\n\nData.ParseJSON (json: string): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "fc6532b4da0b48189963aa13d810b3e7", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "0ad656a7009f4b498ff84597c91ae7fe", + "Name": "values", + "Description": "A List of values\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "3097f0d177984bfbbff60a413fff1d04", + "Name": "json", + "Description": "A JSON string where primitive types (e.g. double, int, boolean), Lists, and Dictionary's will be turned into the associated JSON type.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Data.StringifyJSON@var[]..[]", + "Replication": "Auto", + "Description": "Stringify converts an arbitrary value or a list of arbitrary values to JSON. Replication can be used to apply the operation over a list, producing a list of JSON strings.\n\nData.StringifyJSON (values: var[]..[]): string" + }, + { + "ConcreteType": "CoreNodeModels.CreateList, CoreNodeModels", + "VariableInputPorts": true, + "Id": "3291662b2ec74e7095e042faeab310fe", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "d9aef971dd3c46be8306597fe0d5734f", + "Name": "item0", + "Description": "Item Index #0", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "8eee7c201812431286c5dbe3d0b2e2db", + "Name": "item1", + "Description": "Item Index #1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "e99e37b52261453991b69bb4961f00a1", + "Name": "item2", + "Description": "Item Index #2", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "f81846c67dfc49c2974767ff3f20699e", + "Name": "item3", + "Description": "Item Index #3", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "f19413fe1df245fa97b12b00cb9c1e3c", + "Name": "item4", + "Description": "Item Index #4", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "2d89ba9286b24cbbb2c5d5539019b71f", + "Name": "item5", + "Description": "Item Index #5", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "58e1ddcd5d4244b08bfcc1534f29a3d0", + "Name": "item6", + "Description": "Item Index #6", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "a4e35a1b1b344e21aca6a35373dda28d", + "Name": "list", + "Description": "A list (type: var[]..[])", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Makes a new list from the given inputs" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "07366adaf0954529b1ed39b240192c96", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "4b311b70c9484de79bc3ee7bdb44bd85", + "Name": "list", + "Description": "List to be checked on whether all items are true.\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "0d002566877f43f1bd71e59ca7f6998e", + "Name": "bool", + "Description": "True if all items from list are true, false if one or more items is not true", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.List.AllTrue@var[]..[]", + "Replication": "Auto", + "Description": "Determines if all items in the given list is a boolean and has a true value.\n\nList.AllTrue (list: var[]..[]): bool" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "7e1a26f99b3c4b5780dce102ada6cd6d", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "2262f782a9c84a588861d901331dd85c", + "Name": "coordinateSystem", + "Description": "Autodesk.DesignScript.Geometry.CoordinateSystem", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "a567e41cd9234d48b4c2422bf55a2bb4", + "Name": "xamount", + "Description": "Amount to scale in X axis\n\ndouble\nDefault value : 1", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "10bb0563b6ca41cea98e2cffaae25278", + "Name": "yamount", + "Description": "Amount to scale in y axis\n\ndouble\nDefault value : 1", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "7692810246e046e48f4f0c467e5b6cf5", + "Name": "zamount", + "Description": "Amount to scale in z axis\n\ndouble\nDefault value : 1", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "6a14b327955e4060bdbdc6fdfbf306dd", + "Name": "CoordinateSystem", + "Description": "Scaled coordinate system", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.CoordinateSystem.Scale@double,double,double", + "Replication": "Auto", + "Description": "Scale non-uniformly around the origin\n\nCoordinateSystem.Scale (xamount: double = 1, yamount: double = 1, zamount: double = 1): CoordinateSystem" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "0e9e859b9c774a968c68041b069ef5da", + "NodeType": "CodeBlockNode", + "Inputs": [], + "Outputs": [ + { + "Id": "5e5b0279e9c942ce9339dc301a914f71", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "2ab81a19f1bb4cafa5b7006219ea4116", + "Name": "", + "Description": "Value of expression at line 2", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "d186d794935c46599fd410120fcdbfca", + "Name": "", + "Description": "Value of expression at line 3", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "1;\n2;\n3;" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "6f8f54c01df74aacb8d171cb8f5d79d7", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "c5001fa7306d46bea00bf943ea9fba72", + "Name": "coordinateSystem", + "Description": "Autodesk.DesignScript.Geometry.CoordinateSystem", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "57108fb674fe4f89822cd4b0d8013dfc", + "Name": "other", + "Description": "other coordinate system\n\nCoordinateSystem", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "c8960095e2ce4db499632ebbdeb9c70f", + "Name": "bool", + "Description": "returns true if coordinate systems are equal", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.CoordinateSystem.IsEqualTo@Autodesk.DesignScript.Geometry.CoordinateSystem", + "Replication": "Auto", + "Description": "Determine if two CoordinateSystems are equal\n\nCoordinateSystem.IsEqualTo (other: CoordinateSystem): bool" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "8dc415228aa74dcc92b36cce79eda8c6", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "1c92dbc3eed146d1b717d7a8aba222e9", + "Name": "coordinateSystem", + "Description": "Autodesk.DesignScript.Geometry.CoordinateSystem", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "d4d3b1714bca4934bbcecf0cc8782038", + "Name": "other", + "Description": "other coordinate system\n\nCoordinateSystem", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "bea304d866804f31864e8a09232c1299", + "Name": "bool", + "Description": "returns true if coordinate systems are equal", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.CoordinateSystem.IsEqualTo@Autodesk.DesignScript.Geometry.CoordinateSystem", + "Replication": "Auto", + "Description": "Determine if two CoordinateSystems are equal\n\nCoordinateSystem.IsEqualTo (other: CoordinateSystem): bool" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "e23630a0fa1b4ccfb9ccdb648a4ec170", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "e4174814a9be43cc8366ede18d656428", + "Name": "json", + "Description": "A JSON string\n\nstring", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "2a457884c264445d821adaa9efe691ca", + "Name": "result", + "Description": "The result type depends on the content of the input string. The result type can be a primitive value (e.g. string, boolean, double), a List, or a Dictionary.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Data.ParseJSON@string", + "Replication": "Auto", + "Description": "Parse converts an arbitrary JSON string to a value. It is the opposite of JSON.Stringify.\n\nData.ParseJSON (json: string): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "c7e93a510ea2491b9d048af595a50e93", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "c195c0ab835a4664bd93359e2a4e45cc", + "Name": "values", + "Description": "A List of values\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "69c2895e09bd4796b62af88d49102389", + "Name": "json", + "Description": "A JSON string where primitive types (e.g. double, int, boolean), Lists, and Dictionary's will be turned into the associated JSON type.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Data.StringifyJSON@var[]..[]", + "Replication": "Auto", + "Description": "Stringify converts an arbitrary value or a list of arbitrary values to JSON. Replication can be used to apply the operation over a list, producing a list of JSON strings.\n\nData.StringifyJSON (values: var[]..[]): string" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "b1d843238ffe4994bbd83d4c9f25452d", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "a13c775237824526a24ad7d976b21c5e", + "Name": "coordinateSystem", + "Description": "Autodesk.DesignScript.Geometry.CoordinateSystem", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "695a416323874b0fb0f80de3f5200aea", + "Name": "Point", + "Description": "Point", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.CoordinateSystem.Origin", + "Replication": "Auto", + "Description": "Creates a Point representing the CoordinateSystem origin.\n\nCoordinateSystem.Origin: Point" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "8f4d823e681244d88b157af31610015d", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "1e57b99e34314a97a3a68aa4cae33b47", + "Name": "coordinateSystem", + "Description": "Autodesk.DesignScript.Geometry.CoordinateSystem", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "b6c0759c2ec5412f9559c1d8c0500793", + "Name": "Vector", + "Description": "Vector", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.CoordinateSystem.XAxis", + "Replication": "Auto", + "Description": "Returns X Axis of CoordinateSystem.\n\nCoordinateSystem.XAxis: Vector" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "d16aa11f26cd432099f1b2cfc32d4d4f", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "cf00792f3111495487dd870711f1b525", + "Name": "coordinateSystem", + "Description": "Autodesk.DesignScript.Geometry.CoordinateSystem", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "533bfc1886a34b01a9103e1cdc720ff8", + "Name": "double", + "Description": "double", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.CoordinateSystem.XScaleFactor", + "Replication": "Auto", + "Description": "Returns the X Axis scaling of the CoordinateSystem: the length of the X Axis vector.\n\nCoordinateSystem.XScaleFactor: double" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "f1a9bb7e1fdb45aeb1aa23e4880bc04b", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "152eeeb96a604f6faa1dc44fb8a1d5af", + "Name": "coordinateSystem", + "Description": "Autodesk.DesignScript.Geometry.CoordinateSystem", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "ad1bdf3d455a480a9b83abc50e7a7bb0", + "Name": "Vector", + "Description": "Vector", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.CoordinateSystem.YAxis", + "Replication": "Auto", + "Description": "Returns Y Axis of CoordinateSystem.\n\nCoordinateSystem.YAxis: Vector" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "d3228bc0ed594154a31d4b18a5000d45", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "9dd6db93e53f4544be7256b49a18c87a", + "Name": "coordinateSystem", + "Description": "Autodesk.DesignScript.Geometry.CoordinateSystem", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "a56c5a9e0d574d4b80ea99aca538ba6b", + "Name": "double", + "Description": "double", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.CoordinateSystem.YScaleFactor", + "Replication": "Auto", + "Description": "Returns the Y Axis scaling of the CoordinateSystem: the length of the Y Axis vector.\n\nCoordinateSystem.YScaleFactor: double" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "6dd043c16b554b70ac9bd1a3b56491a8", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "9c010b51aaa04e348f55989386feba8a", + "Name": "coordinateSystem", + "Description": "Autodesk.DesignScript.Geometry.CoordinateSystem", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "14485b089ed14b35bb06f48ffed18bb1", + "Name": "Vector", + "Description": "Vector", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.CoordinateSystem.ZAxis", + "Replication": "Auto", + "Description": "Returns Z Axis of CoordinateSystem.\n\nCoordinateSystem.ZAxis: Vector" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "3fe043b97c2a4707a3d1d92a2ad3cdb9", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "1809dad1f7064f91912418bdf858c8cc", + "Name": "coordinateSystem", + "Description": "Autodesk.DesignScript.Geometry.CoordinateSystem", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "f19e8d38dbb84122b7c4576e590f0e47", + "Name": "double", + "Description": "double", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.CoordinateSystem.ZScaleFactor", + "Replication": "Auto", + "Description": "Returns the Z Axis scaling of the CoordinateSystem: the length of the Z Axis vector.\n\nCoordinateSystem.ZScaleFactor: double" + }, + { + "ConcreteType": "CoreNodeModels.Watch, CoreNodeModels", + "WatchWidth": 420.0, + "WatchHeight": 38.0, + "Id": "1e5fd09b7539447bb6a04b04525d6c68", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "b57bae915deb44f8997b34b49380f81f", + "Name": "", + "Description": "Node to show output from", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "7e93064b6a6449d999b8794933bc296f", + "Name": "", + "Description": "Node output", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Visualizes a node's output" + }, + { + "ConcreteType": "CoreNodeModels.CreateList, CoreNodeModels", + "VariableInputPorts": true, + "Id": "0be9d4912f0f43e7863a9574e41e10d4", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "c8e78eb0f5db4206973d292d973e4a72", + "Name": "item0", + "Description": "Item Index #0", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "34182a5fde9e40e2b4f647c1ba77097a", + "Name": "item1", + "Description": "Item Index #1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "b6cb1e6eb2b44db8b3188c6a0526cdef", + "Name": "item2", + "Description": "Item Index #2", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "0c621bd362314a088d674f5478cef17a", + "Name": "list", + "Description": "A list (type: var[]..[])", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Makes a new list from the given inputs" + }, + { + "ConcreteType": "CoreNodeModels.CreateList, CoreNodeModels", + "VariableInputPorts": true, + "Id": "7916d384c660414a9442cc36daa2d871", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "2c8a574225e949caab31cd39181e4f47", + "Name": "item0", + "Description": "Item Index #0", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "2cec60b150da4282b6c07599c3562ec0", + "Name": "item1", + "Description": "Item Index #1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "13ec3e09db52405581eb2fbab99cc442", + "Name": "item2", + "Description": "Item Index #2", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "bae80a527b5146b3ba315a2418f9df43", + "Name": "list", + "Description": "A list (type: var[]..[])", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Makes a new list from the given inputs" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "c6524b84cd3046459d752a79c91307bd", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "b7c7c3b966914aa08cc3c83dcdf4aa91", + "Name": "vector", + "Description": "Autodesk.DesignScript.Geometry.Vector", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "4854b60c72e74fd796ec1305558dcce7", + "Name": "otherVector", + "Description": "Other vector\n\nVector", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "4a54f769e64a49f2a33edc04fd39afb9", + "Name": "bool", + "Description": "Returns True if the vectors are almost equal; false otherwise.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Vector.IsAlmostEqualTo@Autodesk.DesignScript.Geometry.Vector", + "Replication": "Auto", + "Description": "Determine whether two vectors are almost equal. A tolerance value of 1e-5 given to handle precision issues.\n\nVector.IsAlmostEqualTo (otherVector: Vector): bool" + }, + { + "ConcreteType": "CoreNodeModels.Equals, CoreNodeModels", + "Id": "1d01e2e23e2f4144ab3b5d836eb9d8b3", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "f68ba4900b584be4b1b54b322dcd2494", + "Name": "x", + "Description": "Integer or double value", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "16ae43eccc4f4a00b6d97581dc4f4b16", + "Name": "y", + "Description": "Integer or double value", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "eaed21e566bf4397bed0f6f6eb13f124", + "Name": "tolerance", + "Description": "Tolerance permitted for equality check\r\nDefault value: 1E-05", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "4b896c02e1f14183931f234f83f8d82f", + "Name": "bool", + "Description": "Result of equality check", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Auto", + "Description": "Returns True if x and y are equal given a certain tolerance" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "a336c69568e7442d8b8a0cd5023935d2", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "a3b4cc84809c421586d4315ff31f6839", + "Name": "geometry", + "Description": "Autodesk.DesignScript.Geometry.Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "6e02f3edcdba49ca8584f8763db7736a", + "Name": "other", + "Description": "Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "13080ea733e348099b063246f7de2dd7", + "Name": "bool", + "Description": "bool", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Geometry.IsAlmostEqualTo@Autodesk.DesignScript.Geometry.Geometry", + "Replication": "Auto", + "Description": "Check if the two objects have the same representational geometry or numerical values\n\nGeometry.IsAlmostEqualTo (other: Geometry): bool" + }, + { + "ConcreteType": "CoreNodeModels.CreateList, CoreNodeModels", + "VariableInputPorts": true, + "Id": "60ddce9f4ea743b2a0820a764951ab7f", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "c53f613d814f4f77b503eb4569f50b15", + "Name": "item0", + "Description": "Item Index #0", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "d922c27abdf44dab94688e84711866a6", + "Name": "item1", + "Description": "Item Index #1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "d1018054c98b48f399d87fd6e018b0db", + "Name": "item2", + "Description": "Item Index #2", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "0023ef3842cf42ba8b9b29240c9ef487", + "Name": "list", + "Description": "A list (type: var[]..[])", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Makes a new list from the given inputs" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "d99cedcbc5e945a58f51096e588a5faf", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "581f2e3cdbd54a5d8a13e8d18edbaf4b", + "Name": "coordinateSystem", + "Description": "Autodesk.DesignScript.Geometry.CoordinateSystem", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "fcf798b9e53448e787ec7dc277438c1e", + "Name": "double", + "Description": "double", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.CoordinateSystem.YScaleFactor", + "Replication": "Auto", + "Description": "Returns the Y Axis scaling of the CoordinateSystem: the length of the Y Axis vector.\n\nCoordinateSystem.YScaleFactor: double" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "2daa366e70f0442e988955febed77e10", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "f7daa401fae34180b227d7b078f01443", + "Name": "coordinateSystem", + "Description": "Autodesk.DesignScript.Geometry.CoordinateSystem", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "e27838a4170542f8a93a1651b4ff9bb7", + "Name": "double", + "Description": "double", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.CoordinateSystem.ZScaleFactor", + "Replication": "Auto", + "Description": "Returns the Z Axis scaling of the CoordinateSystem: the length of the Z Axis vector.\n\nCoordinateSystem.ZScaleFactor: double" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "b494c67894aa41bfab06e29318ee005c", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "4263f49d8bc741519b99c1e12fe40c05", + "Name": "coordinateSystem", + "Description": "Autodesk.DesignScript.Geometry.CoordinateSystem", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "674a5f65f7394b0db4f09f8c39b5435e", + "Name": "double", + "Description": "double", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.CoordinateSystem.XScaleFactor", + "Replication": "Auto", + "Description": "Returns the X Axis scaling of the CoordinateSystem: the length of the X Axis vector.\n\nCoordinateSystem.XScaleFactor: double" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "e39d22e35da642d397c6eea5026595f4", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "200e4ea48b1c4a4c899588c498017455", + "Name": "coordinateSystem", + "Description": "Autodesk.DesignScript.Geometry.CoordinateSystem", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "38ad9fe5bb9342278e70df84e7db82bc", + "Name": "Vector", + "Description": "Vector", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.CoordinateSystem.ZAxis", + "Replication": "Auto", + "Description": "Returns Z Axis of CoordinateSystem.\n\nCoordinateSystem.ZAxis: Vector" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "6dd3bdb4859247dfb0b96afa0462c512", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "fd0756116fb3448099d54904a491c6a5", + "Name": "coordinateSystem", + "Description": "Autodesk.DesignScript.Geometry.CoordinateSystem", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "8392ef642489485f8724cf057fbb8955", + "Name": "Vector", + "Description": "Vector", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.CoordinateSystem.YAxis", + "Replication": "Auto", + "Description": "Returns Y Axis of CoordinateSystem.\n\nCoordinateSystem.YAxis: Vector" + }, + { + "ConcreteType": "CoreNodeModels.CreateList, CoreNodeModels", + "VariableInputPorts": true, + "Id": "473bd335e152499587213da9a92a4ab0", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "21563529d317476aa753923fd45cc160", + "Name": "item0", + "Description": "Item Index #0", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "ec63530e84ba41efbb867ec7fc65a9e3", + "Name": "item1", + "Description": "Item Index #1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "6906d8ab621f40c78afd05a23295ff88", + "Name": "item2", + "Description": "Item Index #2", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "4834ebacf04b46c4b8b1723ff874db13", + "Name": "list", + "Description": "A list (type: var[]..[])", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Makes a new list from the given inputs" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "235687af28444f24ad6f0cdd8540b950", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "3662e886dd4e4e94b8994e3e37f4dc70", + "Name": "coordinateSystem", + "Description": "Autodesk.DesignScript.Geometry.CoordinateSystem", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "2f52016e14814470af1380f7f6b21599", + "Name": "Vector", + "Description": "Vector", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.CoordinateSystem.XAxis", + "Replication": "Auto", + "Description": "Returns X Axis of CoordinateSystem.\n\nCoordinateSystem.XAxis: Vector" + }, + { + "ConcreteType": "CoreNodeModels.Watch, CoreNodeModels", + "WatchWidth": 420.0, + "WatchHeight": 38.0, + "Id": "4012f3fd5c7143769bb1c4d8da1c49f7", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "6251f8f34e784a76a83864475f4fde95", + "Name": "", + "Description": "Node to show output from", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "d58d1cbf5c0d46d8b19a2514edb14eed", + "Name": "", + "Description": "Node output", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Visualizes a node's output" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "da58485c9cee4dd88399e71de0be598c", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "77e80d311390406093cf2fc4aed7001a", + "Name": "coordinateSystem", + "Description": "Autodesk.DesignScript.Geometry.CoordinateSystem", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "f4011f72cdba48278175ae5a9a55dee0", + "Name": "Point", + "Description": "Point", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.CoordinateSystem.Origin", + "Replication": "Auto", + "Description": "Creates a Point representing the CoordinateSystem origin.\n\nCoordinateSystem.Origin: Point" + }, + { + "ConcreteType": "CoreNodeModels.Watch, CoreNodeModels", + "WatchWidth": 420.0, + "WatchHeight": 38.0, + "Id": "8f7169de011f425396b1b941868c8827", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "2334c2fa8bb046c487a4fc9aadcaf9c6", + "Name": "", + "Description": "Node to show output from", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "0c471cc0f9b144c9bd4d36bf09cc0944", + "Name": "", + "Description": "Node output", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Visualizes a node's output" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "484f5ae4d81d4cdda609e7ce0fbc968b", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "ee7ef0266c4641c4a2c9cdafa05c9d5c", + "Name": "coordinateSystem", + "Description": "Autodesk.DesignScript.Geometry.CoordinateSystem", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "3adfaa81f0074c9b847c3b318b6efdd3", + "Name": "other", + "Description": "other coordinate system\n\nCoordinateSystem", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "84c23749cbaf43e1a421f010084bb59b", + "Name": "bool", + "Description": "returns true if coordinate systems are equal", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.CoordinateSystem.IsEqualTo@Autodesk.DesignScript.Geometry.CoordinateSystem", + "Replication": "Auto", + "Description": "Determine if two CoordinateSystems are equal\n\nCoordinateSystem.IsEqualTo (other: CoordinateSystem): bool" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "91464d661804403fbad8f5b908fcec2b", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "b3a0669ed40c4c598ecf36f719432c16", + "Name": "json", + "Description": "A JSON string\n\nstring", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "194f6af130bf4095862a3bf4af919690", + "Name": "result", + "Description": "The result type depends on the content of the input string. The result type can be a primitive value (e.g. string, boolean, double), a List, or a Dictionary.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Data.ParseJSON@string", + "Replication": "Auto", + "Description": "Parse converts an arbitrary JSON string to a value. It is the opposite of JSON.Stringify.\n\nData.ParseJSON (json: string): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "5f185ca087a749ffb42330c223075f51", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "bbccc8fe15b14c1ba213da5d8bc32b4f", + "Name": "values", + "Description": "A List of values\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "c5012943f5914d3fb770d48c8ab752d8", + "Name": "json", + "Description": "A JSON string where primitive types (e.g. double, int, boolean), Lists, and Dictionary's will be turned into the associated JSON type.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Data.StringifyJSON@var[]..[]", + "Replication": "Auto", + "Description": "Stringify converts an arbitrary value or a list of arbitrary values to JSON. Replication can be used to apply the operation over a list, producing a list of JSON strings.\n\nData.StringifyJSON (values: var[]..[]): string" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "3029ecc07834494082ea8d2a3b876158", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "6e618a6320b34f4f849c10f705d73352", + "Name": "coordinateSystem", + "Description": "Autodesk.DesignScript.Geometry.CoordinateSystem", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "a3f757087250454daa1ab2e6edc12ae0", + "Name": "Point", + "Description": "Point", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.CoordinateSystem.Origin", + "Replication": "Auto", + "Description": "Creates a Point representing the CoordinateSystem origin.\n\nCoordinateSystem.Origin: Point" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "9da9bf320d8047769ac85d3c6d7375de", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "67ab92817b344c12b9f23751ae4b117f", + "Name": "coordinateSystem", + "Description": "Autodesk.DesignScript.Geometry.CoordinateSystem", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "0af74a76d0304794b4ce5ffea897f9f7", + "Name": "Vector", + "Description": "Vector", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.CoordinateSystem.XAxis", + "Replication": "Auto", + "Description": "Returns X Axis of CoordinateSystem.\n\nCoordinateSystem.XAxis: Vector" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "d07834ab34534b77ad4be56488e12438", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "a87a5041e0954107ba6629618d7bf563", + "Name": "coordinateSystem", + "Description": "Autodesk.DesignScript.Geometry.CoordinateSystem", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "02a72fbaf29c4cc5b3ab8029ea8432e8", + "Name": "double", + "Description": "double", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.CoordinateSystem.XScaleFactor", + "Replication": "Auto", + "Description": "Returns the X Axis scaling of the CoordinateSystem: the length of the X Axis vector.\n\nCoordinateSystem.XScaleFactor: double" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "e6e563764ad54376bded67100ac262af", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "c029ca5d5ec044fe9e6c4bf84488739e", + "Name": "coordinateSystem", + "Description": "Autodesk.DesignScript.Geometry.CoordinateSystem", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "81fe12a95c3c46258a655822d4063fb2", + "Name": "Vector", + "Description": "Vector", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.CoordinateSystem.YAxis", + "Replication": "Auto", + "Description": "Returns Y Axis of CoordinateSystem.\n\nCoordinateSystem.YAxis: Vector" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "8f17addd51d9438a8de970d1c0c318c2", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "56b67ae33c7c4ba586c208e4f9e0df8b", + "Name": "coordinateSystem", + "Description": "Autodesk.DesignScript.Geometry.CoordinateSystem", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "27f243164a4b4fde81d378ea4e2821d3", + "Name": "double", + "Description": "double", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.CoordinateSystem.YScaleFactor", + "Replication": "Auto", + "Description": "Returns the Y Axis scaling of the CoordinateSystem: the length of the Y Axis vector.\n\nCoordinateSystem.YScaleFactor: double" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "fff3e8930ee448a1b7c007a4d93afd19", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "f8403719ceef491aa20978ceb9a1e4ad", + "Name": "coordinateSystem", + "Description": "Autodesk.DesignScript.Geometry.CoordinateSystem", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "c18ba4c3a25448f28809b0ef98ad3fd3", + "Name": "Vector", + "Description": "Vector", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.CoordinateSystem.ZAxis", + "Replication": "Auto", + "Description": "Returns Z Axis of CoordinateSystem.\n\nCoordinateSystem.ZAxis: Vector" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "2a73307a8a894be59162eaea7fb8efc9", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "37e40bcc8e2043c0af68bbb1fd491e3c", + "Name": "coordinateSystem", + "Description": "Autodesk.DesignScript.Geometry.CoordinateSystem", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "ac393eaca1024b5da4a73d7c92a362c7", + "Name": "double", + "Description": "double", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.CoordinateSystem.ZScaleFactor", + "Replication": "Auto", + "Description": "Returns the Z Axis scaling of the CoordinateSystem: the length of the Z Axis vector.\n\nCoordinateSystem.ZScaleFactor: double" + }, + { + "ConcreteType": "CoreNodeModels.Watch, CoreNodeModels", + "WatchWidth": 420.0, + "WatchHeight": 38.0, + "Id": "e55a71b30db34aff9555de2bec408ef5", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "99755eb9f3c54a4d846ed413002eeaa8", + "Name": "", + "Description": "Node to show output from", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "85f5b8525be24c598a7c90d572422e81", + "Name": "", + "Description": "Node output", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Visualizes a node's output" + }, + { + "ConcreteType": "CoreNodeModels.CreateList, CoreNodeModels", + "VariableInputPorts": true, + "Id": "726af1059b9b445784e32cf170bec2b1", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "edbdf20e7f0742e3967960c8e7175777", + "Name": "item0", + "Description": "Item Index #0", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "cfdafb53017644edb66fd78bfd4e82ec", + "Name": "item1", + "Description": "Item Index #1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "e3500640e54c49958641e9c9a489e34a", + "Name": "item2", + "Description": "Item Index #2", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "8009bd36a81a4de587cac0e46a9db53e", + "Name": "list", + "Description": "A list (type: var[]..[])", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Makes a new list from the given inputs" + }, + { + "ConcreteType": "CoreNodeModels.CreateList, CoreNodeModels", + "VariableInputPorts": true, + "Id": "146978e65b6b41fb9f9eeefa3a70122a", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "f39633959a0d412a81a1065f1bc23ab8", + "Name": "item0", + "Description": "Item Index #0", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "f9f6b0c88c4b4ba9a777a128b8d94363", + "Name": "item1", + "Description": "Item Index #1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "3bd70a28e3014559bc4371cce2635864", + "Name": "item2", + "Description": "Item Index #2", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "bc8a611cf6364fac8f6cd6c3851f0e46", + "Name": "list", + "Description": "A list (type: var[]..[])", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Makes a new list from the given inputs" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "921a59150b6f4e2f864457894ce74a33", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "c4a240b34d2a4c6780206fb660de013a", + "Name": "vector", + "Description": "Autodesk.DesignScript.Geometry.Vector", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "547ac7f7a82b43ff94879c9ad2f1cacf", + "Name": "otherVector", + "Description": "Other vector\n\nVector", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "3066e01e9c3e482083a09119b08c3c22", + "Name": "bool", + "Description": "Returns True if the vectors are almost equal; false otherwise.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Vector.IsAlmostEqualTo@Autodesk.DesignScript.Geometry.Vector", + "Replication": "Auto", + "Description": "Determine whether two vectors are almost equal. A tolerance value of 1e-5 given to handle precision issues.\n\nVector.IsAlmostEqualTo (otherVector: Vector): bool" + }, + { + "ConcreteType": "CoreNodeModels.Equals, CoreNodeModels", + "Id": "730109a73fa64cd884e3778516b44beb", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "48532f28a99d4901a2dfa911c333a883", + "Name": "x", + "Description": "Integer or double value", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "b3bb10e4f2024abca43afd8aba381a88", + "Name": "y", + "Description": "Integer or double value", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "00ca122e6c5044bb95515d5baeb5d8ba", + "Name": "tolerance", + "Description": "Tolerance permitted for equality check\r\nDefault value: 1E-05", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "39c8c32548224b639e1604ce08619c43", + "Name": "bool", + "Description": "Result of equality check", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Auto", + "Description": "Returns True if x and y are equal given a certain tolerance" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "13e146e0675a4ee891275dba0d1c2e3a", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "6394fc72a9e64e84b21bd1770056f3ff", + "Name": "geometry", + "Description": "Autodesk.DesignScript.Geometry.Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "f701827eb6f94ffa845ac4958e68f4c4", + "Name": "other", + "Description": "Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "3825e269dc6e4300840f97bb72dcb366", + "Name": "bool", + "Description": "bool", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Geometry.IsAlmostEqualTo@Autodesk.DesignScript.Geometry.Geometry", + "Replication": "Auto", + "Description": "Check if the two objects have the same representational geometry or numerical values\n\nGeometry.IsAlmostEqualTo (other: Geometry): bool" + }, + { + "ConcreteType": "CoreNodeModels.CreateList, CoreNodeModels", + "VariableInputPorts": true, + "Id": "bf78f36edff14f378d0f8cf2d6379e4d", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "d22262d190f949948ec0826b9d4eee51", + "Name": "item0", + "Description": "Item Index #0", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "04966de22a594146a583147996c4c34f", + "Name": "item1", + "Description": "Item Index #1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "11dabc6e06fa4225aedb6543f2995fbf", + "Name": "item2", + "Description": "Item Index #2", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "87df76a5fe1642aca88479acfafbedb0", + "Name": "list", + "Description": "A list (type: var[]..[])", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Makes a new list from the given inputs" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "742a10d85e7e404390fa92e3b073bb8c", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "365ae09907ea4e06b5a37510ca0c663f", + "Name": "coordinateSystem", + "Description": "Autodesk.DesignScript.Geometry.CoordinateSystem", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "13d6a59113ad4abdb9299c4608fca3fd", + "Name": "double", + "Description": "double", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.CoordinateSystem.YScaleFactor", + "Replication": "Auto", + "Description": "Returns the Y Axis scaling of the CoordinateSystem: the length of the Y Axis vector.\n\nCoordinateSystem.YScaleFactor: double" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "6258aceac0634efc8e76f78bc39b68e0", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "e34d2586a944453380f585f119cfdc83", + "Name": "coordinateSystem", + "Description": "Autodesk.DesignScript.Geometry.CoordinateSystem", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "434bb3b3ed544dfeb4ca6cbaf0aa2001", + "Name": "double", + "Description": "double", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.CoordinateSystem.ZScaleFactor", + "Replication": "Auto", + "Description": "Returns the Z Axis scaling of the CoordinateSystem: the length of the Z Axis vector.\n\nCoordinateSystem.ZScaleFactor: double" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "2de7043c98854dc097776984d069e3c7", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "e121164a3191423888fc55b9a9eaf9fd", + "Name": "coordinateSystem", + "Description": "Autodesk.DesignScript.Geometry.CoordinateSystem", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "05a44634cfbe4b8684da761d9bf3a700", + "Name": "double", + "Description": "double", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.CoordinateSystem.XScaleFactor", + "Replication": "Auto", + "Description": "Returns the X Axis scaling of the CoordinateSystem: the length of the X Axis vector.\n\nCoordinateSystem.XScaleFactor: double" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "c9b6ab4018f04ee888f4d20823b85996", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "bcb310a2cfc94e859f65774e8eee27a5", + "Name": "coordinateSystem", + "Description": "Autodesk.DesignScript.Geometry.CoordinateSystem", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "e04d77fb3ce441039934f36d03f7ea39", + "Name": "Vector", + "Description": "Vector", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.CoordinateSystem.ZAxis", + "Replication": "Auto", + "Description": "Returns Z Axis of CoordinateSystem.\n\nCoordinateSystem.ZAxis: Vector" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "8904946a3b394131bdc88960e7814fe1", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "b670ade4ea4c4b90beae2ece72546c26", + "Name": "coordinateSystem", + "Description": "Autodesk.DesignScript.Geometry.CoordinateSystem", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "a3de5f64bf864be29e77b503c86c05dd", + "Name": "Vector", + "Description": "Vector", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.CoordinateSystem.YAxis", + "Replication": "Auto", + "Description": "Returns Y Axis of CoordinateSystem.\n\nCoordinateSystem.YAxis: Vector" + }, + { + "ConcreteType": "CoreNodeModels.CreateList, CoreNodeModels", + "VariableInputPorts": true, + "Id": "536be26a6ca54e4fa4d22ef10f601d8c", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "038a6462043545aabd63b018170ed7bf", + "Name": "item0", + "Description": "Item Index #0", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "f7cae4ce2e584b499638a0d7ce988292", + "Name": "item1", + "Description": "Item Index #1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "9e83a74c83b2477eb59a115579514582", + "Name": "item2", + "Description": "Item Index #2", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "f3bbb247fd084ab7a3c13c33cf37db1a", + "Name": "list", + "Description": "A list (type: var[]..[])", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Makes a new list from the given inputs" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "75b99b135c2a481c9eb99a1f1c1e4e2a", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "248bbfbf8488495eb5d28a79f4a6dbc0", + "Name": "coordinateSystem", + "Description": "Autodesk.DesignScript.Geometry.CoordinateSystem", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "0b9342854c1c463a9355a7ab05d18e48", + "Name": "Vector", + "Description": "Vector", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.CoordinateSystem.XAxis", + "Replication": "Auto", + "Description": "Returns X Axis of CoordinateSystem.\n\nCoordinateSystem.XAxis: Vector" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "31e6566f6bfc421899be0caf1594b3f4", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "0aa3b2f1341349428e079836bc3eaea2", + "Name": "coordinateSystem", + "Description": "Autodesk.DesignScript.Geometry.CoordinateSystem", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "7299fd43c0c94cc88200762f927e6758", + "Name": "Point", + "Description": "Point", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.CoordinateSystem.Origin", + "Replication": "Auto", + "Description": "Creates a Point representing the CoordinateSystem origin.\n\nCoordinateSystem.Origin: Point" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "192f54f0d5de4a2b88e5f0bd0b582aed", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "b3281df73f5f40709e8fc4edb7420dd2", + "Name": "list", + "Description": "List to flatten.\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "93a9af2139ce4b85b6ca781627771be1", + "Name": "amount", + "Description": "Layers of list nesting to remove (-1 will remove all list nestings)\n\nint\nDefault value : -1", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "6118e40ffe2840349329775ec1fe9600", + "Name": "list", + "Description": "Flattened list by amount", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.List.Flatten@var[]..[],int", + "Replication": "Auto", + "Description": "Flattens a nested list of lists by a certain amount.\n\nList.Flatten (list: var[]..[], amount: int = -1): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "816b187346734df7a888da3a8fc04f64", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "c2a446eb0423400b9b103ab4e232c6c4", + "Name": "object", + "Description": "Object to query type\n\nvar", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "598ba67094a544aeadfacc10c9869f9e", + "Name": "string", + "Description": "Type of object.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Object.Type@var", + "Replication": "Auto", + "Description": "Returns the type of object represented as string.\n\nObject.Type (object: var): string" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "a024c5a36fc44c618b92af57035249d9", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "7296e8aed5774ced85bb84f42ad81612", + "Name": "x", + "Description": "Basic type object to compare (e.g. bool, int, double, string, etc.)\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "ec30879089304bb99e1800fdcb4fd486", + "Name": "y", + "Description": "Basic type object to compare (e.g. bool, int, double, string, etc.)\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "891191f81446421486faf1b52f3fade8", + "Name": "bool", + "Description": "Result of equality check", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "==@var[]..[],var[]..[]", + "Replication": "Auto", + "Description": "Compares if x and y are equal\n\n== (x: var[]..[], y: var[]..[]): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "59e7b6564dd54cae9340eb47efa7e1d9", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "b84cea5f3e824bea9f4fb4087478e252", + "Name": "object", + "Description": "Object to query type\n\nvar", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "2e2b5f1ce5c54e60b78e521060368c53", + "Name": "string", + "Description": "Type of object.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Object.Type@var", + "Replication": "Auto", + "Description": "Returns the type of object represented as string.\n\nObject.Type (object: var): string" + }, + { + "ConcreteType": "CoreNodeModels.CreateList, CoreNodeModels", + "VariableInputPorts": true, + "Id": "19e9a6df80f14b94a9837ef21eb5aa21", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "d0dcef5f73014172b0ce756fdfd57be5", + "Name": "item0", + "Description": "Item Index #0", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "d21259a3158c464588c32dc24b11d49e", + "Name": "item1", + "Description": "Item Index #1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "76d5164b8c1d440a8635f465f4df6716", + "Name": "list", + "Description": "A list (type: var[]..[])", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Makes a new list from the given inputs" + } + ], + "Connectors": [ + { + "Start": "358c569b10fb49a98727956c5f8d8676", + "End": "b47ea166cd7e41b99531b0447be823d1", + "Id": "1f31b0ae535943ccb3518018a11ade55", + "IsHidden": "False" + }, + { + "Start": "14c2eb659c554fb5b278670c57d1167c", + "End": "bc5ba4d74ab642c79f7e4414fdc30b78", + "Id": "fc7a53cfbca1469c8ef04d2023ea4d3e", + "IsHidden": "False" + }, + { + "Start": "fb22aece6bd44a8f8a0fba80f6934b44", + "End": "3d03f11d2c154d74aa4460b34f12efa8", + "Id": "888b4f5ab87e46ffb634c736f77dad5e", + "IsHidden": "False" + }, + { + "Start": "d111df8a46fc44caa3f4b90fda2b54ba", + "End": "54826b4ee4634b2292104b007d4028e0", + "Id": "2421584340f14c9a97f5033f0bf36a9b", + "IsHidden": "False" + }, + { + "Start": "d111df8a46fc44caa3f4b90fda2b54ba", + "End": "087585b5b54d4ce4a2061865c303ff64", + "Id": "09eb8d97a81d4fb087e31df641b17aa2", + "IsHidden": "False" + }, + { + "Start": "13082af8e52f42468ee059e8d801d2e7", + "End": "811805415d244b1d941d1ef1d1ab34d8", + "Id": "c840b54444b84efda6784adf3f79bcf7", + "IsHidden": "False" + }, + { + "Start": "ae170ad9a05c4d0c8d3a0e37b078bede", + "End": "1d2c5973d9d843d5b0bff0396619fd23", + "Id": "0ffd2d79191549d29c4a2882fc526bee", + "IsHidden": "False" + }, + { + "Start": "ae170ad9a05c4d0c8d3a0e37b078bede", + "End": "6874362eb06949e98e00f248bdbfbc4b", + "Id": "e2ae75f1cb1b44eba12dbb4cf5e06437", + "IsHidden": "False" + }, + { + "Start": "52d3bb672ee34752a7a61a8af5258735", + "End": "e517ef8de5e949f0b65bd0dd245e92e4", + "Id": "bb828cabdd76432e8b1301abdd4b179e", + "IsHidden": "False" + }, + { + "Start": "52d3bb672ee34752a7a61a8af5258735", + "End": "2262f782a9c84a588861d901331dd85c", + "Id": "dfd76031dd484825a1e84e16eeb0dcfd", + "IsHidden": "False" + }, + { + "Start": "52d3bb672ee34752a7a61a8af5258735", + "End": "0ad656a7009f4b498ff84597c91ae7fe", + "Id": "673899f3edfc417b866c672ddf5a6615", + "IsHidden": "False" + }, + { + "Start": "52d3bb672ee34752a7a61a8af5258735", + "End": "c5001fa7306d46bea00bf943ea9fba72", + "Id": "4c8ff4f109214406adfaf1f475578508", + "IsHidden": "False" + }, + { + "Start": "52d3bb672ee34752a7a61a8af5258735", + "End": "1c92dbc3eed146d1b717d7a8aba222e9", + "Id": "6430946ff8e849b2ba133ca28aec804e", + "IsHidden": "False" + }, + { + "Start": "52d3bb672ee34752a7a61a8af5258735", + "End": "b84cea5f3e824bea9f4fb4087478e252", + "Id": "e57260b051a9482497ccc1d21a75cf2a", + "IsHidden": "False" + }, + { + "Start": "98df6472dc1344bdbb7948e7b4246bd4", + "End": "04f2acd5c11549cb81418a69876c7810", + "Id": "767b0328245a4705972b9a6de561e80b", + "IsHidden": "False" + }, + { + "Start": "b78eb7328f2946c59c46b6b7103196d7", + "End": "c195c0ab835a4664bd93359e2a4e45cc", + "Id": "575e23212333441c8ad193f996a455c2", + "IsHidden": "False" + }, + { + "Start": "b78eb7328f2946c59c46b6b7103196d7", + "End": "b57bae915deb44f8997b34b49380f81f", + "Id": "cf80da378efe47d3b44dd9692309e014", + "IsHidden": "False" + }, + { + "Start": "6161802dedd3457fa3d101bbe9e793b8", + "End": "dd81588661dc43948a2e181f15d56033", + "Id": "597db597034349af8655612e2bd529e7", + "IsHidden": "False" + }, + { + "Start": "40a3138e3ced422682f810e5e6591290", + "End": "57108fb674fe4f89822cd4b0d8013dfc", + "Id": "ed70fe0eabb24f57aa082dc929684f1e", + "IsHidden": "False" + }, + { + "Start": "40a3138e3ced422682f810e5e6591290", + "End": "c2a446eb0423400b9b103ab4e232c6c4", + "Id": "99b6ae6dcb0f44f2a562a67127b6ebba", + "IsHidden": "False" + }, + { + "Start": "3097f0d177984bfbbff60a413fff1d04", + "End": "07dfa5dfbc994255913fcca13d83d82c", + "Id": "ada9e8dd9e5a4216b685dd91264e5bc8", + "IsHidden": "False" + }, + { + "Start": "a4e35a1b1b344e21aca6a35373dda28d", + "End": "b3281df73f5f40709e8fc4edb7420dd2", + "Id": "1353949bf0d1431085463668b90a3e42", + "IsHidden": "False" + }, + { + "Start": "6a14b327955e4060bdbdc6fdfbf306dd", + "End": "bbccc8fe15b14c1ba213da5d8bc32b4f", + "Id": "eecf37ca2920468b80d73eb2b4f9cffe", + "IsHidden": "False" + }, + { + "Start": "6a14b327955e4060bdbdc6fdfbf306dd", + "End": "ee7ef0266c4641c4a2c9cdafa05c9d5c", + "Id": "b460fbc7d67f4056af06c18b7b41436b", + "IsHidden": "False" + }, + { + "Start": "6a14b327955e4060bdbdc6fdfbf306dd", + "End": "99755eb9f3c54a4d846ed413002eeaa8", + "Id": "a62a057d2b0f40b88016dc57810c0df0", + "IsHidden": "False" + }, + { + "Start": "5e5b0279e9c942ce9339dc301a914f71", + "End": "a567e41cd9234d48b4c2422bf55a2bb4", + "Id": "fa62531921a74b99a9cabe51fc69bdf6", + "IsHidden": "False" + }, + { + "Start": "2ab81a19f1bb4cafa5b7006219ea4116", + "End": "10bb0563b6ca41cea98e2cffaae25278", + "Id": "1232d6cf07f744d38b06140f7550d8a4", + "IsHidden": "False" + }, + { + "Start": "d186d794935c46599fd410120fcdbfca", + "End": "7692810246e046e48f4f0c467e5b6cf5", + "Id": "f4508d799ab04f59b826a7fd208dbffe", + "IsHidden": "False" + }, + { + "Start": "c8960095e2ce4db499632ebbdeb9c70f", + "End": "d0dcef5f73014172b0ce756fdfd57be5", + "Id": "af873d0e3ad34b8092b832b9a4f668f7", + "IsHidden": "False" + }, + { + "Start": "2a457884c264445d821adaa9efe691ca", + "End": "d4d3b1714bca4934bbcecf0cc8782038", + "Id": "2c181a1b651143ee9ba2bd2d3fe67b36", + "IsHidden": "False" + }, + { + "Start": "2a457884c264445d821adaa9efe691ca", + "End": "6251f8f34e784a76a83864475f4fde95", + "Id": "baa1cc0327b54059bbb1b2dbcc462ded", + "IsHidden": "False" + }, + { + "Start": "69c2895e09bd4796b62af88d49102389", + "End": "e4174814a9be43cc8366ede18d656428", + "Id": "79ef06fdca864f6d9c83825d9b22fe82", + "IsHidden": "False" + }, + { + "Start": "695a416323874b0fb0f80de3f5200aea", + "End": "a3b4cc84809c421586d4315ff31f6839", + "Id": "52ca41e23fca4bc28daacdfef5fec405", + "IsHidden": "False" + }, + { + "Start": "b6c0759c2ec5412f9559c1d8c0500793", + "End": "c8e78eb0f5db4206973d292d973e4a72", + "Id": "3608a0ab86e3433aafb7e11d4fa6bf4e", + "IsHidden": "False" + }, + { + "Start": "533bfc1886a34b01a9103e1cdc720ff8", + "End": "2c8a574225e949caab31cd39181e4f47", + "Id": "4add4b613a8040c5a0930b8d433df01c", + "IsHidden": "False" + }, + { + "Start": "ad1bdf3d455a480a9b83abc50e7a7bb0", + "End": "34182a5fde9e40e2b4f647c1ba77097a", + "Id": "5107f40c5e364bd1b13eba31d22d66e6", + "IsHidden": "False" + }, + { + "Start": "a56c5a9e0d574d4b80ea99aca538ba6b", + "End": "2cec60b150da4282b6c07599c3562ec0", + "Id": "4ccdb6d2a86c4fdd84737d8a756e00a4", + "IsHidden": "False" + }, + { + "Start": "14485b089ed14b35bb06f48ffed18bb1", + "End": "b6cb1e6eb2b44db8b3188c6a0526cdef", + "Id": "4d75dae35cee491e9b65333763316f30", + "IsHidden": "False" + }, + { + "Start": "f19e8d38dbb84122b7c4576e590f0e47", + "End": "13ec3e09db52405581eb2fbab99cc442", + "Id": "a98929b5a72543fcab45260d4233f646", + "IsHidden": "False" + }, + { + "Start": "7e93064b6a6449d999b8794933bc296f", + "End": "a13c775237824526a24ad7d976b21c5e", + "Id": "344614b207164a7893653d7e2dae942e", + "IsHidden": "False" + }, + { + "Start": "7e93064b6a6449d999b8794933bc296f", + "End": "1e57b99e34314a97a3a68aa4cae33b47", + "Id": "a4378c0da8f14fe9911b340a66e759b4", + "IsHidden": "False" + }, + { + "Start": "7e93064b6a6449d999b8794933bc296f", + "End": "cf00792f3111495487dd870711f1b525", + "Id": "6599bf473a90465eaeef29504a3089a5", + "IsHidden": "False" + }, + { + "Start": "7e93064b6a6449d999b8794933bc296f", + "End": "152eeeb96a604f6faa1dc44fb8a1d5af", + "Id": "aafa51a34b18422388004ae1e1d7e47d", + "IsHidden": "False" + }, + { + "Start": "7e93064b6a6449d999b8794933bc296f", + "End": "9dd6db93e53f4544be7256b49a18c87a", + "Id": "fc54b31c0c15491192816ac376511cbb", + "IsHidden": "False" + }, + { + "Start": "7e93064b6a6449d999b8794933bc296f", + "End": "9c010b51aaa04e348f55989386feba8a", + "Id": "3256b3a1d1074b8db90f37ba18ae5c2c", + "IsHidden": "False" + }, + { + "Start": "7e93064b6a6449d999b8794933bc296f", + "End": "1809dad1f7064f91912418bdf858c8cc", + "Id": "b715e6b1e1734dc39a61c21a65b52b77", + "IsHidden": "False" + }, + { + "Start": "0c621bd362314a088d674f5478cef17a", + "End": "b7c7c3b966914aa08cc3c83dcdf4aa91", + "Id": "85629265372c422f9dd517c362f3e2af", + "IsHidden": "False" + }, + { + "Start": "bae80a527b5146b3ba315a2418f9df43", + "End": "f68ba4900b584be4b1b54b322dcd2494", + "Id": "33725abfa93442b086110c2f9ee03282", + "IsHidden": "False" + }, + { + "Start": "4a54f769e64a49f2a33edc04fd39afb9", + "End": "8eee7c201812431286c5dbe3d0b2e2db", + "Id": "fa15292f9a734a6a9b22285d67942be4", + "IsHidden": "False" + }, + { + "Start": "4b896c02e1f14183931f234f83f8d82f", + "End": "e99e37b52261453991b69bb4961f00a1", + "Id": "b4e10a8d7df24cf9a3304d6cb4007169", + "IsHidden": "False" + }, + { + "Start": "13080ea733e348099b063246f7de2dd7", + "End": "2d89ba9286b24cbbb2c5d5539019b71f", + "Id": "fdd8255878804a0897b4046d3a305b25", + "IsHidden": "False" + }, + { + "Start": "0023ef3842cf42ba8b9b29240c9ef487", + "End": "16ae43eccc4f4a00b6d97581dc4f4b16", + "Id": "4ccbbdc1a630428c968372e0457883d5", + "IsHidden": "False" + }, + { + "Start": "fcf798b9e53448e787ec7dc277438c1e", + "End": "d922c27abdf44dab94688e84711866a6", + "Id": "bd6a3894b8344793b6edf0267ed0b51c", + "IsHidden": "False" + }, + { + "Start": "e27838a4170542f8a93a1651b4ff9bb7", + "End": "d1018054c98b48f399d87fd6e018b0db", + "Id": "9c12f98fd0ef459bbf195d0ca4926a3b", + "IsHidden": "False" + }, + { + "Start": "674a5f65f7394b0db4f09f8c39b5435e", + "End": "c53f613d814f4f77b503eb4569f50b15", + "Id": "b789f417465f4bd3993f4b3677f01e38", + "IsHidden": "False" + }, + { + "Start": "38ad9fe5bb9342278e70df84e7db82bc", + "End": "6906d8ab621f40c78afd05a23295ff88", + "Id": "0586d27b6bef48529ad143ada2f8f2fe", + "IsHidden": "False" + }, + { + "Start": "8392ef642489485f8724cf057fbb8955", + "End": "ec63530e84ba41efbb867ec7fc65a9e3", + "Id": "0b1e1d4e44b54698be66e3a0ad564f5a", + "IsHidden": "False" + }, + { + "Start": "4834ebacf04b46c4b8b1723ff874db13", + "End": "4854b60c72e74fd796ec1305558dcce7", + "Id": "c1de258100b5450e9b31039cab31dc12", + "IsHidden": "False" + }, + { + "Start": "2f52016e14814470af1380f7f6b21599", + "End": "21563529d317476aa753923fd45cc160", + "Id": "5ffe415471b140e0b48b9bb6674ab6d3", + "IsHidden": "False" + }, + { + "Start": "d58d1cbf5c0d46d8b19a2514edb14eed", + "End": "581f2e3cdbd54a5d8a13e8d18edbaf4b", + "Id": "3105d4ff110642b394c200058cb09cfc", + "IsHidden": "False" + }, + { + "Start": "d58d1cbf5c0d46d8b19a2514edb14eed", + "End": "f7daa401fae34180b227d7b078f01443", + "Id": "b58ab6705d48414cb49431c1f0239a5b", + "IsHidden": "False" + }, + { + "Start": "d58d1cbf5c0d46d8b19a2514edb14eed", + "End": "4263f49d8bc741519b99c1e12fe40c05", + "Id": "d975c963a2624a3eb2b0e102425358df", + "IsHidden": "False" + }, + { + "Start": "d58d1cbf5c0d46d8b19a2514edb14eed", + "End": "200e4ea48b1c4a4c899588c498017455", + "Id": "8aa9786e406142bdb67d4a42a1e14d74", + "IsHidden": "False" + }, + { + "Start": "d58d1cbf5c0d46d8b19a2514edb14eed", + "End": "fd0756116fb3448099d54904a491c6a5", + "Id": "ae905083c48742f7ad46e65e359bcddc", + "IsHidden": "False" + }, + { + "Start": "d58d1cbf5c0d46d8b19a2514edb14eed", + "End": "3662e886dd4e4e94b8994e3e37f4dc70", + "Id": "fb2ecd784a3b4c2286e88e913e36257b", + "IsHidden": "False" + }, + { + "Start": "d58d1cbf5c0d46d8b19a2514edb14eed", + "End": "77e80d311390406093cf2fc4aed7001a", + "Id": "7e148ddc8c76472e9000ff5f08462799", + "IsHidden": "False" + }, + { + "Start": "f4011f72cdba48278175ae5a9a55dee0", + "End": "6e02f3edcdba49ca8584f8763db7736a", + "Id": "ced983110d044c1bb62ec752807a34e3", + "IsHidden": "False" + }, + { + "Start": "0c471cc0f9b144c9bd4d36bf09cc0944", + "End": "365ae09907ea4e06b5a37510ca0c663f", + "Id": "e2fd18697d9744288025ad9baa5f53ed", + "IsHidden": "False" + }, + { + "Start": "0c471cc0f9b144c9bd4d36bf09cc0944", + "End": "e34d2586a944453380f585f119cfdc83", + "Id": "ed4dab24529c4131a792c9d06f3b9bf9", + "IsHidden": "False" + }, + { + "Start": "0c471cc0f9b144c9bd4d36bf09cc0944", + "End": "e121164a3191423888fc55b9a9eaf9fd", + "Id": "7a044d0ecef44fe8bbd5059ae1fe3b94", + "IsHidden": "False" + }, + { + "Start": "0c471cc0f9b144c9bd4d36bf09cc0944", + "End": "bcb310a2cfc94e859f65774e8eee27a5", + "Id": "314577937b4d4b8b8d918efcdc1fa0a7", + "IsHidden": "False" + }, + { + "Start": "0c471cc0f9b144c9bd4d36bf09cc0944", + "End": "b670ade4ea4c4b90beae2ece72546c26", + "Id": "56aaa816c8054d10b9400c501b28f981", + "IsHidden": "False" + }, + { + "Start": "0c471cc0f9b144c9bd4d36bf09cc0944", + "End": "248bbfbf8488495eb5d28a79f4a6dbc0", + "Id": "774d42502277422fa39d28bdac733de4", + "IsHidden": "False" + }, + { + "Start": "0c471cc0f9b144c9bd4d36bf09cc0944", + "End": "0aa3b2f1341349428e079836bc3eaea2", + "Id": "7567574cb37d4a82aabae09554e8f409", + "IsHidden": "False" + }, + { + "Start": "194f6af130bf4095862a3bf4af919690", + "End": "2334c2fa8bb046c487a4fc9aadcaf9c6", + "Id": "6145f7d92a744711b80c31d406fb226b", + "IsHidden": "False" + }, + { + "Start": "194f6af130bf4095862a3bf4af919690", + "End": "3adfaa81f0074c9b847c3b318b6efdd3", + "Id": "15eb8e97c1c64f8ba8157926a12f2117", + "IsHidden": "False" + }, + { + "Start": "c5012943f5914d3fb770d48c8ab752d8", + "End": "b3a0669ed40c4c598ecf36f719432c16", + "Id": "69fe1ded90dc431488b8b040f896f1f5", + "IsHidden": "False" + }, + { + "Start": "a3f757087250454daa1ab2e6edc12ae0", + "End": "6394fc72a9e64e84b21bd1770056f3ff", + "Id": "755a3727ea7e40518899b5ec5cb90606", + "IsHidden": "False" + }, + { + "Start": "0af74a76d0304794b4ce5ffea897f9f7", + "End": "edbdf20e7f0742e3967960c8e7175777", + "Id": "7b6673f122844728a0e1b05b6a4fb5af", + "IsHidden": "False" + }, + { + "Start": "02a72fbaf29c4cc5b3ab8029ea8432e8", + "End": "f39633959a0d412a81a1065f1bc23ab8", + "Id": "89fa025bb0084eff827dffa1b6f4d129", + "IsHidden": "False" + }, + { + "Start": "81fe12a95c3c46258a655822d4063fb2", + "End": "cfdafb53017644edb66fd78bfd4e82ec", + "Id": "2dcf4b521b8449c1986e6a64f407400f", + "IsHidden": "False" + }, + { + "Start": "27f243164a4b4fde81d378ea4e2821d3", + "End": "f9f6b0c88c4b4ba9a777a128b8d94363", + "Id": "83f96bb9a6364d90833a36fa6d8631a0", + "IsHidden": "False" + }, + { + "Start": "c18ba4c3a25448f28809b0ef98ad3fd3", + "End": "e3500640e54c49958641e9c9a489e34a", + "Id": "313769cf5e8048c684f4e1a2275ffb71", + "IsHidden": "False" + }, + { + "Start": "ac393eaca1024b5da4a73d7c92a362c7", + "End": "3bd70a28e3014559bc4371cce2635864", + "Id": "fecc6ee9e9324789b9c4b869bc5ddb2e", + "IsHidden": "False" + }, + { + "Start": "85f5b8525be24c598a7c90d572422e81", + "End": "6e618a6320b34f4f849c10f705d73352", + "Id": "c0ff6e03e4144d19a2d5babe55eb1df5", + "IsHidden": "False" + }, + { + "Start": "85f5b8525be24c598a7c90d572422e81", + "End": "67ab92817b344c12b9f23751ae4b117f", + "Id": "561deaef4bb543e2a26f549528ed3e53", + "IsHidden": "False" + }, + { + "Start": "85f5b8525be24c598a7c90d572422e81", + "End": "a87a5041e0954107ba6629618d7bf563", + "Id": "9affd44810d142d2bf6ace6ade20237d", + "IsHidden": "False" + }, + { + "Start": "85f5b8525be24c598a7c90d572422e81", + "End": "c029ca5d5ec044fe9e6c4bf84488739e", + "Id": "cb34741360ab4e3ab45ed41d0a43b843", + "IsHidden": "False" + }, + { + "Start": "85f5b8525be24c598a7c90d572422e81", + "End": "56b67ae33c7c4ba586c208e4f9e0df8b", + "Id": "e5ad9a6dc0bb49fa95edbc2ffcf67197", + "IsHidden": "False" + }, + { + "Start": "85f5b8525be24c598a7c90d572422e81", + "End": "f8403719ceef491aa20978ceb9a1e4ad", + "Id": "4dd773eb2efb482dbceb0db3c1cd8cc5", + "IsHidden": "False" + }, + { + "Start": "85f5b8525be24c598a7c90d572422e81", + "End": "37e40bcc8e2043c0af68bbb1fd491e3c", + "Id": "3df8e54990b54e97a1a7c649d07a6713", + "IsHidden": "False" + }, + { + "Start": "8009bd36a81a4de587cac0e46a9db53e", + "End": "c4a240b34d2a4c6780206fb660de013a", + "Id": "1949d367ee4d4eb585792ab1dac72787", + "IsHidden": "False" + }, + { + "Start": "bc8a611cf6364fac8f6cd6c3851f0e46", + "End": "48532f28a99d4901a2dfa911c333a883", + "Id": "6b7072c9f7e4428d9f23189e1e78a9b1", + "IsHidden": "False" + }, + { + "Start": "3066e01e9c3e482083a09119b08c3c22", + "End": "f81846c67dfc49c2974767ff3f20699e", + "Id": "572c41d7c5d6477589d7e70024097a2b", + "IsHidden": "False" + }, + { + "Start": "39c8c32548224b639e1604ce08619c43", + "End": "f19413fe1df245fa97b12b00cb9c1e3c", + "Id": "afb95b267f8140b8b50cb9bc873a0b7a", + "IsHidden": "False" + }, + { + "Start": "3825e269dc6e4300840f97bb72dcb366", + "End": "58e1ddcd5d4244b08bfcc1534f29a3d0", + "Id": "9f101e6b2c5440f3a706c613839f8752", + "IsHidden": "False" + }, + { + "Start": "87df76a5fe1642aca88479acfafbedb0", + "End": "b3bb10e4f2024abca43afd8aba381a88", + "Id": "87065bf2f29b4657a01ce205be379f51", + "IsHidden": "False" + }, + { + "Start": "13d6a59113ad4abdb9299c4608fca3fd", + "End": "04966de22a594146a583147996c4c34f", + "Id": "ac321f481d3143738594fb36ad37a0cf", + "IsHidden": "False" + }, + { + "Start": "434bb3b3ed544dfeb4ca6cbaf0aa2001", + "End": "11dabc6e06fa4225aedb6543f2995fbf", + "Id": "b7fb9014601f4e449b6e5ddb1a7b7c69", + "IsHidden": "False" + }, + { + "Start": "05a44634cfbe4b8684da761d9bf3a700", + "End": "d22262d190f949948ec0826b9d4eee51", + "Id": "4356a596768f48e4bd5c6bbe56505d91", + "IsHidden": "False" + }, + { + "Start": "e04d77fb3ce441039934f36d03f7ea39", + "End": "9e83a74c83b2477eb59a115579514582", + "Id": "57de3bb3993346b3ba1c79a5e2fc9b7f", + "IsHidden": "False" + }, + { + "Start": "a3de5f64bf864be29e77b503c86c05dd", + "End": "f7cae4ce2e584b499638a0d7ce988292", + "Id": "567af1e3874b4a2cba8bd94ecd6dacca", + "IsHidden": "False" + }, + { + "Start": "f3bbb247fd084ab7a3c13c33cf37db1a", + "End": "547ac7f7a82b43ff94879c9ad2f1cacf", + "Id": "0a09084773d94357a355e47dcb12acd0", + "IsHidden": "False" + }, + { + "Start": "0b9342854c1c463a9355a7ab05d18e48", + "End": "038a6462043545aabd63b018170ed7bf", + "Id": "4e3b5d1cf26f474f98038bae93940929", + "IsHidden": "False" + }, + { + "Start": "7299fd43c0c94cc88200762f927e6758", + "End": "f701827eb6f94ffa845ac4958e68f4c4", + "Id": "84d20585e75c47b687d82ed3c78190e3", + "IsHidden": "False" + }, + { + "Start": "6118e40ffe2840349329775ec1fe9600", + "End": "4b311b70c9484de79bc3ee7bdb44bd85", + "Id": "5823e7d1f0f24a9a9ee9bea023272f92", + "IsHidden": "False" + }, + { + "Start": "598ba67094a544aeadfacc10c9869f9e", + "End": "ec30879089304bb99e1800fdcb4fd486", + "Id": "8a5f70b9e0c84c1696911d2359264008", + "IsHidden": "False" + }, + { + "Start": "891191f81446421486faf1b52f3fade8", + "End": "d21259a3158c464588c32dc24b11d49e", + "Id": "be6ddb5c91ae4c7f92dd843709d22f48", + "IsHidden": "False" + }, + { + "Start": "2e2b5f1ce5c54e60b78e521060368c53", + "End": "7296e8aed5774ced85bb84f42ad81612", + "Id": "ac3e9d3b163e4dad965b520a10fda0ae", + "IsHidden": "False" + }, + { + "Start": "76d5164b8c1d440a8635f465f4df6716", + "End": "d9aef971dd3c46be8306597fe0d5734f", + "Id": "66aab93e9ba440dc8f4c6088faf7ef08", + "IsHidden": "False" + } + ], + "Dependencies": [], + "NodeLibraryDependencies": [], + "Thumbnail": "", + "GraphDocumentationURL": null, + "ExtensionWorkspaceData": [ + { + "ExtensionGuid": "28992e1d-abb9-417f-8b1b-05e053bee670", + "Name": "Properties", + "Version": "3.0", + "Data": {} + } + ], + "Author": "", + "Linting": { + "activeLinter": "None", + "activeLinterId": "7b75fb44-43fd-4631-a878-29f4d5d8399a", + "warningCount": 0, + "errorCount": 0 + }, + "Bindings": [], + "View": { + "Dynamo": { + "ScaleFactor": 1.0, + "HasRunWithoutCrash": true, + "IsVisibleInDynamoLibrary": true, + "Version": "3.0.0.5795", + "RunType": "Automatic", + "RunPeriod": "1000" + }, + "Camera": { + "Name": "_Background Preview", + "EyeX": -37.443233489990234, + "EyeY": 59.30361557006836, + "EyeZ": 38.009483337402344, + "LookX": 32.443233489990234, + "LookY": -48.30361557006836, + "LookZ": -46.009483337402344, + "UpX": 0.27276378870010376, + "UpY": 0.8808925151824951, + "UpZ": -0.38681814074516296 + }, + "ConnectorPins": [], + "NodeViews": [ + { + "Id": "22e53f300eb1475998c3524582853005", + "Name": "Vector.ByCoordinates", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -1260.0717100207914, + "Y": 3056.4983390414454 + }, + { + "Id": "0bc4537fdaaa49989eae460399fb3b32", + "Name": "Number", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -1260.0717100207914, + "Y": 3268.4983390414454 + }, + { + "Id": "241bf2a7dfa446fe9ab9d98885faffbb", + "Name": "CoordinateSystem.ByOrigin", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -1260.0717100207914, + "Y": 2632.4983390414454 + }, + { + "Id": "4da7356557ca463889c7a43a48c3f5e2", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -1514.0717100207914, + "Y": 2667.6358390414453 + }, + { + "Id": "a12836e87b3941e2be2f3f3345d2a280", + "Name": "CoordinateSystem.Rotate", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -830.8133963513849, + "Y": 2854.0830057582925 + }, + { + "Id": "e2057a3ed3ed4f8caf8b45da2e9c4cb8", + "Name": "Point.ByCoordinates", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -1260.0717100207914, + "Y": 2844.4983390414454 + }, + { + "Id": "37f0e1cc45554aaebcc9b5bd473edd8f", + "Name": "CoordinateSystem.Scale", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -94.98085480510838, + "Y": 4083.791013492527 + }, + { + "Id": "3a3710a0e86244319ab0f9660e730787", + "Name": "Number", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -358.46744777355366, + "Y": 4109.0884174352395 + }, + { + "Id": "6bc521aaf88d45d7b693826696da12ce", + "Name": "Data.ParseJSON", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 63.6778668956747, + "Y": 2951.149825892903 + }, + { + "Id": "fc6532b4da0b48189963aa13d810b3e7", + "Name": "Data.StringifyJSON", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -218.87515826029983, + "Y": 2946.274629895757 + }, + { + "Id": "3291662b2ec74e7095e042faeab310fe", + "Name": "List Create", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 4933.615570144443, + "Y": 2972.053367531797 + }, + { + "Id": "07366adaf0954529b1ed39b240192c96", + "Name": "List.AllTrue", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 5453.053034021074, + "Y": 2967.083613377577 + }, + { + "Id": "7e1a26f99b3c4b5780dce102ada6cd6d", + "Name": "CoordinateSystem.Scale", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -184.3888570251412, + "Y": 6263.725937415748 + }, + { + "Id": "0e9e859b9c774a968c68041b069ef5da", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -498.8787553330153, + "Y": 6323.777434432555 + }, + { + "Id": "6f8f54c01df74aacb8d171cb8f5d79d7", + "Name": "CoordinateSystem.IsEqualTo", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 436.2124116885418, + "Y": 2853.0474792577315 + }, + { + "Id": "8dc415228aa74dcc92b36cce79eda8c6", + "Name": "CoordinateSystem.IsEqualTo", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1027.6712262872618, + "Y": 4116.463280718033 + }, + { + "Id": "e23630a0fa1b4ccfb9ccdb648a4ec170", + "Name": "Data.ParseJSON", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 630.3374964126422, + "Y": 4251.764404975834 + }, + { + "Id": "c7e93a510ea2491b9d048af595a50e93", + "Name": "Data.StringifyJSON", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 347.78447125666753, + "Y": 4246.889208978687 + }, + { + "Id": "b1d843238ffe4994bbd83d4c9f25452d", + "Name": "CoordinateSystem.Origin", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2926.0535209197474, + "Y": 3248.6729935970407 + }, + { + "Id": "8f4d823e681244d88b157af31610015d", + "Name": "CoordinateSystem.XAxis", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2933.3937137173043, + "Y": 3396.3943736478673 + }, + { + "Id": "d16aa11f26cd432099f1b2cfc32d4d4f", + "Name": "CoordinateSystem.XScaleFactor", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2941.374999144463, + "Y": 3802.6933702066785 + }, + { + "Id": "f1a9bb7e1fdb45aeb1aa23e4880bc04b", + "Name": "CoordinateSystem.YAxis", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2928.6443903215372, + "Y": 3533.79209820912 + }, + { + "Id": "d3228bc0ed594154a31d4b18a5000d45", + "Name": "CoordinateSystem.YScaleFactor", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2948.487233708135, + "Y": 3925.9875188181 + }, + { + "Id": "6dd043c16b554b70ac9bd1a3b56491a8", + "Name": "CoordinateSystem.ZAxis", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2939.1221846740864, + "Y": 3663.5777285575605 + }, + { + "Id": "3fe043b97c2a4707a3d1d92a2ad3cdb9", + "Name": "CoordinateSystem.ZScaleFactor", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2946.8927262674515, + "Y": 4057.152425557125 + }, + { + "Id": "1e5fd09b7539447bb6a04b04525d6c68", + "Name": "Watch", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2316.5692865587134, + "Y": 3626.814735015965 + }, + { + "Id": "0be9d4912f0f43e7863a9574e41e10d4", + "Name": "List Create", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 3432.880384251125, + "Y": 3470.7540480275848 + }, + { + "Id": "7916d384c660414a9442cc36daa2d871", + "Name": "List Create", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 3444.433624884572, + "Y": 3902.015037977873 + }, + { + "Id": "c6524b84cd3046459d752a79c91307bd", + "Name": "Vector.IsAlmostEqualTo", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 3846.538110439471, + "Y": 3533.97179585374 + }, + { + "Id": "1d01e2e23e2f4144ab3b5d836eb9d8b3", + "Name": "==", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 3865.564506487918, + "Y": 3901.5797644086447 + }, + { + "Id": "a336c69568e7442d8b8a0cd5023935d2", + "Name": "Geometry.IsAlmostEqualTo", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 3810.831006938796, + "Y": 3274.7479756499215 + }, + { + "Id": "60ddce9f4ea743b2a0820a764951ab7f", + "Name": "List Create", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 3440.5432315395765, + "Y": 4887.208141669123 + }, + { + "Id": "d99cedcbc5e945a58f51096e588a5faf", + "Name": "CoordinateSystem.YScaleFactor", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2944.5968403631396, + "Y": 4911.180622509349 + }, + { + "Id": "2daa366e70f0442e988955febed77e10", + "Name": "CoordinateSystem.ZScaleFactor", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2943.002332922456, + "Y": 5042.345529248375 + }, + { + "Id": "b494c67894aa41bfab06e29318ee005c", + "Name": "CoordinateSystem.XScaleFactor", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2937.4846057994673, + "Y": 4787.886473897927 + }, + { + "Id": "e39d22e35da642d397c6eea5026595f4", + "Name": "CoordinateSystem.ZAxis", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2935.231791329091, + "Y": 4648.77083224881 + }, + { + "Id": "6dd3bdb4859247dfb0b96afa0462c512", + "Name": "CoordinateSystem.YAxis", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2924.753996976542, + "Y": 4518.985201900369 + }, + { + "Id": "473bd335e152499587213da9a92a4ab0", + "Name": "List Create", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 3428.9899909061296, + "Y": 4455.947151718834 + }, + { + "Id": "235687af28444f24ad6f0cdd8540b950", + "Name": "CoordinateSystem.XAxis", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2929.5033203723087, + "Y": 4381.587477339116 + }, + { + "Id": "4012f3fd5c7143769bb1c4d8da1c49f7", + "Name": "Watch", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2312.678893213718, + "Y": 4612.007838707214 + }, + { + "Id": "da58485c9cee4dd88399e71de0be598c", + "Name": "CoordinateSystem.Origin", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2922.1631275747523, + "Y": 4233.86609728829 + }, + { + "Id": "8f7169de011f425396b1b941868c8827", + "Name": "Watch", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2304.5446919195047, + "Y": 6846.870155750663 + }, + { + "Id": "484f5ae4d81d4cdda609e7ce0fbc968b", + "Name": "CoordinateSystem.IsEqualTo", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1019.5370249930484, + "Y": 6351.325597761482 + }, + { + "Id": "91464d661804403fbad8f5b908fcec2b", + "Name": "Data.ParseJSON", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 622.2032951184292, + "Y": 6486.626722019282 + }, + { + "Id": "5f185ca087a749ffb42330c223075f51", + "Name": "Data.StringifyJSON", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 339.65026996245433, + "Y": 6481.751526022135 + }, + { + "Id": "3029ecc07834494082ea8d2a3b876158", + "Name": "CoordinateSystem.Origin", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2917.919319625534, + "Y": 5483.535310640489 + }, + { + "Id": "9da9bf320d8047769ac85d3c6d7375de", + "Name": "CoordinateSystem.XAxis", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2925.259512423091, + "Y": 5631.256690691316 + }, + { + "Id": "d07834ab34534b77ad4be56488e12438", + "Name": "CoordinateSystem.XScaleFactor", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2933.2407978502497, + "Y": 6037.555687250127 + }, + { + "Id": "e6e563764ad54376bded67100ac262af", + "Name": "CoordinateSystem.YAxis", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2920.510189027324, + "Y": 5768.6544152525685 + }, + { + "Id": "8f17addd51d9438a8de970d1c0c318c2", + "Name": "CoordinateSystem.YScaleFactor", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2940.353032413922, + "Y": 6160.849835861549 + }, + { + "Id": "fff3e8930ee448a1b7c007a4d93afd19", + "Name": "CoordinateSystem.ZAxis", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2930.987983379873, + "Y": 5898.440045601009 + }, + { + "Id": "2a73307a8a894be59162eaea7fb8efc9", + "Name": "CoordinateSystem.ZScaleFactor", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2938.7585249732383, + "Y": 6292.014742600573 + }, + { + "Id": "e55a71b30db34aff9555de2bec408ef5", + "Name": "Watch", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2308.4350852645002, + "Y": 5861.677052059414 + }, + { + "Id": "726af1059b9b445784e32cf170bec2b1", + "Name": "List Create", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 3424.746182956912, + "Y": 5705.616365071033 + }, + { + "Id": "146978e65b6b41fb9f9eeefa3a70122a", + "Name": "List Create", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 3436.299423590359, + "Y": 6136.877355021321 + }, + { + "Id": "921a59150b6f4e2f864457894ce74a33", + "Name": "Vector.IsAlmostEqualTo", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 3838.403909145258, + "Y": 5768.834112897188 + }, + { + "Id": "730109a73fa64cd884e3778516b44beb", + "Name": "==", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 3857.430305193705, + "Y": 6136.442081452093 + }, + { + "Id": "13e146e0675a4ee891275dba0d1c2e3a", + "Name": "Geometry.IsAlmostEqualTo", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 3802.696805644583, + "Y": 5509.61029269337 + }, + { + "Id": "bf78f36edff14f378d0f8cf2d6379e4d", + "Name": "List Create", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 3432.4090302453633, + "Y": 7122.070458712571 + }, + { + "Id": "742a10d85e7e404390fa92e3b073bb8c", + "Name": "CoordinateSystem.YScaleFactor", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2936.4626390689264, + "Y": 7146.042939552797 + }, + { + "Id": "6258aceac0634efc8e76f78bc39b68e0", + "Name": "CoordinateSystem.ZScaleFactor", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2934.8681316282427, + "Y": 7277.207846291823 + }, + { + "Id": "2de7043c98854dc097776984d069e3c7", + "Name": "CoordinateSystem.XScaleFactor", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2929.350404505254, + "Y": 7022.748790941376 + }, + { + "Id": "c9b6ab4018f04ee888f4d20823b85996", + "Name": "CoordinateSystem.ZAxis", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2927.0975900348776, + "Y": 6883.633149292258 + }, + { + "Id": "8904946a3b394131bdc88960e7814fe1", + "Name": "CoordinateSystem.YAxis", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2916.619795682329, + "Y": 6753.847518943818 + }, + { + "Id": "536be26a6ca54e4fa4d22ef10f601d8c", + "Name": "List Create", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 3420.8557896119164, + "Y": 6690.809468762282 + }, + { + "Id": "75b99b135c2a481c9eb99a1f1c1e4e2a", + "Name": "CoordinateSystem.XAxis", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2921.3691190780955, + "Y": 6616.4497943825645 + }, + { + "Id": "31e6566f6bfc421899be0caf1594b3f4", + "Name": "CoordinateSystem.Origin", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2914.028926280539, + "Y": 6468.728414331738 + }, + { + "Id": "192f54f0d5de4a2b88e5f0bd0b582aed", + "Name": "List.Flatten", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 5196.3850263173545, + "Y": 2969.7355772597225 + }, + { + "Id": "816b187346734df7a888da3a8fc04f64", + "Name": "Object.Type", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 419.0265423014471, + "Y": 3287.4364756794625 + }, + { + "Id": "a024c5a36fc44c618b92af57035249d9", + "Name": "==", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 727.0781805829611, + "Y": 3205.54411075566 + }, + { + "Id": "59e7b6564dd54cae9340eb47efa7e1d9", + "Name": "Object.Type", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 422.6058639792809, + "Y": 3142.1857236714104 + }, + { + "Id": "19e9a6df80f14b94a9837ef21eb5aa21", + "Name": "List Create", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1024.583544006933, + "Y": 2971.14684836103 + } + ], + "Annotations": [ + { + "Id": "4193cc6792584e54a262eac56443df19", + "Title": "All True", + "DescriptionText": "", + "IsExpanded": true, + "WidthAdjustment": 0.0, + "HeightAdjustment": 0.0, + "Nodes": [ + "07366adaf0954529b1ed39b240192c96" + ], + "HasNestedGroups": false, + "Left": 5443.053034021074, + "Top": 2894.083613377577, + "Width": 196.0, + "Height": 205.0, + "FontSize": 36.0, + "GroupStyleId": "00000000-0000-0000-0000-000000000000", + "InitialTop": 2967.083613377577, + "InitialHeight": 145.0, + "TextblockHeight": 63.0, + "Background": "#FFC1D676" + }, + { + "Id": "4f2ff9971aa741798da78beac3cd7881", + "Title": "Coordinate Properties", + "DescriptionText": "", + "IsExpanded": true, + "WidthAdjustment": 0.0, + "HeightAdjustment": 0.0, + "Nodes": [ + "b1d843238ffe4994bbd83d4c9f25452d", + "8f4d823e681244d88b157af31610015d", + "d16aa11f26cd432099f1b2cfc32d4d4f", + "f1a9bb7e1fdb45aeb1aa23e4880bc04b", + "d3228bc0ed594154a31d4b18a5000d45", + "6dd043c16b554b70ac9bd1a3b56491a8", + "3fe043b97c2a4707a3d1d92a2ad3cdb9", + "1e5fd09b7539447bb6a04b04525d6c68", + "0be9d4912f0f43e7863a9574e41e10d4", + "7916d384c660414a9442cc36daa2d871", + "c6524b84cd3046459d752a79c91307bd", + "1d01e2e23e2f4144ab3b5d836eb9d8b3", + "a336c69568e7442d8b8a0cd5023935d2", + "60ddce9f4ea743b2a0820a764951ab7f", + "d99cedcbc5e945a58f51096e588a5faf", + "2daa366e70f0442e988955febed77e10", + "b494c67894aa41bfab06e29318ee005c", + "e39d22e35da642d397c6eea5026595f4", + "6dd3bdb4859247dfb0b96afa0462c512", + "473bd335e152499587213da9a92a4ab0", + "235687af28444f24ad6f0cdd8540b950", + "4012f3fd5c7143769bb1c4d8da1c49f7", + "da58485c9cee4dd88399e71de0be598c" + ], + "HasNestedGroups": false, + "Left": 2302.678893213718, + "Top": 3175.6729935970407, + "Width": 1804.3592172257531, + "Height": 1998.6725356513343, + "FontSize": 36.0, + "GroupStyleId": "00000000-0000-0000-0000-000000000000", + "InitialTop": 3248.6729935970407, + "InitialHeight": 1938.6725356513343, + "TextblockHeight": 63.0, + "Background": "#FFC1D676" + }, + { + "Id": "acde003fe513452f9b2a88f34ac77819", + "Title": "Coordinate Properties", + "DescriptionText": "", + "IsExpanded": true, + "WidthAdjustment": 0.0, + "HeightAdjustment": 0.0, + "Nodes": [ + "3029ecc07834494082ea8d2a3b876158", + "9da9bf320d8047769ac85d3c6d7375de", + "d07834ab34534b77ad4be56488e12438", + "e6e563764ad54376bded67100ac262af", + "8f17addd51d9438a8de970d1c0c318c2", + "fff3e8930ee448a1b7c007a4d93afd19", + "2a73307a8a894be59162eaea7fb8efc9", + "e55a71b30db34aff9555de2bec408ef5", + "726af1059b9b445784e32cf170bec2b1", + "146978e65b6b41fb9f9eeefa3a70122a", + "921a59150b6f4e2f864457894ce74a33", + "730109a73fa64cd884e3778516b44beb", + "13e146e0675a4ee891275dba0d1c2e3a", + "bf78f36edff14f378d0f8cf2d6379e4d", + "742a10d85e7e404390fa92e3b073bb8c", + "6258aceac0634efc8e76f78bc39b68e0", + "2de7043c98854dc097776984d069e3c7", + "c9b6ab4018f04ee888f4d20823b85996", + "8904946a3b394131bdc88960e7814fe1", + "536be26a6ca54e4fa4d22ef10f601d8c", + "75b99b135c2a481c9eb99a1f1c1e4e2a", + "8f7169de011f425396b1b941868c8827", + "31e6566f6bfc421899be0caf1594b3f4" + ], + "HasNestedGroups": false, + "Left": 2294.5446919195047, + "Top": 5410.535310640489, + "Width": 1804.3592172257531, + "Height": 1998.6725356513343, + "FontSize": 36.0, + "GroupStyleId": "00000000-0000-0000-0000-000000000000", + "InitialTop": 5483.535310640489, + "InitialHeight": 1938.6725356513343, + "TextblockHeight": 63.0, + "Background": "#FFC1D676" + }, + { + "Id": "5c9fa139345540caa2a4f088620be287", + "Title": "Todo... Determine why IsEquals is false. All props are identical", + "DescriptionText": "", + "IsExpanded": true, + "WidthAdjustment": 0.0, + "HeightAdjustment": 0.0, + "Nodes": [ + "8dc415228aa74dcc92b36cce79eda8c6" + ], + "HasNestedGroups": false, + "Left": 1017.6712262872618, + "Top": 3913.4632807180333, + "Width": 307.0, + "Height": 365.0, + "FontSize": 36.0, + "GroupStyleId": "bc688959-ce34-4bf5-90f8-6ddd23f80989", + "InitialTop": 4116.463280718033, + "InitialHeight": 145.0, + "TextblockHeight": 193.0, + "Background": "#FFA4E1FF" + }, + { + "Id": "d09349d87f0143e0ba96f58c96b45b97", + "Title": "Todo... Determine why IsEquals is false. All props are identical", + "DescriptionText": "", + "IsExpanded": true, + "WidthAdjustment": 0.0, + "HeightAdjustment": 0.0, + "Nodes": [ + "484f5ae4d81d4cdda609e7ce0fbc968b" + ], + "HasNestedGroups": false, + "Left": 1009.5370249930484, + "Top": 6148.325597761482, + "Width": 307.0, + "Height": 365.0, + "FontSize": 36.0, + "GroupStyleId": "bc688959-ce34-4bf5-90f8-6ddd23f80989", + "InitialTop": 6351.325597761482, + "InitialHeight": 145.0, + "TextblockHeight": 193.0, + "Background": "#FFA4E1FF" + } + ], + "X": -307.7440287186273, + "Y": -713.12411330457, + "Zoom": 0.3566764530285818 + } +} \ No newline at end of file diff --git a/test/core/json/Abstract_Plane_JSONParsing.dyn b/test/core/json/Abstract_Plane_JSONParsing.dyn new file mode 100644 index 00000000000..6f0314d210b --- /dev/null +++ b/test/core/json/Abstract_Plane_JSONParsing.dyn @@ -0,0 +1,1850 @@ +{ + "Uuid": "6bdfb0fe-b31e-4c71-8f79-7fc29c53e3ac", + "IsCustomNode": false, + "Description": "", + "Name": "Abstract_Plane_JSONParsing", + "ElementResolver": { + "ResolutionMap": {} + }, + "Inputs": [], + "Outputs": [], + "Nodes": [ + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "6b8c83a8df76454481d01936cd5ddbcd", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "c34baa1841914cac9db607b71b41d8f7", + "Name": "curve", + "Description": "Autodesk.DesignScript.Geometry.Curve", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "eb383155efc048e8900868dc85213536", + "Name": "Curve", + "Description": "A new Curve with the opposite direction", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Curve.Reverse", + "Replication": "Auto", + "Description": "Reverse the direction of the curve\n\nCurve.Reverse ( ): Curve" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "ed28fb93e5484598bd1bbb4f66d2c27c", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "ddaff23e6e914392808a10f64144bda3", + "Name": "values", + "Description": "A List of values\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "ede79e2b0882454ebd19fc34167bfc41", + "Name": "json", + "Description": "A JSON string where primitive types (e.g. double, int, boolean), Lists, and Dictionary's will be turned into the associated JSON type.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Data.StringifyJSON@var[]..[]", + "Replication": "Auto", + "Description": "Stringify converts an arbitrary value or a list of arbitrary values to JSON. Replication can be used to apply the operation over a list, producing a list of JSON strings.\n\nData.StringifyJSON (values: var[]..[]): string" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "a14e625f30d54fce81a1933543e778b5", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "e0ca394d04ca41f3b8174568180ca34e", + "Name": "json", + "Description": "A JSON string\n\nstring", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "f41ef00532644b0892cd7a2dd0f62c8e", + "Name": "result", + "Description": "The result type depends on the content of the input string. The result type can be a primitive value (e.g. string, boolean, double), a List, or a Dictionary.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Data.ParseJSON@string", + "Replication": "Auto", + "Description": "Parse converts an arbitrary JSON string to a value. It is the opposite of JSON.Stringify.\n\nData.ParseJSON (json: string): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "f0e1505d50c04577aad94f2e49faa9f6", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "62259f31de654afcb3fad3c003383e3e", + "Name": "geometry", + "Description": "Autodesk.DesignScript.Geometry.Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "297c0d29ef9d4d9a8f47ed6b166ba971", + "Name": "other", + "Description": "Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "e929ced36aca4057aa5ca243dd8629de", + "Name": "bool", + "Description": "bool", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Geometry.IsAlmostEqualTo@Autodesk.DesignScript.Geometry.Geometry", + "Replication": "Auto", + "Description": "Check if the two objects have the same representational geometry or numerical values\n\nGeometry.IsAlmostEqualTo (other: Geometry): bool" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "c5431f2230a54b53bef8db7fa7722bbf", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "85f4c4f0e5404619a0e20d724080e930", + "Name": "geometry", + "Description": "Autodesk.DesignScript.Geometry.Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "0d0b9036e1f24fec8fef464cfe5b04c6", + "Name": "mirrorPlane", + "Description": "Plane", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "59bb1ff9f55a4cb8af01c4d219f8128c", + "Name": "Geometry", + "Description": "Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Geometry.Mirror@Autodesk.DesignScript.Geometry.Plane", + "Replication": "Auto", + "Description": "Mirror the object across the input Plane\n\nGeometry.Mirror (mirrorPlane: Plane): Geometry" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "223c8a4c031c4ae093f3fb7e1901b27f", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "92ac962ee1f04d37a7fa4990ce60e766", + "Name": "json", + "Description": "A JSON string\n\nstring", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "7044cf65d6144910b802edb85a274e51", + "Name": "result", + "Description": "The result type depends on the content of the input string. The result type can be a primitive value (e.g. string, boolean, double), a List, or a Dictionary.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Data.ParseJSON@string", + "Replication": "Auto", + "Description": "Parse converts an arbitrary JSON string to a value. It is the opposite of JSON.Stringify.\n\nData.ParseJSON (json: string): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "e86a4398b0a844008ad5d6f80c913106", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "341635ee65f64c8897f2de21c3d187f6", + "Name": "geometry", + "Description": "Autodesk.DesignScript.Geometry.Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "d9ef5521e8104d6b86274042ad8f4fdb", + "Name": "other", + "Description": "Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "2d611cfadbb144fe8014da91aaf081f9", + "Name": "bool", + "Description": "bool", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Geometry.IsAlmostEqualTo@Autodesk.DesignScript.Geometry.Geometry", + "Replication": "Auto", + "Description": "Check if the two objects have the same representational geometry or numerical values\n\nGeometry.IsAlmostEqualTo (other: Geometry): bool" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "8d2ba25b0c464d9a8d51c90db5f2755a", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "526ecca2dc234cd8adca5ca8f5337de3", + "Name": "values", + "Description": "A List of values\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "4e27cd524d674b4b9f1218688f7e51de", + "Name": "json", + "Description": "A JSON string where primitive types (e.g. double, int, boolean), Lists, and Dictionary's will be turned into the associated JSON type.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Data.StringifyJSON@var[]..[]", + "Replication": "Auto", + "Description": "Stringify converts an arbitrary value or a list of arbitrary values to JSON. Replication can be used to apply the operation over a list, producing a list of JSON strings.\n\nData.StringifyJSON (values: var[]..[]): string" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "a0fcfe276bb148c38363a2a9329ff8c6", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "3368257c965240dab164ce44891072a8", + "Name": "x", + "Description": "X coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "2c86775eb1074267914acf6a2feec4f9", + "Name": "y", + "Description": "Y coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "a424723d790d48e096322c9fb0a5ae13", + "Name": "z", + "Description": "Z coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "168bcb9eacad45908f79d3c45cce2c27", + "Name": "Point", + "Description": "Point created by coordinates", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Point.ByCoordinates@double,double,double", + "Replication": "Auto", + "Description": "Form a Point given 3 cartesian coordinates\n\nPoint.ByCoordinates (x: double = 0, y: double = 0, z: double = 0): Point" + }, + { + "ConcreteType": "CoreNodeModels.Input.DoubleInput, CoreNodeModels", + "NumberType": "Double", + "Id": "f588cf20edac424492e5f61cd8b4e248", + "NodeType": "NumberInputNode", + "Inputs": [], + "Outputs": [ + { + "Id": "fc60815c52f0417c9ec181d16a179d1c", + "Name": "", + "Description": "Double", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Creates a number", + "InputValue": 2.0 + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "ae01d16856e04ee98e942873c3311f1b", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "a1791bb7715643f29421a0e870e053b5", + "Name": "x", + "Description": "X coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "8e3d20c052614b71bbbf784b67d8b559", + "Name": "y", + "Description": "Y coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "cbbff09d65244e2bb8a33ee19d3d4081", + "Name": "z", + "Description": "Z coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "ba21f1d5053f459ebc8f4c08f04574e0", + "Name": "Vector", + "Description": "Vector created by coordinates", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Vector.ByCoordinates@double,double,double", + "Replication": "Auto", + "Description": "Form a Vector by 3 Euclidean coordinates\n\nVector.ByCoordinates (x: double = 0, y: double = 0, z: double = 0): Vector" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "bddda9cf3fba49abbc8adbf8970cada6", + "NodeType": "FunctionNode", + "Inputs": [], + "Outputs": [ + { + "Id": "74a4e0ec12304a6fb0e2898f6ec92dd5", + "Name": "Plane", + "Description": "Plane at XZ plane of world", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Plane.XZ", + "Replication": "Auto", + "Description": "Creates a plane in the world XZ plane\n\nPlane.XZ ( ): Plane" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "53fb98609ab24c28a8d453c51e584542", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "7170b996fa4548c2a54ea10fa23270d1", + "Name": "x", + "Description": "double\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "b7a6f47009b7424ebbbb1b74c2b28146", + "Name": "y", + "Description": "double\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "ffcf590ed156499096c70814aabcc2d3", + "Name": "z", + "Description": "double\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "487fd07181924571b73e6e24046a05ce", + "Name": "CoordinateSystem", + "Description": "CoordinateSystem", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.CoordinateSystem.ByOrigin@double,double,double", + "Replication": "Auto", + "Description": "Create a CoordinateSystem with origin at X, Y, and Z locations, with X and Y Axes set as WCS X and Y Axes.\n\nCoordinateSystem.ByOrigin (x: double = 0, y: double = 0, z: double = 0): CoordinateSystem" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "16e543ccbaf748269b1c0c8b64e38a14", + "NodeType": "CodeBlockNode", + "Inputs": [], + "Outputs": [ + { + "Id": "9877b21d1a1848ea9c816a5762376947", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "055c94e81fb4468ca37560683c0d0804", + "Name": "", + "Description": "Value of expression at line 2", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "4cf1f68b80db4bfab717045ca611d4cc", + "Name": "", + "Description": "Value of expression at line 3", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "2;\n3;\n4;" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "8533e802506546c88cf46efb60cb30ef", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "377f4d47b8494304bfeea26b31d9a869", + "Name": "coordinateSystem", + "Description": "Autodesk.DesignScript.Geometry.CoordinateSystem", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "ae7fdab182bc42378beefedf857e6c70", + "Name": "origin", + "Description": "Origin point\n\nPoint", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "2886cbcea5b941ef8d7f6d23835d1b02", + "Name": "axis", + "Description": "Vector axis for rotation\n\nVector", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "0488f30ec00645bbadbc1de3ed188375", + "Name": "degrees", + "Description": "Degrees to rotate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "8bb5cb937da94fdea104b79edec941dd", + "Name": "CoordinateSystem", + "Description": "Rotated coordinate system", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.CoordinateSystem.Rotate@Autodesk.DesignScript.Geometry.Point,Autodesk.DesignScript.Geometry.Vector,double", + "Replication": "Auto", + "Description": "Rotates an object around an origin and an axis by a specified degree\n\nCoordinateSystem.Rotate (origin: Point, axis: Vector, degrees: double = 0): CoordinateSystem" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "37395a69d48c4a7b99610a0c96cfbc22", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "08c9f84a85d441e0bc050bec55b83d1f", + "Name": "x", + "Description": "X coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "dedf5f52faeb44618f7706cbe77793e5", + "Name": "y", + "Description": "Y coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "80c41af97ffc46b5be82b063de8227ca", + "Name": "z", + "Description": "Z coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "3751954e148e4600a3d080325fb00e70", + "Name": "Point", + "Description": "Point created by coordinates", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Point.ByCoordinates@double,double,double", + "Replication": "Auto", + "Description": "Form a Point given 3 cartesian coordinates\n\nPoint.ByCoordinates (x: double = 0, y: double = 0, z: double = 0): Point" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "01740c040af643349a8d72e79a7c7dd4", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "3c6c5102efe14291914e1e4bde9a7f95", + "Name": "x", + "Description": "X coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "f06dae9eb561423ab263aee0b278f141", + "Name": "y", + "Description": "Y coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "a914b32db99548cd8773b1c78cddd80f", + "Name": "z", + "Description": "Z coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "d285714acf534e79ad8f2adaf87cef82", + "Name": "Vector", + "Description": "Vector created by coordinates", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Vector.ByCoordinates@double,double,double", + "Replication": "Auto", + "Description": "Form a Vector by 3 Euclidean coordinates\n\nVector.ByCoordinates (x: double = 0, y: double = 0, z: double = 0): Vector" + }, + { + "ConcreteType": "CoreNodeModels.Input.DoubleInput, CoreNodeModels", + "NumberType": "Double", + "Id": "a0d2de17c88643ceaa26c85513637113", + "NodeType": "NumberInputNode", + "Inputs": [], + "Outputs": [ + { + "Id": "cdd3f7df6009472d97a31806a64ee36e", + "Name": "", + "Description": "Double", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Creates a number", + "InputValue": 24.0 + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "b6f93229de91434794d004917d47136b", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "369049b3e19b4524a0118c3012f541c9", + "Name": "coordinateSystem", + "Description": "Autodesk.DesignScript.Geometry.CoordinateSystem", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "1715dbfc74894bdab1bf54872a02b062", + "Name": "amount", + "Description": "Amount to scale\n\ndouble\nDefault value : 1", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "02b3ce6e7dbc494e9e8b1e43637d201e", + "Name": "CoordinateSystem", + "Description": "Scaled coordinate system", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.CoordinateSystem.Scale@double", + "Replication": "Auto", + "Description": "Scale uniformly around the origin\n\nCoordinateSystem.Scale (amount: double = 1): CoordinateSystem" + }, + { + "ConcreteType": "CoreNodeModels.Input.DoubleInput, CoreNodeModels", + "NumberType": "Double", + "Id": "121c70cf049e40b59687d2a0f5a9c373", + "NodeType": "NumberInputNode", + "Inputs": [], + "Outputs": [ + { + "Id": "f746b7614ea54da087e59bfd1dce3531", + "Name": "", + "Description": "Double", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Creates a number", + "InputValue": 2.3 + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "2a792b15395a4536bdd6b37f4746dd54", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "b271db31b8284336a80af2546ac10d40", + "Name": "geometry", + "Description": "Autodesk.DesignScript.Geometry.Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "ac41e4fd6c8245ab86014aa864e8ddee", + "Name": "fromCoordinateSystem", + "Description": "CoordinateSystem", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "c134f78cc3994d03839e87f1555e2724", + "Name": "contextCoordinateSystem", + "Description": "CoordinateSystem", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "f9dde021372246138c1de14bf4dde5a8", + "Name": "Geometry", + "Description": "Transformed Geometry.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Geometry.Transform@Autodesk.DesignScript.Geometry.CoordinateSystem,Autodesk.DesignScript.Geometry.CoordinateSystem", + "Replication": "Auto", + "Description": "Transforms this geometry from source CoordinateSystem to a new context CoordinateSystem.\n\nGeometry.Transform (fromCoordinateSystem: CoordinateSystem, contextCoordinateSystem: CoordinateSystem): Geometry" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "871816cfb04e4293a4d3894dc32beef5", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "fe379819f4324fb8b2a3ff3cd7d98d8b", + "Name": "x", + "Description": "double\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "3b3095c641c24bcd97239825ca0ce9ec", + "Name": "y", + "Description": "double\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "b75b65929e1d4f7a88f280b7c6c34a42", + "Name": "CoordinateSystem", + "Description": "CoordinateSystem", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.CoordinateSystem.ByOrigin@double,double", + "Replication": "Auto", + "Description": "Create a CoordinateSystem with origin at X and Y locations, with X and Y Axes set as WCS X and Y Axes. Z defaults to 0.\n\nCoordinateSystem.ByOrigin (x: double = 0, y: double = 0): CoordinateSystem" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "64e0f81d9fc2401497569e344f4ba003", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "156320e83748436b9f5b52f8ae36aedf", + "Name": "json", + "Description": "A JSON string\n\nstring", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "9657019818424f049673edd959f1219d", + "Name": "result", + "Description": "The result type depends on the content of the input string. The result type can be a primitive value (e.g. string, boolean, double), a List, or a Dictionary.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Data.ParseJSON@string", + "Replication": "Auto", + "Description": "Parse converts an arbitrary JSON string to a value. It is the opposite of JSON.Stringify.\n\nData.ParseJSON (json: string): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "d12022d962f6465c9ab53b259cceaed5", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "2b94ef987d084b77bf0640dbf4ce05cf", + "Name": "geometry", + "Description": "Autodesk.DesignScript.Geometry.Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "818f134e41d64aabaa31e399d80fed8a", + "Name": "other", + "Description": "Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "bc6ae8c3deec4b88be656d400fd1965b", + "Name": "bool", + "Description": "bool", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Geometry.IsAlmostEqualTo@Autodesk.DesignScript.Geometry.Geometry", + "Replication": "Auto", + "Description": "Check if the two objects have the same representational geometry or numerical values\n\nGeometry.IsAlmostEqualTo (other: Geometry): bool" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "5d982ac07be34126ac01f2c13e785100", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "46813653e01945a7965bbf18a0ff7c06", + "Name": "values", + "Description": "A List of values\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "b12180c89ba64b189ec6d1b53f71a1af", + "Name": "json", + "Description": "A JSON string where primitive types (e.g. double, int, boolean), Lists, and Dictionary's will be turned into the associated JSON type.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Data.StringifyJSON@var[]..[]", + "Replication": "Auto", + "Description": "Stringify converts an arbitrary value or a list of arbitrary values to JSON. Replication can be used to apply the operation over a list, producing a list of JSON strings.\n\nData.StringifyJSON (values: var[]..[]): string" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "42bd06520fbc49479cf3d6560798c5a3", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "af667ee80cac4837a2946838b3f88ba0", + "Name": "origin", + "Description": "Origin point of plane\n\nPoint\nDefault value : Autodesk.DesignScript.Geometry.Point.ByCoordinates(0, 0, 0)", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "661308a807ca40d999220e30daba870f", + "Name": "normal", + "Description": "Normal direction vector of plane\n\nVector\nDefault value : Autodesk.DesignScript.Geometry.Vector.ByCoordinates(0, 0, 1)", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "d0daca811fb14b1fbb93eefb6de3d69c", + "Name": "Plane", + "Description": "Plane created by origin and normal", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Plane.ByOriginNormal@Autodesk.DesignScript.Geometry.Point,Autodesk.DesignScript.Geometry.Vector", + "Replication": "Auto", + "Description": "Create a Plane centered at root Point, with input normal Vector.\n\nPlane.ByOriginNormal (origin: Point = Autodesk.DesignScript.Geometry.Point.ByCoordinates(0, 0, 0), normal: Vector = Autodesk.DesignScript.Geometry.Vector.ByCoordinates(0, 0, 1)): Plane" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "bb6672a948a2409ca3a2df7ccbe54a39", + "NodeType": "CodeBlockNode", + "Inputs": [], + "Outputs": [ + { + "Id": "fbe7d6c3b20b4cc2898546886ec1f9cf", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "2a8bccbc1a5b4cb6a4325c2d6ed82a21", + "Name": "", + "Description": "Value of expression at line 2", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "3e9519ac955e4269b02b54b3f7fdba11", + "Name": "", + "Description": "Value of expression at line 3", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "1;\n2.3;\n4;" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "9754cbd66d4842419a6899f372a80aee", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "002139ad743746048b44c301e148e8c7", + "Name": "list", + "Description": "List to be checked on whether all items are true.\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "c97b19167bf84ce7a88ea03437a81df1", + "Name": "bool", + "Description": "True if all items from list are true, false if one or more items is not true", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.List.AllTrue@var[]..[]", + "Replication": "Auto", + "Description": "Determines if all items in the given list is a boolean and has a true value.\n\nList.AllTrue (list: var[]..[]): bool" + }, + { + "ConcreteType": "CoreNodeModels.CreateList, CoreNodeModels", + "VariableInputPorts": true, + "Id": "fe8255d9034840d0b6dc415adeca9b18", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "8ddd3fadebee45c49c1d8efa44d52216", + "Name": "item0", + "Description": "Item Index #0", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "cc21380997e04cbd844370ebaf133d81", + "Name": "item1", + "Description": "Item Index #1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "23511aea76a4416f8b8eaa5f72c2dd8c", + "Name": "item2", + "Description": "Item Index #2", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "21cd99193b0b4dceb444f85874cbd641", + "Name": "item3", + "Description": "Item Index #3", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "f7c0858277fb47c1b4c1015c51cd2938", + "Name": "list", + "Description": "A list (type: var[]..[])", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Makes a new list from the given inputs" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "a02b96e49e38456eb2f59771b08e2874", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "2ca0fb4901434bbfbb2334a8066e7c01", + "Name": "object", + "Description": "Object to query type\n\nvar", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "1203c2a4d9b94fa5b6f690971229078e", + "Name": "string", + "Description": "Type of object.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Object.Type@var", + "Replication": "Auto", + "Description": "Returns the type of object represented as string.\n\nObject.Type (object: var): string" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "4c96f65c18034a5883dad0e0b1f0feb1", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "f5de52b33bc14b639c14b01ededbccee", + "Name": "x", + "Description": "Basic type object to compare (e.g. bool, int, double, string, etc.)\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "849eb40f63cf4a9199bc1977aa49caa9", + "Name": "y", + "Description": "Basic type object to compare (e.g. bool, int, double, string, etc.)\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "1f99d58b0781473fabd65d9435daf334", + "Name": "bool", + "Description": "Result of equality check", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "==@var[]..[],var[]..[]", + "Replication": "Auto", + "Description": "Compares if x and y are equal\n\n== (x: var[]..[], y: var[]..[]): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "8c1a173d572444af9c04e90329a7a1cb", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "bf9bce34535d4f2ebfd431812de1aa0a", + "Name": "object", + "Description": "Object to query type\n\nvar", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "aa3f1d66ddd64c7e88eb88815d1112f4", + "Name": "string", + "Description": "Type of object.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Object.Type@var", + "Replication": "Auto", + "Description": "Returns the type of object represented as string.\n\nObject.Type (object: var): string" + } + ], + "Connectors": [ + { + "Start": "ede79e2b0882454ebd19fc34167bfc41", + "End": "e0ca394d04ca41f3b8174568180ca34e", + "Id": "41c80bd5ea6c4defb9e8533a8b5c97bd", + "IsHidden": "False" + }, + { + "Start": "f41ef00532644b0892cd7a2dd0f62c8e", + "End": "297c0d29ef9d4d9a8f47ed6b166ba971", + "Id": "11792044ef024d69a898e574f476e4a2", + "IsHidden": "False" + }, + { + "Start": "f41ef00532644b0892cd7a2dd0f62c8e", + "End": "2ca0fb4901434bbfbb2334a8066e7c01", + "Id": "f40f466f49014a62810baa4c58af5397", + "IsHidden": "False" + }, + { + "Start": "e929ced36aca4057aa5ca243dd8629de", + "End": "8ddd3fadebee45c49c1d8efa44d52216", + "Id": "cdb1f43301e6438396d8d8c91cda923c", + "IsHidden": "False" + }, + { + "Start": "59bb1ff9f55a4cb8af01c4d219f8128c", + "End": "526ecca2dc234cd8adca5ca8f5337de3", + "Id": "cf715ba1b3d94395b4e248dd5065cec5", + "IsHidden": "False" + }, + { + "Start": "59bb1ff9f55a4cb8af01c4d219f8128c", + "End": "341635ee65f64c8897f2de21c3d187f6", + "Id": "44c642f42a9c437e8a0d39db7eb8a416", + "IsHidden": "False" + }, + { + "Start": "7044cf65d6144910b802edb85a274e51", + "End": "d9ef5521e8104d6b86274042ad8f4fdb", + "Id": "2650bab6c0144777806b877b45f171b2", + "IsHidden": "False" + }, + { + "Start": "2d611cfadbb144fe8014da91aaf081f9", + "End": "cc21380997e04cbd844370ebaf133d81", + "Id": "eb356d0d42a241adb05e6a6d71bdc895", + "IsHidden": "False" + }, + { + "Start": "4e27cd524d674b4b9f1218688f7e51de", + "End": "92ac962ee1f04d37a7fa4990ce60e766", + "Id": "f7f5604ad6004a1ea9626f674fce1728", + "IsHidden": "False" + }, + { + "Start": "168bcb9eacad45908f79d3c45cce2c27", + "End": "af667ee80cac4837a2946838b3f88ba0", + "Id": "3009da7a39d54fa1bf3c5d4ab3347aaf", + "IsHidden": "False" + }, + { + "Start": "fc60815c52f0417c9ec181d16a179d1c", + "End": "3368257c965240dab164ce44891072a8", + "Id": "30ff379c4e2940a78a58be1f9a79a6ba", + "IsHidden": "False" + }, + { + "Start": "fc60815c52f0417c9ec181d16a179d1c", + "End": "2c86775eb1074267914acf6a2feec4f9", + "Id": "114e0d1c66cc446391d70ed7da8a35c1", + "IsHidden": "False" + }, + { + "Start": "fc60815c52f0417c9ec181d16a179d1c", + "End": "a424723d790d48e096322c9fb0a5ae13", + "Id": "76e7ac075ad24ed09848a8897ab99544", + "IsHidden": "False" + }, + { + "Start": "ba21f1d5053f459ebc8f4c08f04574e0", + "End": "661308a807ca40d999220e30daba870f", + "Id": "0dfc9da156be4fdebbf62321de9e85c5", + "IsHidden": "False" + }, + { + "Start": "74a4e0ec12304a6fb0e2898f6ec92dd5", + "End": "0d0b9036e1f24fec8fef464cfe5b04c6", + "Id": "e66b993e43684c599732c7ab4c4489ee", + "IsHidden": "False" + }, + { + "Start": "487fd07181924571b73e6e24046a05ce", + "End": "377f4d47b8494304bfeea26b31d9a869", + "Id": "3e1719f0d5fe4e81961262c015bc8dd6", + "IsHidden": "False" + }, + { + "Start": "9877b21d1a1848ea9c816a5762376947", + "End": "7170b996fa4548c2a54ea10fa23270d1", + "Id": "94ee48846ccc4390918381a9501f417e", + "IsHidden": "False" + }, + { + "Start": "9877b21d1a1848ea9c816a5762376947", + "End": "3c6c5102efe14291914e1e4bde9a7f95", + "Id": "f77cb4c9ae7c41ebb3891d97f66b1a17", + "IsHidden": "False" + }, + { + "Start": "055c94e81fb4468ca37560683c0d0804", + "End": "b7a6f47009b7424ebbbb1b74c2b28146", + "Id": "09947f9819c647c9a3b8e27e00d0469e", + "IsHidden": "False" + }, + { + "Start": "4cf1f68b80db4bfab717045ca611d4cc", + "End": "ffcf590ed156499096c70814aabcc2d3", + "Id": "b907736e026b4a54af63243e8b10ecda", + "IsHidden": "False" + }, + { + "Start": "4cf1f68b80db4bfab717045ca611d4cc", + "End": "f06dae9eb561423ab263aee0b278f141", + "Id": "997b8d42277d404ca8935702931594d1", + "IsHidden": "False" + }, + { + "Start": "8bb5cb937da94fdea104b79edec941dd", + "End": "369049b3e19b4524a0118c3012f541c9", + "Id": "147960f7a4a94aaa8a2d443126ef116a", + "IsHidden": "False" + }, + { + "Start": "3751954e148e4600a3d080325fb00e70", + "End": "ae7fdab182bc42378beefedf857e6c70", + "Id": "7dce8393cca949da8dba79220168a7bc", + "IsHidden": "False" + }, + { + "Start": "d285714acf534e79ad8f2adaf87cef82", + "End": "2886cbcea5b941ef8d7f6d23835d1b02", + "Id": "88da9d9ba41a4d9583e3b5568a73fe1f", + "IsHidden": "False" + }, + { + "Start": "cdd3f7df6009472d97a31806a64ee36e", + "End": "0488f30ec00645bbadbc1de3ed188375", + "Id": "b0cebbe87ee848e3bcc98a454a7ab28d", + "IsHidden": "False" + }, + { + "Start": "02b3ce6e7dbc494e9e8b1e43637d201e", + "End": "c134f78cc3994d03839e87f1555e2724", + "Id": "f9bb6bb7abc3489388cf8e2bb1639f25", + "IsHidden": "False" + }, + { + "Start": "f746b7614ea54da087e59bfd1dce3531", + "End": "1715dbfc74894bdab1bf54872a02b062", + "Id": "a04e4c259e7e491e9b45d94542493fe3", + "IsHidden": "False" + }, + { + "Start": "f9dde021372246138c1de14bf4dde5a8", + "End": "46813653e01945a7965bbf18a0ff7c06", + "Id": "ea71fc471cca4009b7bbab6575ae391f", + "IsHidden": "False" + }, + { + "Start": "f9dde021372246138c1de14bf4dde5a8", + "End": "2b94ef987d084b77bf0640dbf4ce05cf", + "Id": "5437190d95fd43f495e7d3ba2d9afb99", + "IsHidden": "False" + }, + { + "Start": "b75b65929e1d4f7a88f280b7c6c34a42", + "End": "ac41e4fd6c8245ab86014aa864e8ddee", + "Id": "7ec5afb18ecf4c318e47554217b597b0", + "IsHidden": "False" + }, + { + "Start": "9657019818424f049673edd959f1219d", + "End": "818f134e41d64aabaa31e399d80fed8a", + "Id": "18c9576a56fe432993f2d66d691062ab", + "IsHidden": "False" + }, + { + "Start": "bc6ae8c3deec4b88be656d400fd1965b", + "End": "23511aea76a4416f8b8eaa5f72c2dd8c", + "Id": "3b0b30e276b849b7b6801b718d6a218c", + "IsHidden": "False" + }, + { + "Start": "b12180c89ba64b189ec6d1b53f71a1af", + "End": "156320e83748436b9f5b52f8ae36aedf", + "Id": "4d2744007b0447eb8ee1370d06136366", + "IsHidden": "False" + }, + { + "Start": "d0daca811fb14b1fbb93eefb6de3d69c", + "End": "ddaff23e6e914392808a10f64144bda3", + "Id": "8a0ed06264414783afdb95dc43cdcada", + "IsHidden": "False" + }, + { + "Start": "d0daca811fb14b1fbb93eefb6de3d69c", + "End": "62259f31de654afcb3fad3c003383e3e", + "Id": "69efcbc2b97846ab99053451923a5d9c", + "IsHidden": "False" + }, + { + "Start": "d0daca811fb14b1fbb93eefb6de3d69c", + "End": "85f4c4f0e5404619a0e20d724080e930", + "Id": "915e3cc9cb2544eab829b5c79abe79cf", + "IsHidden": "False" + }, + { + "Start": "d0daca811fb14b1fbb93eefb6de3d69c", + "End": "b271db31b8284336a80af2546ac10d40", + "Id": "79864a6d008b47759baecd7aab32615d", + "IsHidden": "False" + }, + { + "Start": "d0daca811fb14b1fbb93eefb6de3d69c", + "End": "bf9bce34535d4f2ebfd431812de1aa0a", + "Id": "7eab522582c24b92927da8e37e1a0877", + "IsHidden": "False" + }, + { + "Start": "fbe7d6c3b20b4cc2898546886ec1f9cf", + "End": "a1791bb7715643f29421a0e870e053b5", + "Id": "7feee349710144d7b387727397d136c3", + "IsHidden": "False" + }, + { + "Start": "2a8bccbc1a5b4cb6a4325c2d6ed82a21", + "End": "8e3d20c052614b71bbbf784b67d8b559", + "Id": "b3a29a6d23a34fbfb1e0408555e647a3", + "IsHidden": "False" + }, + { + "Start": "3e9519ac955e4269b02b54b3f7fdba11", + "End": "cbbff09d65244e2bb8a33ee19d3d4081", + "Id": "9dd599cbeb304466afc97fd96e69563c", + "IsHidden": "False" + }, + { + "Start": "f7c0858277fb47c1b4c1015c51cd2938", + "End": "002139ad743746048b44c301e148e8c7", + "Id": "78530ac0305048de9acbf2eb46e55baf", + "IsHidden": "False" + }, + { + "Start": "1203c2a4d9b94fa5b6f690971229078e", + "End": "849eb40f63cf4a9199bc1977aa49caa9", + "Id": "2b21288f871e4517b67577e65ddf2572", + "IsHidden": "False" + }, + { + "Start": "1f99d58b0781473fabd65d9435daf334", + "End": "21cd99193b0b4dceb444f85874cbd641", + "Id": "15c243e046634894b03d821e43e9150b", + "IsHidden": "False" + }, + { + "Start": "aa3f1d66ddd64c7e88eb88815d1112f4", + "End": "f5de52b33bc14b639c14b01ededbccee", + "Id": "b1944d0492ea46a39097ae9245e247c4", + "IsHidden": "False" + } + ], + "Dependencies": [], + "NodeLibraryDependencies": [], + "Thumbnail": "", + "GraphDocumentationURL": null, + "ExtensionWorkspaceData": [ + { + "ExtensionGuid": "28992e1d-abb9-417f-8b1b-05e053bee670", + "Name": "Properties", + "Version": "3.0", + "Data": {} + } + ], + "Author": "", + "Linting": { + "activeLinter": "None", + "activeLinterId": "7b75fb44-43fd-4631-a878-29f4d5d8399a", + "warningCount": 0, + "errorCount": 0 + }, + "Bindings": [], + "View": { + "Dynamo": { + "ScaleFactor": 1.0, + "HasRunWithoutCrash": true, + "IsVisibleInDynamoLibrary": true, + "Version": "3.0.0.5795", + "RunType": "Automatic", + "RunPeriod": "1000" + }, + "Camera": { + "Name": "_Background Preview", + "EyeX": -36.675113677978516, + "EyeY": 33.35145568847656, + "EyeZ": 38.62709045410156, + "LookX": 31.675113677978516, + "LookY": -22.351455688476562, + "LookZ": -46.62709045410156, + "UpX": 0.09032609313726425, + "UpY": 0.9869962930679321, + "UpZ": -0.13296429812908173 + }, + "ConnectorPins": [], + "NodeViews": [ + { + "Id": "6b8c83a8df76454481d01936cd5ddbcd", + "Name": "Curve.Reverse", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 494.55308010512, + "Y": 1524.6184308072145 + }, + { + "Id": "ed28fb93e5484598bd1bbb4f66d2c27c", + "Name": "Data.StringifyJSON", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 949.2938465720335, + "Y": 1744.194896129113 + }, + { + "Id": "a14e625f30d54fce81a1933543e778b5", + "Name": "Data.ParseJSON", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1274.2728553362995, + "Y": 1744.6746376266112 + }, + { + "Id": "f0e1505d50c04577aad94f2e49faa9f6", + "Name": "Geometry.IsAlmostEqualTo", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1656.878799687922, + "Y": 1393.5397538721734 + }, + { + "Id": "c5431f2230a54b53bef8db7fa7722bbf", + "Name": "Geometry.Mirror", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 534.8372232197748, + "Y": 2522.1061187662144 + }, + { + "Id": "223c8a4c031c4ae093f3fb7e1901b27f", + "Name": "Data.ParseJSON", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1268.1661539522124, + "Y": 2832.2382221989556 + }, + { + "Id": "e86a4398b0a844008ad5d6f80c913106", + "Name": "Geometry.IsAlmostEqualTo", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1684.0311424440947, + "Y": 2698.8116048480892 + }, + { + "Id": "8d2ba25b0c464d9a8d51c90db5f2755a", + "Name": "Data.StringifyJSON", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 976.4422869494829, + "Y": 2832.099206835129 + }, + { + "Id": "a0fcfe276bb148c38363a2a9329ff8c6", + "Name": "Point.ByCoordinates", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 38.54184782944026, + "Y": 1457.9262681390371 + }, + { + "Id": "f588cf20edac424492e5f61cd8b4e248", + "Name": "Number", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -244.5612669594334, + "Y": 1570.8164634922787 + }, + { + "Id": "ae01d16856e04ee98e942873c3311f1b", + "Name": "Vector.ByCoordinates", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 32.86736696225239, + "Y": 1773.0962793226863 + }, + { + "Id": "bddda9cf3fba49abbc8adbf8970cada6", + "Name": "Plane.XZ", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 294.28927530161764, + "Y": 2606.855850483501 + }, + { + "Id": "53fb98609ab24c28a8d453c51e584542", + "Name": "CoordinateSystem.ByOrigin", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -728.1471631376862, + "Y": 3878.071382297084 + }, + { + "Id": "16e543ccbaf748269b1c0c8b64e38a14", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -982.1471631376862, + "Y": 3913.2088822970836 + }, + { + "Id": "8533e802506546c88cf46efb60cb30ef", + "Name": "CoordinateSystem.Rotate", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -349.6471631376862, + "Y": 4145.071382297084 + }, + { + "Id": "37395a69d48c4a7b99610a0c96cfbc22", + "Name": "Point.ByCoordinates", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -728.1471631376862, + "Y": 4090.071382297084 + }, + { + "Id": "01740c040af643349a8d72e79a7c7dd4", + "Name": "Vector.ByCoordinates", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -728.1471631376862, + "Y": 4302.071382297084 + }, + { + "Id": "a0d2de17c88643ceaa26c85513637113", + "Name": "Number", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -728.1471631376862, + "Y": 4514.071382297084 + }, + { + "Id": "b6f93229de91434794d004917d47136b", + "Name": "CoordinateSystem.Scale", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 177.63998379852, + "Y": 4050.071382297084 + }, + { + "Id": "121c70cf049e40b59687d2a0f5a9c373", + "Name": "Number", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -302.27885813520425, + "Y": 3989.071382297084 + }, + { + "Id": "2a792b15395a4536bdd6b37f4746dd54", + "Name": "Geometry.Transform", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 601.2193716861198, + "Y": 3822.494830296757 + }, + { + "Id": "871816cfb04e4293a4d3894dc32beef5", + "Name": "CoordinateSystem.ByOrigin", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 233.74429847344982, + "Y": 3857.913132801048 + }, + { + "Id": "64e0f81d9fc2401497569e344f4ba003", + "Name": "Data.ParseJSON", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1300.987366581579, + "Y": 4080.1321034679213 + }, + { + "Id": "d12022d962f6465c9ab53b259cceaed5", + "Name": "Geometry.IsAlmostEqualTo", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1575.9577709422929, + "Y": 3939.1188546638386 + }, + { + "Id": "5d982ac07be34126ac01f2c13e785100", + "Name": "Data.StringifyJSON", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1009.2634995788494, + "Y": 4079.9930881040946 + }, + { + "Id": "42bd06520fbc49479cf3d6560798c5a3", + "Name": "Plane.ByOriginNormal", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 460.9968095892268, + "Y": 1741.5692289327562 + }, + { + "Id": "bb6672a948a2409ca3a2df7ccbe54a39", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -231.53216077166041, + "Y": 1772.7852036224508 + }, + { + "Id": "9754cbd66d4842419a6899f372a80aee", + "Name": "List.AllTrue", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2840.1215581886613, + "Y": 2315.407422847912 + }, + { + "Id": "fe8255d9034840d0b6dc415adeca9b18", + "Name": "List Create", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2518.684522359718, + "Y": 2316.171043248907 + }, + { + "Id": "a02b96e49e38456eb2f59771b08e2874", + "Name": "Object.Type", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1515.9860457592206, + "Y": 2016.3056145232968 + }, + { + "Id": "4c96f65c18034a5883dad0e0b1f0feb1", + "Name": "==", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1824.0376840407346, + "Y": 1934.4132495994943 + }, + { + "Id": "8c1a173d572444af9c04e90329a7a1cb", + "Name": "Object.Type", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1519.5653674370544, + "Y": 1871.0548625152448 + } + ], + "Annotations": [ + { + "Id": "88d10ad0662d49c493acefbd420572f9", + "Title": "All True", + "DescriptionText": "", + "IsExpanded": true, + "WidthAdjustment": 0.0, + "HeightAdjustment": 0.0, + "Nodes": [ + "9754cbd66d4842419a6899f372a80aee" + ], + "HasNestedGroups": false, + "Left": 2830.1215581886613, + "Top": 2242.407422847912, + "Width": 196.0, + "Height": 205.0, + "FontSize": 36.0, + "GroupStyleId": "00000000-0000-0000-0000-000000000000", + "InitialTop": 2315.407422847912, + "InitialHeight": 145.0, + "TextblockHeight": 63.0, + "Background": "#FFC1D676" + } + ], + "X": -843.7560032780282, + "Y": -979.9659877606009, + "Zoom": 0.520313839378457 + } +} \ No newline at end of file diff --git a/test/core/json/Abstract_Vector_JSONParsing.dyn b/test/core/json/Abstract_Vector_JSONParsing.dyn new file mode 100644 index 00000000000..88cd5065a30 --- /dev/null +++ b/test/core/json/Abstract_Vector_JSONParsing.dyn @@ -0,0 +1,624 @@ +{ + "Uuid": "6bdfb0fe-b31e-4c71-8f79-7fc29c53e3ac", + "IsCustomNode": false, + "Description": "", + "Name": "Abstract-Vector_JSONParsing", + "ElementResolver": { + "ResolutionMap": {} + }, + "Inputs": [], + "Outputs": [], + "Nodes": [ + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "186620d42cf04f3b8c8706a3723d35a5", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "bad565a11dc74d0b93316a47fffec75f", + "Name": "json", + "Description": "A JSON string\n\nstring", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "e01aa4a665764bf9981a48e4b12d042a", + "Name": "result", + "Description": "The result type depends on the content of the input string. The result type can be a primitive value (e.g. string, boolean, double), a List, or a Dictionary.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Data.ParseJSON@string", + "Replication": "Auto", + "Description": "Parse converts an arbitrary JSON string to a value. It is the opposite of JSON.Stringify.\n\nData.ParseJSON (json: string): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "f8f38e2638fb4f5690220969e9889012", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "b584618068164d398fe7dbffe593b0ef", + "Name": "values", + "Description": "A List of values\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "98f08663bdfc44e29970670879c98f81", + "Name": "json", + "Description": "A JSON string where primitive types (e.g. double, int, boolean), Lists, and Dictionary's will be turned into the associated JSON type.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Data.StringifyJSON@var[]..[]", + "Replication": "Auto", + "Description": "Stringify converts an arbitrary value or a list of arbitrary values to JSON. Replication can be used to apply the operation over a list, producing a list of JSON strings.\n\nData.StringifyJSON (values: var[]..[]): string" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "ae01d16856e04ee98e942873c3311f1b", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "a1791bb7715643f29421a0e870e053b5", + "Name": "x", + "Description": "X coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "8e3d20c052614b71bbbf784b67d8b559", + "Name": "y", + "Description": "Y coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "cbbff09d65244e2bb8a33ee19d3d4081", + "Name": "z", + "Description": "Z coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "ba21f1d5053f459ebc8f4c08f04574e0", + "Name": "Vector", + "Description": "Vector created by coordinates", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Vector.ByCoordinates@double,double,double", + "Replication": "Auto", + "Description": "Form a Vector by 3 Euclidean coordinates\n\nVector.ByCoordinates (x: double = 0, y: double = 0, z: double = 0): Vector" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "71efc8c5c0c74189901707c30e6d5903", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "64cad8271a2c4236a432b3f8cb9a965e", + "Name": "list", + "Description": "List to be checked on whether all items are true.\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "a90bff347c4e47db904a83067894db1f", + "Name": "bool", + "Description": "True if all items from list are true, false if one or more items is not true", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.List.AllTrue@var[]..[]", + "Replication": "Auto", + "Description": "Determines if all items in the given list is a boolean and has a true value.\n\nList.AllTrue (list: var[]..[]): bool" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "6478eb71263841ae88cc4db9254c8a03", + "NodeType": "CodeBlockNode", + "Inputs": [], + "Outputs": [ + { + "Id": "cc61945c36cc4069b7fee6b71ebde162", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "7a905987d9854e618f53cb5fe7af4a3e", + "Name": "", + "Description": "Value of expression at line 2", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "fcd1fdc26c564952bcc3c3689d23ccc8", + "Name": "", + "Description": "Value of expression at line 3", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "3.1;\n4.3;\n5.99;" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "1ccfd8de3bba4235b4bfb23d2d055a18", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "1991a98b9d2d4fde89383b21a5d9e238", + "Name": "vector", + "Description": "Autodesk.DesignScript.Geometry.Vector", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "be3a7d56eaa74d3c8e00941d57842302", + "Name": "otherVector", + "Description": "Other vector\n\nVector", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "6997f6f667d2416883c00b2966ad742a", + "Name": "bool", + "Description": "Returns True if the vectors are almost equal; false otherwise.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Vector.IsAlmostEqualTo@Autodesk.DesignScript.Geometry.Vector", + "Replication": "Auto", + "Description": "Determine whether two vectors are almost equal. A tolerance value of 1e-5 given to handle precision issues.\n\nVector.IsAlmostEqualTo (otherVector: Vector): bool" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "7ca1057a56f54c40ae4fe22ef83ae483", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "d20ec54970014ff0b122b4632e1a7e08", + "Name": "object", + "Description": "Object to query type\n\nvar", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "c366dc1d5978413194575a2fcbf7c0fe", + "Name": "string", + "Description": "Type of object.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Object.Type@var", + "Replication": "Auto", + "Description": "Returns the type of object represented as string.\n\nObject.Type (object: var): string" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "d468b4a0100442b3bd719da1139fbf00", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "549679116f8e48bc900c13835feefc32", + "Name": "x", + "Description": "Basic type object to compare (e.g. bool, int, double, string, etc.)\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "3fba915855224645818e1768b315c0aa", + "Name": "y", + "Description": "Basic type object to compare (e.g. bool, int, double, string, etc.)\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "508bb8ef5b8748429b1c087cb03d581d", + "Name": "bool", + "Description": "Result of equality check", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "==@var[]..[],var[]..[]", + "Replication": "Auto", + "Description": "Compares if x and y are equal\n\n== (x: var[]..[], y: var[]..[]): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "da547e9f0ed14fd9b60571abd6ade175", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "0cad63a5936c4bd099adb0131e88346b", + "Name": "object", + "Description": "Object to query type\n\nvar", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "f0c74e56d1944fa5b663690b58707ef1", + "Name": "string", + "Description": "Type of object.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Object.Type@var", + "Replication": "Auto", + "Description": "Returns the type of object represented as string.\n\nObject.Type (object: var): string" + }, + { + "ConcreteType": "CoreNodeModels.CreateList, CoreNodeModels", + "VariableInputPorts": true, + "Id": "2801e336ba15481ca96984a1aaa25cc0", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "f0d3d76a1bee4aad9d1905c05f568403", + "Name": "item0", + "Description": "Item Index #0", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "74505578d573467392ca8932a78de939", + "Name": "item1", + "Description": "Item Index #1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "1664551304324ab69f61d2c95911597e", + "Name": "list", + "Description": "A list (type: var[]..[])", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Makes a new list from the given inputs" + } + ], + "Connectors": [ + { + "Start": "e01aa4a665764bf9981a48e4b12d042a", + "End": "be3a7d56eaa74d3c8e00941d57842302", + "Id": "d934cade953143058cfee282faf36122", + "IsHidden": "False" + }, + { + "Start": "e01aa4a665764bf9981a48e4b12d042a", + "End": "d20ec54970014ff0b122b4632e1a7e08", + "Id": "096713ad6f274651a2f63dfb76487965", + "IsHidden": "False" + }, + { + "Start": "98f08663bdfc44e29970670879c98f81", + "End": "bad565a11dc74d0b93316a47fffec75f", + "Id": "7772aed300174d1b814266749d9cc731", + "IsHidden": "False" + }, + { + "Start": "ba21f1d5053f459ebc8f4c08f04574e0", + "End": "b584618068164d398fe7dbffe593b0ef", + "Id": "3c4abb3bb6bb4abbbc1285fe4b479b74", + "IsHidden": "False" + }, + { + "Start": "ba21f1d5053f459ebc8f4c08f04574e0", + "End": "1991a98b9d2d4fde89383b21a5d9e238", + "Id": "4483a847c6b14fcabd602b2c2537bb95", + "IsHidden": "False" + }, + { + "Start": "ba21f1d5053f459ebc8f4c08f04574e0", + "End": "0cad63a5936c4bd099adb0131e88346b", + "Id": "964cd226edb341b1993fc205bbd8f312", + "IsHidden": "False" + }, + { + "Start": "cc61945c36cc4069b7fee6b71ebde162", + "End": "a1791bb7715643f29421a0e870e053b5", + "Id": "4332d57cced2404d9cc9cdf52c05919f", + "IsHidden": "False" + }, + { + "Start": "7a905987d9854e618f53cb5fe7af4a3e", + "End": "8e3d20c052614b71bbbf784b67d8b559", + "Id": "bd16d6c950a948199b1a8942b62611af", + "IsHidden": "False" + }, + { + "Start": "fcd1fdc26c564952bcc3c3689d23ccc8", + "End": "cbbff09d65244e2bb8a33ee19d3d4081", + "Id": "92653edda29d41f691ae7f8d4cb73dd6", + "IsHidden": "False" + }, + { + "Start": "6997f6f667d2416883c00b2966ad742a", + "End": "f0d3d76a1bee4aad9d1905c05f568403", + "Id": "55275d33b9a0431196f5dd461bbede9e", + "IsHidden": "False" + }, + { + "Start": "c366dc1d5978413194575a2fcbf7c0fe", + "End": "3fba915855224645818e1768b315c0aa", + "Id": "2453fc5b2e3848c0a79fcb846b055933", + "IsHidden": "False" + }, + { + "Start": "508bb8ef5b8748429b1c087cb03d581d", + "End": "74505578d573467392ca8932a78de939", + "Id": "55351ef683144cce9029f49f4947de2c", + "IsHidden": "False" + }, + { + "Start": "f0c74e56d1944fa5b663690b58707ef1", + "End": "549679116f8e48bc900c13835feefc32", + "Id": "f1c9592b299f463abc75866862f7e294", + "IsHidden": "False" + }, + { + "Start": "1664551304324ab69f61d2c95911597e", + "End": "64cad8271a2c4236a432b3f8cb9a965e", + "Id": "d8ff31d28d344085a8e1f4c674adb5b8", + "IsHidden": "False" + } + ], + "Dependencies": [], + "NodeLibraryDependencies": [], + "Thumbnail": "", + "GraphDocumentationURL": null, + "ExtensionWorkspaceData": [ + { + "ExtensionGuid": "28992e1d-abb9-417f-8b1b-05e053bee670", + "Name": "Properties", + "Version": "3.0", + "Data": {} + } + ], + "Author": "", + "Linting": { + "activeLinter": "None", + "activeLinterId": "7b75fb44-43fd-4631-a878-29f4d5d8399a", + "warningCount": 0, + "errorCount": 0 + }, + "Bindings": [], + "View": { + "Dynamo": { + "ScaleFactor": 1.0, + "HasRunWithoutCrash": true, + "IsVisibleInDynamoLibrary": true, + "Version": "3.0.0.5795", + "RunType": "Automatic", + "RunPeriod": "1000" + }, + "Camera": { + "Name": "_Background Preview", + "EyeX": -17.0, + "EyeY": 24.0, + "EyeZ": 50.0, + "LookX": 12.0, + "LookY": -13.0, + "LookZ": -58.0, + "UpX": 0.0, + "UpY": 1.0, + "UpZ": 0.0 + }, + "ConnectorPins": [], + "NodeViews": [ + { + "Id": "186620d42cf04f3b8c8706a3723d35a5", + "Name": "Data.ParseJSON", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1417.761683843641, + "Y": 447.16409305995114 + }, + { + "Id": "f8f38e2638fb4f5690220969e9889012", + "Name": "Data.StringifyJSON", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1107.775570011588, + "Y": 446.0985095043583 + }, + { + "Id": "ae01d16856e04ee98e942873c3311f1b", + "Name": "Vector.ByCoordinates", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 729.590307113751, + "Y": 360.2287787478406 + }, + { + "Id": "71efc8c5c0c74189901707c30e6d5903", + "Name": "List.AllTrue", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2361.351736097782, + "Y": 266.4123567387401 + }, + { + "Id": "6478eb71263841ae88cc4db9254c8a03", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 446.9831147891284, + "Y": 381.3389574900232 + }, + { + "Id": "1ccfd8de3bba4235b4bfb23d2d055a18", + "Name": "Vector.IsAlmostEqualTo", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1727.7506630659939, + "Y": 264.66527842223184 + }, + { + "Id": "7ca1057a56f54c40ae4fe22ef83ae483", + "Name": "Object.Type", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1386.1932803122113, + "Y": 768.0176941870716 + }, + { + "Id": "d468b4a0100442b3bd719da1139fbf00", + "Name": "==", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1694.2449185937253, + "Y": 686.1253292632689 + }, + { + "Id": "da547e9f0ed14fd9b60571abd6ade175", + "Name": "Object.Type", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1389.7726019900451, + "Y": 622.7669421790195 + }, + { + "Id": "2801e336ba15481ca96984a1aaa25cc0", + "Name": "List Create", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2110.5416378950254, + "Y": 265.5936486996456 + } + ], + "Annotations": [ + { + "Id": "299ea6c97b7040eeba5940b4ec204708", + "Title": "All True For Vector", + "DescriptionText": "", + "IsExpanded": true, + "WidthAdjustment": 0.0, + "HeightAdjustment": 0.0, + "Nodes": [ + "71efc8c5c0c74189901707c30e6d5903" + ], + "HasNestedGroups": false, + "Left": 2351.351736097782, + "Top": 149.91235673874007, + "Width": 196.0, + "Height": 248.5, + "FontSize": 36.0, + "GroupStyleId": "00000000-0000-0000-0000-000000000000", + "InitialTop": 266.4123567387401, + "InitialHeight": 145.0, + "TextblockHeight": 106.5, + "Background": "#FFC1D676" + } + ], + "X": -248.83406579272423, + "Y": 75.15616611820809, + "Zoom": 0.6238134206126975 + } +} \ No newline at end of file diff --git a/test/core/json/Curve_Arc_JSONParsing.dyn b/test/core/json/Curve_Arc_JSONParsing.dyn new file mode 100644 index 00000000000..a2a72120d19 --- /dev/null +++ b/test/core/json/Curve_Arc_JSONParsing.dyn @@ -0,0 +1,5035 @@ +{ + "Uuid": "6bdfb0fe-b31e-4c71-8f79-7fc29c53e3ac", + "IsCustomNode": false, + "Description": "", + "Name": "Curve_Arc_JSONParsing", + "ElementResolver": { + "ResolutionMap": {} + }, + "Inputs": [], + "Outputs": [], + "Nodes": [ + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "f1942fd42c654edb83e404b55e079342", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "fefdf50efeea4bf7a820e74c3c99a790", + "Name": "centerPoint", + "Description": "Center point of arc\n\nPoint\nDefault value : Autodesk.DesignScript.Geometry.Point.ByCoordinates(0, 0, 0)", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "ad01f8cc404d49788d20c427a1a484c2", + "Name": "startPoint", + "Description": "Start point of arc\n\nPoint\nDefault value : Autodesk.DesignScript.Geometry.Point.ByCoordinates(1, 0, 0)", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "87bc8dbca07547e59ab02e5fe9ea7451", + "Name": "sweepAngle", + "Description": "Angle to sweep out\n\ndouble\nDefault value : 90", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "e1e97d95d3e44f53886c7f2d0b1fc7cc", + "Name": "normal", + "Description": "Normal direction vector of arc\n\nVector\nDefault value : Autodesk.DesignScript.Geometry.Vector.ByCoordinates(0, 0, 1)", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "1abf21bb53c94d7eb03594ce76db320d", + "Name": "Arc", + "Description": "Arc created by center point, start point, and sweep angle", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Arc.ByCenterPointStartPointSweepAngle@Autodesk.DesignScript.Geometry.Point,Autodesk.DesignScript.Geometry.Point,double,Autodesk.DesignScript.Geometry.Vector", + "Replication": "Auto", + "Description": "Create an arc by providing it's center point, start point, sweep point, and normal\n\nArc.ByCenterPointStartPointSweepAngle (centerPoint: Point = Autodesk.DesignScript.Geometry.Point.ByCoordinates(0, 0, 0), startPoint: Point = Autodesk.DesignScript.Geometry.Point.ByCoordinates(1, 0, 0), sweepAngle: double = 90, normal: Vector = Autodesk.DesignScript.Geometry.Vector.ByCoordinates(0, 0, 1)): Arc" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "0044ddb33da444429aaae0defd9c4253", + "NodeType": "CodeBlockNode", + "Inputs": [], + "Outputs": [ + { + "Id": "d03044916e76425a892b41ea27d8b22c", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "80;" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "6b8c83a8df76454481d01936cd5ddbcd", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "c34baa1841914cac9db607b71b41d8f7", + "Name": "curve", + "Description": "Autodesk.DesignScript.Geometry.Curve", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "eb383155efc048e8900868dc85213536", + "Name": "Curve", + "Description": "A new Curve with the opposite direction", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Curve.Reverse", + "Replication": "Auto", + "Description": "Reverse the direction of the curve\n\nCurve.Reverse ( ): Curve" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "186620d42cf04f3b8c8706a3723d35a5", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "bad565a11dc74d0b93316a47fffec75f", + "Name": "json", + "Description": "A JSON string\n\nstring", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "e01aa4a665764bf9981a48e4b12d042a", + "Name": "result", + "Description": "The result type depends on the content of the input string. The result type can be a primitive value (e.g. string, boolean, double), a List, or a Dictionary.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Data.ParseJSON@string", + "Replication": "Auto", + "Description": "Parse converts an arbitrary JSON string to a value. It is the opposite of JSON.Stringify.\n\nData.ParseJSON (json: string): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "f8f38e2638fb4f5690220969e9889012", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "b584618068164d398fe7dbffe593b0ef", + "Name": "values", + "Description": "A List of values\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "98f08663bdfc44e29970670879c98f81", + "Name": "json", + "Description": "A JSON string where primitive types (e.g. double, int, boolean), Lists, and Dictionary's will be turned into the associated JSON type.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Data.StringifyJSON@var[]..[]", + "Replication": "Auto", + "Description": "Stringify converts an arbitrary value or a list of arbitrary values to JSON. Replication can be used to apply the operation over a list, producing a list of JSON strings.\n\nData.StringifyJSON (values: var[]..[]): string" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "77cad78ea1c84a3da85d408c8eaeeaa9", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "65f74df534f34f10a387cba40fa8eff4", + "Name": "geometry", + "Description": "Autodesk.DesignScript.Geometry.Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "41281040a7d14a2cae610bbf7c62e324", + "Name": "other", + "Description": "Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "1e0c08abcd7c456da2dcc7ca6f5f11b3", + "Name": "bool", + "Description": "bool", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Geometry.IsAlmostEqualTo@Autodesk.DesignScript.Geometry.Geometry", + "Replication": "Auto", + "Description": "Check if the two objects have the same representational geometry or numerical values\n\nGeometry.IsAlmostEqualTo (other: Geometry): bool" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "37ee72a03b78496498939b22f124c4d8", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "cc557b4803a34c67a7cfd9bf289d4879", + "Name": "curve", + "Description": "Autodesk.DesignScript.Geometry.Curve", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "ef07e4411613422aae8135cb6f31190b", + "Name": "Point", + "Description": "Point", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Curve.StartPoint", + "Replication": "Auto", + "Description": "Get the start Point along the Curve\n\nCurve.StartPoint: Point" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "4fa40d24e7b74edc9634f64ab9a5300f", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "72ce9eec6a9f4c0fad1cabc075d0ac36", + "Name": "arc", + "Description": "Autodesk.DesignScript.Geometry.Arc", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "aeecea9e5eda407ba2476d9a6d968393", + "Name": "double", + "Description": "double", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Arc.StartAngle", + "Replication": "Auto", + "Description": "Returns the start angle of the arc in degrees as the rotation from the X axis in the coordinate system around the Z-axis.\n\nArc.StartAngle: double" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "c35e9fa163bb492aafd32b13c85cff91", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "a6c91b205ee04372b35cd5f2eda6e2bb", + "Name": "arc", + "Description": "Autodesk.DesignScript.Geometry.Arc", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "d13af90076c74ac78230f328948fc040", + "Name": "double", + "Description": "double", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Arc.SweepAngle", + "Replication": "Auto", + "Description": "Returns the sweep angle of the arc in degrees.\n\nArc.SweepAngle: double" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "cf84ed18adc645e5adfd20be59defa5d", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "b9888b0988c34ad0ae86026e82e25e6a", + "Name": "arc", + "Description": "Autodesk.DesignScript.Geometry.Arc", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "dcc45995949d4200b3cbae0b222af199", + "Name": "double", + "Description": "double", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Arc.Radius", + "Replication": "Auto", + "Description": "Returns the radius of the arc.\n\nArc.Radius: double" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "a01a881e59c64af9b13e6487c934ca59", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "80d5716647164c5b9b85fcbca9678553", + "Name": "curve", + "Description": "Autodesk.DesignScript.Geometry.Curve", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "034f7929c24c44b9890fe5684f17de26", + "Name": "Point", + "Description": "Point", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Curve.EndPoint", + "Replication": "Auto", + "Description": "Get the end Point along the Curve\n\nCurve.EndPoint: Point" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "9af943f031474236b91c2589f5710508", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "e07c6e3a9c18406fbeeda0ae0fba712c", + "Name": "curve", + "Description": "Autodesk.DesignScript.Geometry.Curve", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "1e98b5003d3a477abb590640b7e3cd14", + "Name": "Vector", + "Description": "Vector", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Curve.Normal", + "Replication": "Auto", + "Description": "The normal to the plane the curve lies in. Only valid for planar curves.\n\nCurve.Normal: Vector" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSVarArgFunction, DynamoCore", + "FunctionSignature": "DSCore.List.Join@var[]..[]", + "FunctionType": "VariableArgument", + "Id": "2c6332704233410ebaad1d7f5a234e2c", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "b3bc8520dd344fb6acd06bb26d64bb2b", + "Name": "list0", + "Description": "Lists to join into one.\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "cfe6ef520f8042c79ed52c4dcb305a56", + "Name": "list1", + "Description": "var[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "7302fe8aab474c76a6200b750c83bc2b", + "Name": "list", + "Description": "Joined list.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Concatenates all given lists into a single list.\n\nList.Join (lists: var[]..[]): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSVarArgFunction, DynamoCore", + "FunctionSignature": "DSCore.List.Join@var[]..[]", + "FunctionType": "VariableArgument", + "Id": "8cee6fe36679421693795c2993fe8609", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "d88588bf71d449639840d78dfece97f0", + "Name": "list0", + "Description": "Lists to join into one.\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "c0f55bca5006494f9e4c35c17f2a4343", + "Name": "list1", + "Description": "var[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "d0d2cfcf98b2495ebb77b1f911bf5414", + "Name": "list", + "Description": "Joined list.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Concatenates all given lists into a single list.\n\nList.Join (lists: var[]..[]): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSVarArgFunction, DynamoCore", + "FunctionSignature": "DSCore.List.Join@var[]..[]", + "FunctionType": "VariableArgument", + "Id": "4f0038f4b48749af8854c4a8bd8e9764", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "ce96ffb90b3047298d5fc80c54193592", + "Name": "list0", + "Description": "Lists to join into one.\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "01e8d5f9615a4258aef2ed6bb35e0082", + "Name": "list1", + "Description": "var[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "47df84c64d914b76977d0635cc5a990f", + "Name": "list", + "Description": "Joined list.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Concatenates all given lists into a single list.\n\nList.Join (lists: var[]..[]): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "55be4d0d781c4da48e87107bcedf41ac", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "ec8ce515a47e44caba627259d27dd9d7", + "Name": "curve", + "Description": "Autodesk.DesignScript.Geometry.Curve", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "797f387bf29a49f09b6891a65fd8e30a", + "Name": "Vector", + "Description": "Vector", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Curve.Normal", + "Replication": "Auto", + "Description": "The normal to the plane the curve lies in. Only valid for planar curves.\n\nCurve.Normal: Vector" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "bd7bed6bcb144f4c8372cc5e77c8554b", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "b63b8139a1084a6790b867871e5149d1", + "Name": "curve", + "Description": "Autodesk.DesignScript.Geometry.Curve", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "2426521b3c86452eb805ce72688fd11a", + "Name": "Point", + "Description": "Point", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Curve.EndPoint", + "Replication": "Auto", + "Description": "Get the end Point along the Curve\n\nCurve.EndPoint: Point" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSVarArgFunction, DynamoCore", + "FunctionSignature": "DSCore.List.Join@var[]..[]", + "FunctionType": "VariableArgument", + "Id": "26cd1399b4eb4da88e1533b736ae2488", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "ee68f220ea3940f0b2fe40a38433c6d4", + "Name": "list0", + "Description": "Lists to join into one.\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "569e346610254ad3b85edea5c54a2618", + "Name": "list1", + "Description": "var[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "c8cd294588d84d47872700bdd9258f29", + "Name": "list", + "Description": "Joined list.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Concatenates all given lists into a single list.\n\nList.Join (lists: var[]..[]): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "303bfe1b40b34305b2d69b8973c464a4", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "4dc69e93b9284861ba79bd54a1882686", + "Name": "arc", + "Description": "Autodesk.DesignScript.Geometry.Arc", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "8ab08cf8f3894ea2862c212af032d3e7", + "Name": "double", + "Description": "double", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Arc.StartAngle", + "Replication": "Auto", + "Description": "Returns the start angle of the arc in degrees as the rotation from the X axis in the coordinate system around the Z-axis.\n\nArc.StartAngle: double" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "bc0cf9b3b0ad4e74ba271b5f330a6067", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "1191c5e0df494528967d55d71229d2d6", + "Name": "arc", + "Description": "Autodesk.DesignScript.Geometry.Arc", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "3a9a65484ae04392a694d505758cb398", + "Name": "double", + "Description": "double", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Arc.SweepAngle", + "Replication": "Auto", + "Description": "Returns the sweep angle of the arc in degrees.\n\nArc.SweepAngle: double" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "9b6b2d2ac61f4a66a03b61611a447512", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "5058df15266443e69ca208b6d323a0f1", + "Name": "arc", + "Description": "Autodesk.DesignScript.Geometry.Arc", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "55fd44c68ca84590924c36c1be746527", + "Name": "double", + "Description": "double", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Arc.Radius", + "Replication": "Auto", + "Description": "Returns the radius of the arc.\n\nArc.Radius: double" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "c7d38c0b0ca34c4d95b22574442b68d7", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "36079b3370024a0d9b67da9c5ea815e7", + "Name": "curve", + "Description": "Autodesk.DesignScript.Geometry.Curve", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "e0758224b148497b9e115ad0dc31c15b", + "Name": "Point", + "Description": "Point", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Curve.StartPoint", + "Replication": "Auto", + "Description": "Get the start Point along the Curve\n\nCurve.StartPoint: Point" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "e8e8c398442c40ac925a5e946b51e2f7", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "f297e3034e954e34b332bd664facb4f6", + "Name": "geometry", + "Description": "Autodesk.DesignScript.Geometry.Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "286c8fb5e3e4499386f43b317180a686", + "Name": "other", + "Description": "Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "b73796de34a247569b8a33a1db19d742", + "Name": "bool", + "Description": "bool", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Geometry.IsAlmostEqualTo@Autodesk.DesignScript.Geometry.Geometry", + "Replication": "Auto", + "Description": "Check if the two objects have the same representational geometry or numerical values\n\nGeometry.IsAlmostEqualTo (other: Geometry): bool" + }, + { + "ConcreteType": "CoreNodeModels.Equals, CoreNodeModels", + "Id": "dd4baa80397e4acda0858f2af5016f3f", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "3335261951a44cb8b5e49486b1a04475", + "Name": "x", + "Description": "Integer or double value", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "481a5847abdc477492f743ec0855dfa3", + "Name": "y", + "Description": "Integer or double value", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "4171d6ed45364e689ddab796b7077889", + "Name": "tolerance", + "Description": "Tolerance permitted for equality check\r\nDefault value: 1E-05", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "917c6f0cbfe549f0bf0ae5cf8908a320", + "Name": "bool", + "Description": "Result of equality check", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Auto", + "Description": "Returns True if x and y are equal given a certain tolerance" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "a908d05fb4224d848d07f40cf2038363", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "7553bce623bd4d7ba75f8ed21ca6dfc7", + "Name": "vector", + "Description": "Autodesk.DesignScript.Geometry.Vector", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "f3ab50dea85c42f681d25937c744ae7c", + "Name": "otherVector", + "Description": "Other vector\n\nVector", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "a12d20de7a1b499483bca127654e9fcf", + "Name": "bool", + "Description": "Returns True if the vectors are almost equal; false otherwise.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Vector.IsAlmostEqualTo@Autodesk.DesignScript.Geometry.Vector", + "Replication": "Auto", + "Description": "Determine whether two vectors are almost equal. A tolerance value of 1e-5 given to handle precision issues.\n\nVector.IsAlmostEqualTo (otherVector: Vector): bool" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSVarArgFunction, DynamoCore", + "FunctionSignature": "DSCore.List.Join@var[]..[]", + "FunctionType": "VariableArgument", + "Id": "862114159ec740f8a4296e0238f31a37", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "0ad93fda8b6f43e3a72625616f686c8e", + "Name": "list0", + "Description": "Lists to join into one.\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "73a34ad7cc064df5be190bf41d284817", + "Name": "list1", + "Description": "var[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "dda6c3def41243d99177b77719cde7cf", + "Name": "list2", + "Description": "var[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "6ebd0d784043401e8f53be9124dfecf7", + "Name": "list", + "Description": "Joined list.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Concatenates all given lists into a single list.\n\nList.Join (lists: var[]..[]): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "6b394d6b32e4496b8fd4c098339692d9", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "0bcc492003a644058c5b5232e7e56269", + "Name": "list", + "Description": "List to be checked on whether all items are true.\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "db2b2322e258435db7fca6aafe57b245", + "Name": "bool", + "Description": "True if all items from list are true, false if one or more items is not true", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.List.AllTrue@var[]..[]", + "Replication": "Auto", + "Description": "Determines if all items in the given list is a boolean and has a true value.\n\nList.AllTrue (list: var[]..[]): bool" + }, + { + "ConcreteType": "CoreNodeModels.Watch, CoreNodeModels", + "WatchWidth": 420.0, + "WatchHeight": 38.0, + "Id": "90c67936e61e4f8e8381065aafd57424", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "1f16eb4f855d46a1922a63c6180c108e", + "Name": "", + "Description": "Node to show output from", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "e67a0f7839ee4641a64f4b06eaf98b14", + "Name": "", + "Description": "Node output", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Visualizes a node's output" + }, + { + "ConcreteType": "CoreNodeModels.Watch, CoreNodeModels", + "WatchWidth": 420.0, + "WatchHeight": 38.0, + "Id": "2e6805a3e1a34a119a709370699fb031", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "ab018c9a6f474ee2888890fcc14c4ffc", + "Name": "", + "Description": "Node to show output from", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "25ae2dc6f03a4217992400821e43fc84", + "Name": "", + "Description": "Node output", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Visualizes a node's output" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "ed28fb93e5484598bd1bbb4f66d2c27c", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "ddaff23e6e914392808a10f64144bda3", + "Name": "values", + "Description": "A List of values\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "ede79e2b0882454ebd19fc34167bfc41", + "Name": "json", + "Description": "A JSON string where primitive types (e.g. double, int, boolean), Lists, and Dictionary's will be turned into the associated JSON type.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Data.StringifyJSON@var[]..[]", + "Replication": "Auto", + "Description": "Stringify converts an arbitrary value or a list of arbitrary values to JSON. Replication can be used to apply the operation over a list, producing a list of JSON strings.\n\nData.StringifyJSON (values: var[]..[]): string" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "a14e625f30d54fce81a1933543e778b5", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "e0ca394d04ca41f3b8174568180ca34e", + "Name": "json", + "Description": "A JSON string\n\nstring", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "f41ef00532644b0892cd7a2dd0f62c8e", + "Name": "result", + "Description": "The result type depends on the content of the input string. The result type can be a primitive value (e.g. string, boolean, double), a List, or a Dictionary.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Data.ParseJSON@string", + "Replication": "Auto", + "Description": "Parse converts an arbitrary JSON string to a value. It is the opposite of JSON.Stringify.\n\nData.ParseJSON (json: string): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "f0e1505d50c04577aad94f2e49faa9f6", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "62259f31de654afcb3fad3c003383e3e", + "Name": "geometry", + "Description": "Autodesk.DesignScript.Geometry.Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "297c0d29ef9d4d9a8f47ed6b166ba971", + "Name": "other", + "Description": "Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "e929ced36aca4057aa5ca243dd8629de", + "Name": "bool", + "Description": "bool", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Geometry.IsAlmostEqualTo@Autodesk.DesignScript.Geometry.Geometry", + "Replication": "Auto", + "Description": "Check if the two objects have the same representational geometry or numerical values\n\nGeometry.IsAlmostEqualTo (other: Geometry): bool" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "c5431f2230a54b53bef8db7fa7722bbf", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "85f4c4f0e5404619a0e20d724080e930", + "Name": "geometry", + "Description": "Autodesk.DesignScript.Geometry.Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "0d0b9036e1f24fec8fef464cfe5b04c6", + "Name": "mirrorPlane", + "Description": "Plane", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "59bb1ff9f55a4cb8af01c4d219f8128c", + "Name": "Geometry", + "Description": "Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Geometry.Mirror@Autodesk.DesignScript.Geometry.Plane", + "Replication": "Auto", + "Description": "Mirror the object across the input Plane\n\nGeometry.Mirror (mirrorPlane: Plane): Geometry" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "223c8a4c031c4ae093f3fb7e1901b27f", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "92ac962ee1f04d37a7fa4990ce60e766", + "Name": "json", + "Description": "A JSON string\n\nstring", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "7044cf65d6144910b802edb85a274e51", + "Name": "result", + "Description": "The result type depends on the content of the input string. The result type can be a primitive value (e.g. string, boolean, double), a List, or a Dictionary.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Data.ParseJSON@string", + "Replication": "Auto", + "Description": "Parse converts an arbitrary JSON string to a value. It is the opposite of JSON.Stringify.\n\nData.ParseJSON (json: string): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "e86a4398b0a844008ad5d6f80c913106", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "341635ee65f64c8897f2de21c3d187f6", + "Name": "geometry", + "Description": "Autodesk.DesignScript.Geometry.Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "d9ef5521e8104d6b86274042ad8f4fdb", + "Name": "other", + "Description": "Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "2d611cfadbb144fe8014da91aaf081f9", + "Name": "bool", + "Description": "bool", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Geometry.IsAlmostEqualTo@Autodesk.DesignScript.Geometry.Geometry", + "Replication": "Auto", + "Description": "Check if the two objects have the same representational geometry or numerical values\n\nGeometry.IsAlmostEqualTo (other: Geometry): bool" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "8d2ba25b0c464d9a8d51c90db5f2755a", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "526ecca2dc234cd8adca5ca8f5337de3", + "Name": "values", + "Description": "A List of values\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "4e27cd524d674b4b9f1218688f7e51de", + "Name": "json", + "Description": "A JSON string where primitive types (e.g. double, int, boolean), Lists, and Dictionary's will be turned into the associated JSON type.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Data.StringifyJSON@var[]..[]", + "Replication": "Auto", + "Description": "Stringify converts an arbitrary value or a list of arbitrary values to JSON. Replication can be used to apply the operation over a list, producing a list of JSON strings.\n\nData.StringifyJSON (values: var[]..[]): string" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "a0fcfe276bb148c38363a2a9329ff8c6", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "3368257c965240dab164ce44891072a8", + "Name": "x", + "Description": "X coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "2c86775eb1074267914acf6a2feec4f9", + "Name": "y", + "Description": "Y coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "a424723d790d48e096322c9fb0a5ae13", + "Name": "z", + "Description": "Z coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "168bcb9eacad45908f79d3c45cce2c27", + "Name": "Point", + "Description": "Point created by coordinates", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Point.ByCoordinates@double,double,double", + "Replication": "Auto", + "Description": "Form a Point given 3 cartesian coordinates\n\nPoint.ByCoordinates (x: double = 0, y: double = 0, z: double = 0): Point" + }, + { + "ConcreteType": "CoreNodeModels.Input.DoubleInput, CoreNodeModels", + "NumberType": "Double", + "Id": "f588cf20edac424492e5f61cd8b4e248", + "NodeType": "NumberInputNode", + "Inputs": [], + "Outputs": [ + { + "Id": "fc60815c52f0417c9ec181d16a179d1c", + "Name": "", + "Description": "Double", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Creates a number", + "InputValue": 2.0 + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "64e09445f75c479b995db569c9962748", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "d893356e807d451493eff5f96bcccad3", + "Name": "x", + "Description": "X coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "d836c6aa5ec14181a73c3611b13f6907", + "Name": "y", + "Description": "Y coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "2235c4e1aea34729839000e84beae881", + "Name": "z", + "Description": "Z coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "c0e625af81d842e0a7260a0d7e26b828", + "Name": "Point", + "Description": "Point created by coordinates", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Point.ByCoordinates@double,double,double", + "Replication": "Auto", + "Description": "Form a Point given 3 cartesian coordinates\n\nPoint.ByCoordinates (x: double = 0, y: double = 0, z: double = 0): Point" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "ae01d16856e04ee98e942873c3311f1b", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "a1791bb7715643f29421a0e870e053b5", + "Name": "x", + "Description": "X coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "8e3d20c052614b71bbbf784b67d8b559", + "Name": "y", + "Description": "Y coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "cbbff09d65244e2bb8a33ee19d3d4081", + "Name": "z", + "Description": "Z coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "ba21f1d5053f459ebc8f4c08f04574e0", + "Name": "Vector", + "Description": "Vector created by coordinates", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Vector.ByCoordinates@double,double,double", + "Replication": "Auto", + "Description": "Form a Vector by 3 Euclidean coordinates\n\nVector.ByCoordinates (x: double = 0, y: double = 0, z: double = 0): Vector" + }, + { + "ConcreteType": "CoreNodeModels.Input.DoubleInput, CoreNodeModels", + "NumberType": "Double", + "Id": "df33083708db43e186898f5569e5c7cc", + "NodeType": "NumberInputNode", + "Inputs": [], + "Outputs": [ + { + "Id": "75ae223dfc0f49b08c069f75b02e41dd", + "Name": "", + "Description": "Double", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Creates a number", + "InputValue": 1.0 + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "bddda9cf3fba49abbc8adbf8970cada6", + "NodeType": "FunctionNode", + "Inputs": [], + "Outputs": [ + { + "Id": "74a4e0ec12304a6fb0e2898f6ec92dd5", + "Name": "Plane", + "Description": "Plane at XZ plane of world", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Plane.XZ", + "Replication": "Auto", + "Description": "Creates a plane in the world XZ plane\n\nPlane.XZ ( ): Plane" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "53fb98609ab24c28a8d453c51e584542", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "7170b996fa4548c2a54ea10fa23270d1", + "Name": "x", + "Description": "double\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "b7a6f47009b7424ebbbb1b74c2b28146", + "Name": "y", + "Description": "double\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "ffcf590ed156499096c70814aabcc2d3", + "Name": "z", + "Description": "double\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "487fd07181924571b73e6e24046a05ce", + "Name": "CoordinateSystem", + "Description": "CoordinateSystem", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.CoordinateSystem.ByOrigin@double,double,double", + "Replication": "Auto", + "Description": "Create a CoordinateSystem with origin at X, Y, and Z locations, with X and Y Axes set as WCS X and Y Axes.\n\nCoordinateSystem.ByOrigin (x: double = 0, y: double = 0, z: double = 0): CoordinateSystem" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "16e543ccbaf748269b1c0c8b64e38a14", + "NodeType": "CodeBlockNode", + "Inputs": [], + "Outputs": [ + { + "Id": "9877b21d1a1848ea9c816a5762376947", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "055c94e81fb4468ca37560683c0d0804", + "Name": "", + "Description": "Value of expression at line 2", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "4cf1f68b80db4bfab717045ca611d4cc", + "Name": "", + "Description": "Value of expression at line 3", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "2;\n3;\n4;" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "8533e802506546c88cf46efb60cb30ef", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "377f4d47b8494304bfeea26b31d9a869", + "Name": "coordinateSystem", + "Description": "Autodesk.DesignScript.Geometry.CoordinateSystem", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "ae7fdab182bc42378beefedf857e6c70", + "Name": "origin", + "Description": "Origin point\n\nPoint", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "2886cbcea5b941ef8d7f6d23835d1b02", + "Name": "axis", + "Description": "Vector axis for rotation\n\nVector", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "0488f30ec00645bbadbc1de3ed188375", + "Name": "degrees", + "Description": "Degrees to rotate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "8bb5cb937da94fdea104b79edec941dd", + "Name": "CoordinateSystem", + "Description": "Rotated coordinate system", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.CoordinateSystem.Rotate@Autodesk.DesignScript.Geometry.Point,Autodesk.DesignScript.Geometry.Vector,double", + "Replication": "Auto", + "Description": "Rotates an object around an origin and an axis by a specified degree\n\nCoordinateSystem.Rotate (origin: Point, axis: Vector, degrees: double = 0): CoordinateSystem" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "37395a69d48c4a7b99610a0c96cfbc22", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "08c9f84a85d441e0bc050bec55b83d1f", + "Name": "x", + "Description": "X coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "dedf5f52faeb44618f7706cbe77793e5", + "Name": "y", + "Description": "Y coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "80c41af97ffc46b5be82b063de8227ca", + "Name": "z", + "Description": "Z coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "3751954e148e4600a3d080325fb00e70", + "Name": "Point", + "Description": "Point created by coordinates", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Point.ByCoordinates@double,double,double", + "Replication": "Auto", + "Description": "Form a Point given 3 cartesian coordinates\n\nPoint.ByCoordinates (x: double = 0, y: double = 0, z: double = 0): Point" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "01740c040af643349a8d72e79a7c7dd4", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "3c6c5102efe14291914e1e4bde9a7f95", + "Name": "x", + "Description": "X coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "f06dae9eb561423ab263aee0b278f141", + "Name": "y", + "Description": "Y coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "a914b32db99548cd8773b1c78cddd80f", + "Name": "z", + "Description": "Z coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "d285714acf534e79ad8f2adaf87cef82", + "Name": "Vector", + "Description": "Vector created by coordinates", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Vector.ByCoordinates@double,double,double", + "Replication": "Auto", + "Description": "Form a Vector by 3 Euclidean coordinates\n\nVector.ByCoordinates (x: double = 0, y: double = 0, z: double = 0): Vector" + }, + { + "ConcreteType": "CoreNodeModels.Input.DoubleInput, CoreNodeModels", + "NumberType": "Double", + "Id": "a0d2de17c88643ceaa26c85513637113", + "NodeType": "NumberInputNode", + "Inputs": [], + "Outputs": [ + { + "Id": "cdd3f7df6009472d97a31806a64ee36e", + "Name": "", + "Description": "Double", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Creates a number", + "InputValue": 24.0 + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "b6f93229de91434794d004917d47136b", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "369049b3e19b4524a0118c3012f541c9", + "Name": "coordinateSystem", + "Description": "Autodesk.DesignScript.Geometry.CoordinateSystem", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "1715dbfc74894bdab1bf54872a02b062", + "Name": "amount", + "Description": "Amount to scale\n\ndouble\nDefault value : 1", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "02b3ce6e7dbc494e9e8b1e43637d201e", + "Name": "CoordinateSystem", + "Description": "Scaled coordinate system", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.CoordinateSystem.Scale@double", + "Replication": "Auto", + "Description": "Scale uniformly around the origin\n\nCoordinateSystem.Scale (amount: double = 1): CoordinateSystem" + }, + { + "ConcreteType": "CoreNodeModels.Input.DoubleInput, CoreNodeModels", + "NumberType": "Double", + "Id": "121c70cf049e40b59687d2a0f5a9c373", + "NodeType": "NumberInputNode", + "Inputs": [], + "Outputs": [ + { + "Id": "f746b7614ea54da087e59bfd1dce3531", + "Name": "", + "Description": "Double", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Creates a number", + "InputValue": 2.3 + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "2a792b15395a4536bdd6b37f4746dd54", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "b271db31b8284336a80af2546ac10d40", + "Name": "geometry", + "Description": "Autodesk.DesignScript.Geometry.Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "ac41e4fd6c8245ab86014aa864e8ddee", + "Name": "fromCoordinateSystem", + "Description": "CoordinateSystem", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "c134f78cc3994d03839e87f1555e2724", + "Name": "contextCoordinateSystem", + "Description": "CoordinateSystem", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "f9dde021372246138c1de14bf4dde5a8", + "Name": "Geometry", + "Description": "Transformed Geometry.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Geometry.Transform@Autodesk.DesignScript.Geometry.CoordinateSystem,Autodesk.DesignScript.Geometry.CoordinateSystem", + "Replication": "Auto", + "Description": "Transforms this geometry from source CoordinateSystem to a new context CoordinateSystem.\n\nGeometry.Transform (fromCoordinateSystem: CoordinateSystem, contextCoordinateSystem: CoordinateSystem): Geometry" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "871816cfb04e4293a4d3894dc32beef5", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "fe379819f4324fb8b2a3ff3cd7d98d8b", + "Name": "x", + "Description": "double\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "3b3095c641c24bcd97239825ca0ce9ec", + "Name": "y", + "Description": "double\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "b75b65929e1d4f7a88f280b7c6c34a42", + "Name": "CoordinateSystem", + "Description": "CoordinateSystem", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.CoordinateSystem.ByOrigin@double,double", + "Replication": "Auto", + "Description": "Create a CoordinateSystem with origin at X and Y locations, with X and Y Axes set as WCS X and Y Axes. Z defaults to 0.\n\nCoordinateSystem.ByOrigin (x: double = 0, y: double = 0): CoordinateSystem" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "64e0f81d9fc2401497569e344f4ba003", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "156320e83748436b9f5b52f8ae36aedf", + "Name": "json", + "Description": "A JSON string\n\nstring", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "9657019818424f049673edd959f1219d", + "Name": "result", + "Description": "The result type depends on the content of the input string. The result type can be a primitive value (e.g. string, boolean, double), a List, or a Dictionary.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Data.ParseJSON@string", + "Replication": "Auto", + "Description": "Parse converts an arbitrary JSON string to a value. It is the opposite of JSON.Stringify.\n\nData.ParseJSON (json: string): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "d12022d962f6465c9ab53b259cceaed5", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "2b94ef987d084b77bf0640dbf4ce05cf", + "Name": "geometry", + "Description": "Autodesk.DesignScript.Geometry.Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "818f134e41d64aabaa31e399d80fed8a", + "Name": "other", + "Description": "Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "bc6ae8c3deec4b88be656d400fd1965b", + "Name": "bool", + "Description": "bool", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Geometry.IsAlmostEqualTo@Autodesk.DesignScript.Geometry.Geometry", + "Replication": "Auto", + "Description": "Check if the two objects have the same representational geometry or numerical values\n\nGeometry.IsAlmostEqualTo (other: Geometry): bool" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "5d982ac07be34126ac01f2c13e785100", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "46813653e01945a7965bbf18a0ff7c06", + "Name": "values", + "Description": "A List of values\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "b12180c89ba64b189ec6d1b53f71a1af", + "Name": "json", + "Description": "A JSON string where primitive types (e.g. double, int, boolean), Lists, and Dictionary's will be turned into the associated JSON type.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Data.StringifyJSON@var[]..[]", + "Replication": "Auto", + "Description": "Stringify converts an arbitrary value or a list of arbitrary values to JSON. Replication can be used to apply the operation over a list, producing a list of JSON strings.\n\nData.StringifyJSON (values: var[]..[]): string" + }, + { + "ConcreteType": "CoreNodeModels.Equals, CoreNodeModels", + "Id": "2f51e27778ee4b959adebdd46176b3c2", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "040a217f3df842faa732d5e9270df207", + "Name": "x", + "Description": "Integer or double value", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "5212e857998b4beb80d5b7d6e88ab5f9", + "Name": "y", + "Description": "Integer or double value", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "4da4760680e34acf9900056d9c8e0817", + "Name": "tolerance", + "Description": "Tolerance permitted for equality check\r\nDefault value: 1E-05", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "8e96e550aac84f4ab7aa23b25ce6fa9d", + "Name": "bool", + "Description": "Result of equality check", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Auto", + "Description": "Returns True if x and y are equal given a certain tolerance" + }, + { + "ConcreteType": "CoreNodeModels.Equals, CoreNodeModels", + "Id": "f6080375b8b14407825598fa40fd8efc", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "cae688bcd93f41e899e788ae1a0ace64", + "Name": "x", + "Description": "Integer or double value", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "debd5696fcdb4904a78ec6fa873d99fe", + "Name": "y", + "Description": "Integer or double value", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "9e5ebbfdbc004d2b86e26fad6a29caab", + "Name": "tolerance", + "Description": "Tolerance permitted for equality check\r\nDefault value: 1E-05", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "cffd57581e84458899c4180d9790b95b", + "Name": "bool", + "Description": "Result of equality check", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Auto", + "Description": "Returns True if x and y are equal given a certain tolerance" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSVarArgFunction, DynamoCore", + "FunctionSignature": "DSCore.List.Join@var[]..[]", + "FunctionType": "VariableArgument", + "Id": "53289c64260b450e851247482102e42f", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "aa47edccbb36431c88f67a0963b0c747", + "Name": "list0", + "Description": "Lists to join into one.\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "6ea2dcb127bb46008d24eb923d8517d8", + "Name": "list1", + "Description": "var[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "2dcbb92be9cc46d7aeab969103438956", + "Name": "list", + "Description": "Joined list.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Concatenates all given lists into a single list.\n\nList.Join (lists: var[]..[]): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSVarArgFunction, DynamoCore", + "FunctionSignature": "DSCore.List.Join@var[]..[]", + "FunctionType": "VariableArgument", + "Id": "ee7d04ce4fcc45038e223ab6461bd3be", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "106bd5ad114b4935bce7ba871d15535d", + "Name": "list0", + "Description": "Lists to join into one.\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "542ca4fac51f4c8286f838bde3cd9ac0", + "Name": "list1", + "Description": "var[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "5bd0ae8eea764fa5aea365088e5fe78a", + "Name": "list", + "Description": "Joined list.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Concatenates all given lists into a single list.\n\nList.Join (lists: var[]..[]): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSVarArgFunction, DynamoCore", + "FunctionSignature": "DSCore.List.Join@var[]..[]", + "FunctionType": "VariableArgument", + "Id": "64fc0dc37b4f436682cab86af9ffae38", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "77888e501e644ee7b7486b2667e31e49", + "Name": "list0", + "Description": "Lists to join into one.\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "7efaeee5ef6f427680b4f07c3e0dc4bc", + "Name": "list1", + "Description": "var[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "72e63091011e4be5847f1aaca7c98460", + "Name": "list", + "Description": "Joined list.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Concatenates all given lists into a single list.\n\nList.Join (lists: var[]..[]): var[]..[]" + }, + { + "ConcreteType": "CoreNodeModels.Equals, CoreNodeModels", + "Id": "56dfaca1789a4a99a6397eae2b574848", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "fc9e6b2cd1844ad3934a21b5d9f11cf9", + "Name": "x", + "Description": "Integer or double value", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "e316e71c341f40abbe951bb3c0826a2e", + "Name": "y", + "Description": "Integer or double value", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "4e7abcaa508844808f1c5b9e7f7dac55", + "Name": "tolerance", + "Description": "Tolerance permitted for equality check\r\nDefault value: 1E-05", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "27f4d09bdd384ee7a363e4c8a3cc8b6f", + "Name": "bool", + "Description": "Result of equality check", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Auto", + "Description": "Returns True if x and y are equal given a certain tolerance" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "cff8d487655f4560b7781c14859f3dee", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "337807b71abb4b8c97ad6e013eea2326", + "Name": "vector", + "Description": "Autodesk.DesignScript.Geometry.Vector", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "b30b8f4c10ca4e65b9147b97326d92f2", + "Name": "otherVector", + "Description": "Other vector\n\nVector", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "2fdfe4e9e48b4eca87f13915358b28b1", + "Name": "bool", + "Description": "Returns True if the vectors are almost equal; false otherwise.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Vector.IsAlmostEqualTo@Autodesk.DesignScript.Geometry.Vector", + "Replication": "Auto", + "Description": "Determine whether two vectors are almost equal. A tolerance value of 1e-5 given to handle precision issues.\n\nVector.IsAlmostEqualTo (otherVector: Vector): bool" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSVarArgFunction, DynamoCore", + "FunctionSignature": "DSCore.List.Join@var[]..[]", + "FunctionType": "VariableArgument", + "Id": "f393e438026947b09ec6cbf0ec1267bb", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "26b599325dc6463b9d3b8f5031373529", + "Name": "list0", + "Description": "Lists to join into one.\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "c5fb8a600695414fa3bacd28db375646", + "Name": "list1", + "Description": "var[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "38db5cdc9b2d4a3697849880ef02851c", + "Name": "list2", + "Description": "var[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "ea42323d44de4fdd903f65abc612836c", + "Name": "list", + "Description": "Joined list.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Concatenates all given lists into a single list.\n\nList.Join (lists: var[]..[]): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "e4b1b61b70b8446bb5e70c8f15c29500", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "8a69fbb0d4ee42f0b2f476c438e4d212", + "Name": "list", + "Description": "List to be checked on whether all items are true.\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "7ee73a2388464e6dbe22158599ec2a1b", + "Name": "bool", + "Description": "True if all items from list are true, false if one or more items is not true", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.List.AllTrue@var[]..[]", + "Replication": "Auto", + "Description": "Determines if all items in the given list is a boolean and has a true value.\n\nList.AllTrue (list: var[]..[]): bool" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSVarArgFunction, DynamoCore", + "FunctionSignature": "DSCore.List.Join@var[]..[]", + "FunctionType": "VariableArgument", + "Id": "8a69649066dc42ce8e4f3bd48b8cfce3", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "2aef8462aba345b6a400a8c4d9ee455c", + "Name": "list0", + "Description": "Lists to join into one.\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "884c23c0aa9a46609649f9ca037bc7ff", + "Name": "list1", + "Description": "var[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "d57b5e28dc234cb2aa8f25cbb2133f2c", + "Name": "list", + "Description": "Joined list.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Concatenates all given lists into a single list.\n\nList.Join (lists: var[]..[]): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "c874d99f1c9243efa05a85f15e4721c1", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "a541dae4ced349749ee94670ca9587c1", + "Name": "geometry", + "Description": "Autodesk.DesignScript.Geometry.Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "604bf53747c34d98a29c49d5df13607b", + "Name": "other", + "Description": "Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "704938924b5347b28e3a9618379d8e11", + "Name": "bool", + "Description": "bool", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Geometry.IsAlmostEqualTo@Autodesk.DesignScript.Geometry.Geometry", + "Replication": "Auto", + "Description": "Check if the two objects have the same representational geometry or numerical values\n\nGeometry.IsAlmostEqualTo (other: Geometry): bool" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "d65207d9048b4fe48bc0f2537e3a48eb", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "ef8173faa1f64bd5907ab8e2552159bf", + "Name": "curve", + "Description": "Autodesk.DesignScript.Geometry.Curve", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "af37cb0eecc14eceb5688f240998584c", + "Name": "Point", + "Description": "Point", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Curve.StartPoint", + "Replication": "Auto", + "Description": "Get the start Point along the Curve\n\nCurve.StartPoint: Point" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "0cbff5f7b4f249b5aafd093080b934fd", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "3a8c5b2c7e1a4907aefe0e1ad609739b", + "Name": "arc", + "Description": "Autodesk.DesignScript.Geometry.Arc", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "3e7564f8e31147f2af4c967f64c007fc", + "Name": "double", + "Description": "double", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Arc.StartAngle", + "Replication": "Auto", + "Description": "Returns the start angle of the arc in degrees as the rotation from the X axis in the coordinate system around the Z-axis.\n\nArc.StartAngle: double" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "0b35ca7e52ed440da07fc16b24aec654", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "6269a013b4364ca69c3c5de06b9018bd", + "Name": "arc", + "Description": "Autodesk.DesignScript.Geometry.Arc", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "93aaaeee738246e392fe4ecb163fbee3", + "Name": "double", + "Description": "double", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Arc.SweepAngle", + "Replication": "Auto", + "Description": "Returns the sweep angle of the arc in degrees.\n\nArc.SweepAngle: double" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "f4505785f2fd45a0a7f32b6ab468fd8f", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "0d9fd4c6736d44d39fde4c144739c92f", + "Name": "arc", + "Description": "Autodesk.DesignScript.Geometry.Arc", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "b4be69865e8346dfb44eeeac7c42ac80", + "Name": "double", + "Description": "double", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Arc.Radius", + "Replication": "Auto", + "Description": "Returns the radius of the arc.\n\nArc.Radius: double" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "c06b28bb6759461da214daa96e74528f", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "a1fd2d58e45e4faf8babd410be404853", + "Name": "curve", + "Description": "Autodesk.DesignScript.Geometry.Curve", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "7012fd1422124f2e89614af444930681", + "Name": "Point", + "Description": "Point", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Curve.EndPoint", + "Replication": "Auto", + "Description": "Get the end Point along the Curve\n\nCurve.EndPoint: Point" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "30411f356d424d1586002230d8f0582d", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "90399d16da96461186051616cf08d0d8", + "Name": "curve", + "Description": "Autodesk.DesignScript.Geometry.Curve", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "78d933c997284d4eba0fe7614cfa1249", + "Name": "Vector", + "Description": "Vector", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Curve.Normal", + "Replication": "Auto", + "Description": "The normal to the plane the curve lies in. Only valid for planar curves.\n\nCurve.Normal: Vector" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "3b65233a999d4f7fa77f5a66407beba0", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "6642b5d5de764c44be494608e3273391", + "Name": "curve", + "Description": "Autodesk.DesignScript.Geometry.Curve", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "7e997a90ce914fe6bfcb369c0a7fa6fc", + "Name": "Vector", + "Description": "Vector", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Curve.Normal", + "Replication": "Auto", + "Description": "The normal to the plane the curve lies in. Only valid for planar curves.\n\nCurve.Normal: Vector" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "327a343b43b0472696bdb14409cd46e1", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "99fe65eb221440b096ff0c9dbe612c4b", + "Name": "curve", + "Description": "Autodesk.DesignScript.Geometry.Curve", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "660229d9b6454741a4e5aa131762dfee", + "Name": "Point", + "Description": "Point", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Curve.EndPoint", + "Replication": "Auto", + "Description": "Get the end Point along the Curve\n\nCurve.EndPoint: Point" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "0db95d22e7d34642b9830d2be50196cb", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "9239938598594cc5abbb34e8cddf0ecc", + "Name": "arc", + "Description": "Autodesk.DesignScript.Geometry.Arc", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "09af07d46ff5470f9c22016c3bf14451", + "Name": "double", + "Description": "double", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Arc.StartAngle", + "Replication": "Auto", + "Description": "Returns the start angle of the arc in degrees as the rotation from the X axis in the coordinate system around the Z-axis.\n\nArc.StartAngle: double" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "adc09b9ba1264b1c9e5a19b2b5acb70e", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "8102df397b2d4b78b72256201741cc2a", + "Name": "arc", + "Description": "Autodesk.DesignScript.Geometry.Arc", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "8999bf2d05d145e3acb24f56c7d7da16", + "Name": "double", + "Description": "double", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Arc.SweepAngle", + "Replication": "Auto", + "Description": "Returns the sweep angle of the arc in degrees.\n\nArc.SweepAngle: double" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "5f6bfb18eb5241e9844dfa68fd4fc6ae", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "4aa5bc2b54c947e68b2f28970ff6297e", + "Name": "arc", + "Description": "Autodesk.DesignScript.Geometry.Arc", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "f521437c946b4b3bb22d9f975aa81508", + "Name": "double", + "Description": "double", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Arc.Radius", + "Replication": "Auto", + "Description": "Returns the radius of the arc.\n\nArc.Radius: double" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "d37cda811b8448208dda815c3501e7b7", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "833d934ea4e5413bba9812de171a4ac7", + "Name": "curve", + "Description": "Autodesk.DesignScript.Geometry.Curve", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "59b22d72d6684144b70f8bbd9d33377f", + "Name": "Point", + "Description": "Point", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Curve.StartPoint", + "Replication": "Auto", + "Description": "Get the start Point along the Curve\n\nCurve.StartPoint: Point" + }, + { + "ConcreteType": "CoreNodeModels.Watch, CoreNodeModels", + "WatchWidth": 420.0, + "WatchHeight": 38.0, + "Id": "8f3d7e17396c4346bd491d121a996bb4", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "6e9a9ed57bc7439f94db6a30ae7734f3", + "Name": "", + "Description": "Node to show output from", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "54f974a6b4f44a26afeca9e33f7bcbe1", + "Name": "", + "Description": "Node output", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Visualizes a node's output" + }, + { + "ConcreteType": "CoreNodeModels.Watch, CoreNodeModels", + "WatchWidth": 420.0, + "WatchHeight": 38.0, + "Id": "525d0603b30d4f4a872926e6dbfe7583", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "33850c49f19c4ffc954562a55196ac86", + "Name": "", + "Description": "Node to show output from", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "1d727274a69141a7bce496b6b8aa1e43", + "Name": "", + "Description": "Node output", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Visualizes a node's output" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "71efc8c5c0c74189901707c30e6d5903", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "64cad8271a2c4236a432b3f8cb9a965e", + "Name": "list", + "Description": "List to be checked on whether all items are true.\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "a90bff347c4e47db904a83067894db1f", + "Name": "bool", + "Description": "True if all items from list are true, false if one or more items is not true", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.List.AllTrue@var[]..[]", + "Replication": "Auto", + "Description": "Determines if all items in the given list is a boolean and has a true value.\n\nList.AllTrue (list: var[]..[]): bool" + }, + { + "ConcreteType": "CoreNodeModels.CreateList, CoreNodeModels", + "VariableInputPorts": true, + "Id": "8664814186334fae8508981e55c59bf5", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "e162b184014f49f6b791ed7d446743a7", + "Name": "item0", + "Description": "Item Index #0", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "4c109e1dcec74cc89b064c9700b01940", + "Name": "item1", + "Description": "Item Index #1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "96bb08f202fe4d1cadaa67578b4db7fc", + "Name": "item2", + "Description": "Item Index #2", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "1c3a763901304f2097d48d54187986fe", + "Name": "list", + "Description": "A list (type: var[]..[])", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Makes a new list from the given inputs" + }, + { + "ConcreteType": "CoreNodeModels.CreateList, CoreNodeModels", + "VariableInputPorts": true, + "Id": "ea79751ba09a4bb7ad332a23b9b2fed6", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "0bc07e89953e481e867d78fe8b3fe18a", + "Name": "item0", + "Description": "Item Index #0", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "5ca8b86481ec424fabf75f3e81485618", + "Name": "item1", + "Description": "Item Index #1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "0bc2dd4247524f18bda0cf5f9b07bd39", + "Name": "item2", + "Description": "Item Index #2", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "b58a9c94940d4af4a89077bafec1c195", + "Name": "item3", + "Description": "Item Index #3", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "b84fa53dfc1b45a79b8850461045eb27", + "Name": "list", + "Description": "A list (type: var[]..[])", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Makes a new list from the given inputs" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "82304dd5025948f8a5644a84a32d58d4", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "bdb3a58102b341a3aa53bdfbb6e86566", + "Name": "list", + "Description": "List to be checked on whether all items are false.\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "a08e68161b404675bd299bb976a4e691", + "Name": "bool", + "Description": "True if all items from list are false, false if one or more items is not false", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.List.AllFalse@var[]..[]", + "Replication": "Auto", + "Description": "Determines if all items in the given list is a boolean and has a false value.\n\nList.AllFalse (list: var[]..[]): bool" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "62b0e398a3d64036b177a8c9d5ce8fd6", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "32e877ec54934cd4a37bf430bf65361b", + "Name": "object", + "Description": "Object to query type\n\nvar", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "2fbb931c87c14e85b8dbe82ca633edf8", + "Name": "string", + "Description": "Type of object.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Object.Type@var", + "Replication": "Auto", + "Description": "Returns the type of object represented as string.\n\nObject.Type (object: var): string" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "a2ce63c1256b44de9ad7b8e0e3af4816", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "7ba3c380030f4df482ac77f8aacdf8ec", + "Name": "x", + "Description": "Basic type object to compare (e.g. bool, int, double, string, etc.)\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "23ea9b320f134ce7b6f23956fc2da953", + "Name": "y", + "Description": "Basic type object to compare (e.g. bool, int, double, string, etc.)\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "6519d52661054d4a8921aa5c3775166b", + "Name": "bool", + "Description": "Result of equality check", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "==@var[]..[],var[]..[]", + "Replication": "Auto", + "Description": "Compares if x and y are equal\n\n== (x: var[]..[], y: var[]..[]): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "9748522aea3548ddae928f1db98ad282", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "f6de5fae11d14481b90530944a401edc", + "Name": "object", + "Description": "Object to query type\n\nvar", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "9997513a78f248578e9a19ee04fc154e", + "Name": "string", + "Description": "Type of object.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Object.Type@var", + "Replication": "Auto", + "Description": "Returns the type of object represented as string.\n\nObject.Type (object: var): string" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "4d9686d01eb546e5901fb2256ca24bfb", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "68c421f91bac48c0b5a8e291bc59b8ad", + "Name": "list", + "Description": "List to flatten.\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "15b495ceddf4496a9ad25d0ea216d60f", + "Name": "amount", + "Description": "Layers of list nesting to remove (-1 will remove all list nestings)\n\nint\nDefault value : -1", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "963848879ef540e1b5d13a21ad5c0108", + "Name": "list", + "Description": "Flattened list by amount", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.List.Flatten@var[]..[],int", + "Replication": "Auto", + "Description": "Flattens a nested list of lists by a certain amount.\n\nList.Flatten (list: var[]..[], amount: int = -1): var[]..[]" + }, + { + "ConcreteType": "CoreNodeModels.CreateList, CoreNodeModels", + "VariableInputPorts": true, + "Id": "683a7cbf882c49cc8829979c23443c84", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "299e7851bf864e65b8c57d8f232eb7b4", + "Name": "item0", + "Description": "Item Index #0", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "a4775704643948bc9d8ba4390821bfc4", + "Name": "item1", + "Description": "Item Index #1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "399024e3f03547c7ae06ce4114bab5ac", + "Name": "item2", + "Description": "Item Index #2", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "63fc46d633fa438f8686d0b41c773174", + "Name": "list", + "Description": "A list (type: var[]..[])", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Makes a new list from the given inputs" + } + ], + "Connectors": [ + { + "Start": "1abf21bb53c94d7eb03594ce76db320d", + "End": "c34baa1841914cac9db607b71b41d8f7", + "Id": "82441b376b754150860db2dac66c1653", + "IsHidden": "False" + }, + { + "Start": "1abf21bb53c94d7eb03594ce76db320d", + "End": "b584618068164d398fe7dbffe593b0ef", + "Id": "916c12bf55c348cb94434871e4fe25c8", + "IsHidden": "False" + }, + { + "Start": "1abf21bb53c94d7eb03594ce76db320d", + "End": "65f74df534f34f10a387cba40fa8eff4", + "Id": "044dc470a25c4415a28729bed030fa26", + "IsHidden": "False" + }, + { + "Start": "1abf21bb53c94d7eb03594ce76db320d", + "End": "85f4c4f0e5404619a0e20d724080e930", + "Id": "5184a4af08fa4387b4309fb418c85b88", + "IsHidden": "False" + }, + { + "Start": "1abf21bb53c94d7eb03594ce76db320d", + "End": "b271db31b8284336a80af2546ac10d40", + "Id": "433f5c62c0494cda8fc5877788c055d5", + "IsHidden": "False" + }, + { + "Start": "1abf21bb53c94d7eb03594ce76db320d", + "End": "f6de5fae11d14481b90530944a401edc", + "Id": "f907c00bdf0d4846ac0f42ce2dd27f76", + "IsHidden": "False" + }, + { + "Start": "d03044916e76425a892b41ea27d8b22c", + "End": "87bc8dbca07547e59ab02e5fe9ea7451", + "Id": "0c34334418eb492594590536d51223fb", + "IsHidden": "False" + }, + { + "Start": "eb383155efc048e8900868dc85213536", + "End": "ddaff23e6e914392808a10f64144bda3", + "Id": "c4ed499f356641cd8b3614bcf84a364d", + "IsHidden": "False" + }, + { + "Start": "eb383155efc048e8900868dc85213536", + "End": "62259f31de654afcb3fad3c003383e3e", + "Id": "86723d2b195449ce8b61308c9548bf0e", + "IsHidden": "False" + }, + { + "Start": "eb383155efc048e8900868dc85213536", + "End": "1f16eb4f855d46a1922a63c6180c108e", + "Id": "29f68b7c9bfc42238fe639f3876569e9", + "IsHidden": "False" + }, + { + "Start": "e01aa4a665764bf9981a48e4b12d042a", + "End": "41281040a7d14a2cae610bbf7c62e324", + "Id": "89cce43a45d347d1bfc2967ed9473ed1", + "IsHidden": "False" + }, + { + "Start": "e01aa4a665764bf9981a48e4b12d042a", + "End": "32e877ec54934cd4a37bf430bf65361b", + "Id": "a7f22c41e5f44ba18a220c0cc708fb86", + "IsHidden": "False" + }, + { + "Start": "98f08663bdfc44e29970670879c98f81", + "End": "bad565a11dc74d0b93316a47fffec75f", + "Id": "7772aed300174d1b814266749d9cc731", + "IsHidden": "False" + }, + { + "Start": "1e0c08abcd7c456da2dcc7ca6f5f11b3", + "End": "a4775704643948bc9d8ba4390821bfc4", + "Id": "8bbb618d9306490a96fe39af24341e76", + "IsHidden": "False" + }, + { + "Start": "ef07e4411613422aae8135cb6f31190b", + "End": "b3bc8520dd344fb6acd06bb26d64bb2b", + "Id": "357c03dc21884168be403c9ffa37b42d", + "IsHidden": "False" + }, + { + "Start": "aeecea9e5eda407ba2476d9a6d968393", + "End": "040a217f3df842faa732d5e9270df207", + "Id": "364ff81ab5df4fa9a924f90e96c811be", + "IsHidden": "False" + }, + { + "Start": "d13af90076c74ac78230f328948fc040", + "End": "d88588bf71d449639840d78dfece97f0", + "Id": "29285b1508db472d88efade1b3c3ae07", + "IsHidden": "False" + }, + { + "Start": "dcc45995949d4200b3cbae0b222af199", + "End": "c0f55bca5006494f9e4c35c17f2a4343", + "Id": "465e81a3243a4151b2f891eda158f1c6", + "IsHidden": "False" + }, + { + "Start": "034f7929c24c44b9890fe5684f17de26", + "End": "cfe6ef520f8042c79ed52c4dcb305a56", + "Id": "d5c2a25c47e44ff8b44bff467eea1579", + "IsHidden": "False" + }, + { + "Start": "1e98b5003d3a477abb590640b7e3cd14", + "End": "7553bce623bd4d7ba75f8ed21ca6dfc7", + "Id": "3c4a990d504e44b7a8c2995fe54bb5d9", + "IsHidden": "False" + }, + { + "Start": "7302fe8aab474c76a6200b750c83bc2b", + "End": "f297e3034e954e34b332bd664facb4f6", + "Id": "db3c7094c02c4b4391031b0a3e0aae43", + "IsHidden": "False" + }, + { + "Start": "d0d2cfcf98b2495ebb77b1f911bf5414", + "End": "3335261951a44cb8b5e49486b1a04475", + "Id": "dd7a5d583dd343499cd71157680a9fd0", + "IsHidden": "False" + }, + { + "Start": "47df84c64d914b76977d0635cc5a990f", + "End": "481a5847abdc477492f743ec0855dfa3", + "Id": "b081739869824af29485d9e01a2471e0", + "IsHidden": "False" + }, + { + "Start": "797f387bf29a49f09b6891a65fd8e30a", + "End": "f3ab50dea85c42f681d25937c744ae7c", + "Id": "57b139bd38ac49b8a80883f545ce0260", + "IsHidden": "False" + }, + { + "Start": "2426521b3c86452eb805ce72688fd11a", + "End": "569e346610254ad3b85edea5c54a2618", + "Id": "336bfb7caa004c55a818992da848546e", + "IsHidden": "False" + }, + { + "Start": "c8cd294588d84d47872700bdd9258f29", + "End": "286c8fb5e3e4499386f43b317180a686", + "Id": "8a62c0eab4634639ba5aeb1f18dbffd1", + "IsHidden": "False" + }, + { + "Start": "8ab08cf8f3894ea2862c212af032d3e7", + "End": "5212e857998b4beb80d5b7d6e88ab5f9", + "Id": "a344c2b7b8924d54a0c8ba50095d184f", + "IsHidden": "False" + }, + { + "Start": "3a9a65484ae04392a694d505758cb398", + "End": "ce96ffb90b3047298d5fc80c54193592", + "Id": "452e4cea7c9f43e88d29e741c9fc7a7b", + "IsHidden": "False" + }, + { + "Start": "55fd44c68ca84590924c36c1be746527", + "End": "01e8d5f9615a4258aef2ed6bb35e0082", + "Id": "1aaa7d8eae74433eb2a3865447104dde", + "IsHidden": "False" + }, + { + "Start": "e0758224b148497b9e115ad0dc31c15b", + "End": "ee68f220ea3940f0b2fe40a38433c6d4", + "Id": "907249fcc0b34837b22e93bb14b538d9", + "IsHidden": "False" + }, + { + "Start": "b73796de34a247569b8a33a1db19d742", + "End": "0ad93fda8b6f43e3a72625616f686c8e", + "Id": "582e9c1159d640c88e3b85129e0058d1", + "IsHidden": "False" + }, + { + "Start": "917c6f0cbfe549f0bf0ae5cf8908a320", + "End": "73a34ad7cc064df5be190bf41d284817", + "Id": "de7775eec4974cc18d8f0a9e621f9805", + "IsHidden": "False" + }, + { + "Start": "a12d20de7a1b499483bca127654e9fcf", + "End": "dda6c3def41243d99177b77719cde7cf", + "Id": "e7b52d005878431085fb83b71ce8db27", + "IsHidden": "False" + }, + { + "Start": "6ebd0d784043401e8f53be9124dfecf7", + "End": "0bcc492003a644058c5b5232e7e56269", + "Id": "409ba775f8924b76b21ed2d19065b76c", + "IsHidden": "False" + }, + { + "Start": "db2b2322e258435db7fca6aafe57b245", + "End": "4c109e1dcec74cc89b064c9700b01940", + "Id": "8adc042c8f7a4cc9bb9c4302ddfebc4d", + "IsHidden": "False" + }, + { + "Start": "e67a0f7839ee4641a64f4b06eaf98b14", + "End": "cc557b4803a34c67a7cfd9bf289d4879", + "Id": "14a89056de9048c599e0501e567cd5ac", + "IsHidden": "False" + }, + { + "Start": "e67a0f7839ee4641a64f4b06eaf98b14", + "End": "72ce9eec6a9f4c0fad1cabc075d0ac36", + "Id": "78ff6aa97fe24ff897ff81bc24770cae", + "IsHidden": "False" + }, + { + "Start": "e67a0f7839ee4641a64f4b06eaf98b14", + "End": "a6c91b205ee04372b35cd5f2eda6e2bb", + "Id": "e0bf598187324ec9bb7951190b6c534c", + "IsHidden": "False" + }, + { + "Start": "e67a0f7839ee4641a64f4b06eaf98b14", + "End": "b9888b0988c34ad0ae86026e82e25e6a", + "Id": "71046c422bb54f9a99a520e6fcc82703", + "IsHidden": "False" + }, + { + "Start": "e67a0f7839ee4641a64f4b06eaf98b14", + "End": "80d5716647164c5b9b85fcbca9678553", + "Id": "5c5fad9b954447189af702dfa5b6b10b", + "IsHidden": "False" + }, + { + "Start": "e67a0f7839ee4641a64f4b06eaf98b14", + "End": "e07c6e3a9c18406fbeeda0ae0fba712c", + "Id": "55420b809a0c4ce5882772c3a03d7928", + "IsHidden": "False" + }, + { + "Start": "25ae2dc6f03a4217992400821e43fc84", + "End": "ec8ce515a47e44caba627259d27dd9d7", + "Id": "0a9f71cc3394453abe5fd4408eea53a0", + "IsHidden": "False" + }, + { + "Start": "25ae2dc6f03a4217992400821e43fc84", + "End": "b63b8139a1084a6790b867871e5149d1", + "Id": "a0bee0ae2eff45489df422112b3f6bba", + "IsHidden": "False" + }, + { + "Start": "25ae2dc6f03a4217992400821e43fc84", + "End": "4dc69e93b9284861ba79bd54a1882686", + "Id": "97621633493445e8a4697de79d76fb25", + "IsHidden": "False" + }, + { + "Start": "25ae2dc6f03a4217992400821e43fc84", + "End": "1191c5e0df494528967d55d71229d2d6", + "Id": "86adcec429d64a9fb0eb65c7d8267590", + "IsHidden": "False" + }, + { + "Start": "25ae2dc6f03a4217992400821e43fc84", + "End": "5058df15266443e69ca208b6d323a0f1", + "Id": "76fc581192d34ca59ec43a3b7edc07d0", + "IsHidden": "False" + }, + { + "Start": "25ae2dc6f03a4217992400821e43fc84", + "End": "36079b3370024a0d9b67da9c5ea815e7", + "Id": "f9efb9fc2df44cd786a5a5d958630bea", + "IsHidden": "False" + }, + { + "Start": "ede79e2b0882454ebd19fc34167bfc41", + "End": "e0ca394d04ca41f3b8174568180ca34e", + "Id": "41c80bd5ea6c4defb9e8533a8b5c97bd", + "IsHidden": "False" + }, + { + "Start": "f41ef00532644b0892cd7a2dd0f62c8e", + "End": "297c0d29ef9d4d9a8f47ed6b166ba971", + "Id": "11792044ef024d69a898e574f476e4a2", + "IsHidden": "False" + }, + { + "Start": "f41ef00532644b0892cd7a2dd0f62c8e", + "End": "ab018c9a6f474ee2888890fcc14c4ffc", + "Id": "67f0d1549af0412693920e9e7df3ee10", + "IsHidden": "False" + }, + { + "Start": "e929ced36aca4057aa5ca243dd8629de", + "End": "0bc07e89953e481e867d78fe8b3fe18a", + "Id": "80e4d58aa37e4f8a904bc9d5b5f1cac9", + "IsHidden": "False" + }, + { + "Start": "59bb1ff9f55a4cb8af01c4d219f8128c", + "End": "526ecca2dc234cd8adca5ca8f5337de3", + "Id": "cf715ba1b3d94395b4e248dd5065cec5", + "IsHidden": "False" + }, + { + "Start": "59bb1ff9f55a4cb8af01c4d219f8128c", + "End": "341635ee65f64c8897f2de21c3d187f6", + "Id": "44c642f42a9c437e8a0d39db7eb8a416", + "IsHidden": "False" + }, + { + "Start": "7044cf65d6144910b802edb85a274e51", + "End": "d9ef5521e8104d6b86274042ad8f4fdb", + "Id": "2650bab6c0144777806b877b45f171b2", + "IsHidden": "False" + }, + { + "Start": "2d611cfadbb144fe8014da91aaf081f9", + "End": "399024e3f03547c7ae06ce4114bab5ac", + "Id": "dbf785be507b499595f77cbb263dfc88", + "IsHidden": "False" + }, + { + "Start": "4e27cd524d674b4b9f1218688f7e51de", + "End": "92ac962ee1f04d37a7fa4990ce60e766", + "Id": "f7f5604ad6004a1ea9626f674fce1728", + "IsHidden": "False" + }, + { + "Start": "168bcb9eacad45908f79d3c45cce2c27", + "End": "fefdf50efeea4bf7a820e74c3c99a790", + "Id": "dd1ea186174e40babc944145fe4c7ee5", + "IsHidden": "False" + }, + { + "Start": "fc60815c52f0417c9ec181d16a179d1c", + "End": "3368257c965240dab164ce44891072a8", + "Id": "30ff379c4e2940a78a58be1f9a79a6ba", + "IsHidden": "False" + }, + { + "Start": "fc60815c52f0417c9ec181d16a179d1c", + "End": "2c86775eb1074267914acf6a2feec4f9", + "Id": "114e0d1c66cc446391d70ed7da8a35c1", + "IsHidden": "False" + }, + { + "Start": "fc60815c52f0417c9ec181d16a179d1c", + "End": "a424723d790d48e096322c9fb0a5ae13", + "Id": "4b7e284d58a54e5b84924967a15c00e2", + "IsHidden": "False" + }, + { + "Start": "fc60815c52f0417c9ec181d16a179d1c", + "End": "d836c6aa5ec14181a73c3611b13f6907", + "Id": "e24ca89b26c74d468c65933f87eef953", + "IsHidden": "False" + }, + { + "Start": "fc60815c52f0417c9ec181d16a179d1c", + "End": "8e3d20c052614b71bbbf784b67d8b559", + "Id": "0d1dad76633f4d12b95c71277a249a77", + "IsHidden": "False" + }, + { + "Start": "fc60815c52f0417c9ec181d16a179d1c", + "End": "cbbff09d65244e2bb8a33ee19d3d4081", + "Id": "19afdcfaa5b44434932a1bba5503cee8", + "IsHidden": "False" + }, + { + "Start": "c0e625af81d842e0a7260a0d7e26b828", + "End": "ad01f8cc404d49788d20c427a1a484c2", + "Id": "56ef707efb2c49638a2993b6d97ef0ee", + "IsHidden": "False" + }, + { + "Start": "ba21f1d5053f459ebc8f4c08f04574e0", + "End": "e1e97d95d3e44f53886c7f2d0b1fc7cc", + "Id": "2acbec2aa758465c94b7384454e6a178", + "IsHidden": "False" + }, + { + "Start": "75ae223dfc0f49b08c069f75b02e41dd", + "End": "a1791bb7715643f29421a0e870e053b5", + "Id": "abc05267d44d4b49982fb4252e823940", + "IsHidden": "False" + }, + { + "Start": "74a4e0ec12304a6fb0e2898f6ec92dd5", + "End": "0d0b9036e1f24fec8fef464cfe5b04c6", + "Id": "e66b993e43684c599732c7ab4c4489ee", + "IsHidden": "False" + }, + { + "Start": "487fd07181924571b73e6e24046a05ce", + "End": "377f4d47b8494304bfeea26b31d9a869", + "Id": "3e1719f0d5fe4e81961262c015bc8dd6", + "IsHidden": "False" + }, + { + "Start": "9877b21d1a1848ea9c816a5762376947", + "End": "7170b996fa4548c2a54ea10fa23270d1", + "Id": "94ee48846ccc4390918381a9501f417e", + "IsHidden": "False" + }, + { + "Start": "9877b21d1a1848ea9c816a5762376947", + "End": "3c6c5102efe14291914e1e4bde9a7f95", + "Id": "f77cb4c9ae7c41ebb3891d97f66b1a17", + "IsHidden": "False" + }, + { + "Start": "055c94e81fb4468ca37560683c0d0804", + "End": "b7a6f47009b7424ebbbb1b74c2b28146", + "Id": "09947f9819c647c9a3b8e27e00d0469e", + "IsHidden": "False" + }, + { + "Start": "4cf1f68b80db4bfab717045ca611d4cc", + "End": "ffcf590ed156499096c70814aabcc2d3", + "Id": "b907736e026b4a54af63243e8b10ecda", + "IsHidden": "False" + }, + { + "Start": "4cf1f68b80db4bfab717045ca611d4cc", + "End": "f06dae9eb561423ab263aee0b278f141", + "Id": "997b8d42277d404ca8935702931594d1", + "IsHidden": "False" + }, + { + "Start": "8bb5cb937da94fdea104b79edec941dd", + "End": "369049b3e19b4524a0118c3012f541c9", + "Id": "147960f7a4a94aaa8a2d443126ef116a", + "IsHidden": "False" + }, + { + "Start": "3751954e148e4600a3d080325fb00e70", + "End": "ae7fdab182bc42378beefedf857e6c70", + "Id": "7dce8393cca949da8dba79220168a7bc", + "IsHidden": "False" + }, + { + "Start": "d285714acf534e79ad8f2adaf87cef82", + "End": "2886cbcea5b941ef8d7f6d23835d1b02", + "Id": "88da9d9ba41a4d9583e3b5568a73fe1f", + "IsHidden": "False" + }, + { + "Start": "cdd3f7df6009472d97a31806a64ee36e", + "End": "0488f30ec00645bbadbc1de3ed188375", + "Id": "b0cebbe87ee848e3bcc98a454a7ab28d", + "IsHidden": "False" + }, + { + "Start": "02b3ce6e7dbc494e9e8b1e43637d201e", + "End": "c134f78cc3994d03839e87f1555e2724", + "Id": "f9bb6bb7abc3489388cf8e2bb1639f25", + "IsHidden": "False" + }, + { + "Start": "f746b7614ea54da087e59bfd1dce3531", + "End": "1715dbfc74894bdab1bf54872a02b062", + "Id": "a04e4c259e7e491e9b45d94542493fe3", + "IsHidden": "False" + }, + { + "Start": "f9dde021372246138c1de14bf4dde5a8", + "End": "46813653e01945a7965bbf18a0ff7c06", + "Id": "ea71fc471cca4009b7bbab6575ae391f", + "IsHidden": "False" + }, + { + "Start": "f9dde021372246138c1de14bf4dde5a8", + "End": "2b94ef987d084b77bf0640dbf4ce05cf", + "Id": "5437190d95fd43f495e7d3ba2d9afb99", + "IsHidden": "False" + }, + { + "Start": "f9dde021372246138c1de14bf4dde5a8", + "End": "6e9a9ed57bc7439f94db6a30ae7734f3", + "Id": "e34d4db287574b70a9d4249e11b05269", + "IsHidden": "False" + }, + { + "Start": "b75b65929e1d4f7a88f280b7c6c34a42", + "End": "ac41e4fd6c8245ab86014aa864e8ddee", + "Id": "7ec5afb18ecf4c318e47554217b597b0", + "IsHidden": "False" + }, + { + "Start": "9657019818424f049673edd959f1219d", + "End": "818f134e41d64aabaa31e399d80fed8a", + "Id": "18c9576a56fe432993f2d66d691062ab", + "IsHidden": "False" + }, + { + "Start": "9657019818424f049673edd959f1219d", + "End": "33850c49f19c4ffc954562a55196ac86", + "Id": "40537531ef3749ca8eedfb200b6a384a", + "IsHidden": "False" + }, + { + "Start": "bc6ae8c3deec4b88be656d400fd1965b", + "End": "0bc2dd4247524f18bda0cf5f9b07bd39", + "Id": "9b6190b74d3b40a1ba22fd3c34c78688", + "IsHidden": "False" + }, + { + "Start": "b12180c89ba64b189ec6d1b53f71a1af", + "End": "156320e83748436b9f5b52f8ae36aedf", + "Id": "4d2744007b0447eb8ee1370d06136366", + "IsHidden": "False" + }, + { + "Start": "8e96e550aac84f4ab7aa23b25ce6fa9d", + "End": "5ca8b86481ec424fabf75f3e81485618", + "Id": "d74b5a2005284288b67d6cd96d5fbc89", + "IsHidden": "False" + }, + { + "Start": "cffd57581e84458899c4180d9790b95b", + "End": "b58a9c94940d4af4a89077bafec1c195", + "Id": "f709b2d337e84018812da67b042509ad", + "IsHidden": "False" + }, + { + "Start": "2dcbb92be9cc46d7aeab969103438956", + "End": "fc9e6b2cd1844ad3934a21b5d9f11cf9", + "Id": "82337df7c3f1479bab4f568d11564243", + "IsHidden": "False" + }, + { + "Start": "5bd0ae8eea764fa5aea365088e5fe78a", + "End": "e316e71c341f40abbe951bb3c0826a2e", + "Id": "f87d9034c3a64c2ba01132521fdd1261", + "IsHidden": "False" + }, + { + "Start": "72e63091011e4be5847f1aaca7c98460", + "End": "604bf53747c34d98a29c49d5df13607b", + "Id": "ca0bb79c21924a7b8a6d9cd2c988d842", + "IsHidden": "False" + }, + { + "Start": "27f4d09bdd384ee7a363e4c8a3cc8b6f", + "End": "c5fb8a600695414fa3bacd28db375646", + "Id": "8db8060d9d254badbb11880a96ddb444", + "IsHidden": "False" + }, + { + "Start": "2fdfe4e9e48b4eca87f13915358b28b1", + "End": "38db5cdc9b2d4a3697849880ef02851c", + "Id": "46c480f635bb4fe88cb58a27be954c16", + "IsHidden": "False" + }, + { + "Start": "ea42323d44de4fdd903f65abc612836c", + "End": "8a69fbb0d4ee42f0b2f476c438e4d212", + "Id": "c85d3d55b0dc41fd82247b458d9b57ef", + "IsHidden": "False" + }, + { + "Start": "7ee73a2388464e6dbe22158599ec2a1b", + "End": "96bb08f202fe4d1cadaa67578b4db7fc", + "Id": "4bc1c4b5e50c47d8afbc0da961edec15", + "IsHidden": "False" + }, + { + "Start": "d57b5e28dc234cb2aa8f25cbb2133f2c", + "End": "a541dae4ced349749ee94670ca9587c1", + "Id": "390ac04617e24b7e918caa47a2df3f32", + "IsHidden": "False" + }, + { + "Start": "704938924b5347b28e3a9618379d8e11", + "End": "26b599325dc6463b9d3b8f5031373529", + "Id": "32074035067c4689a966d756cb45aed1", + "IsHidden": "False" + }, + { + "Start": "af37cb0eecc14eceb5688f240998584c", + "End": "2aef8462aba345b6a400a8c4d9ee455c", + "Id": "9d97c504cb3c49208395de11bec91755", + "IsHidden": "False" + }, + { + "Start": "3e7564f8e31147f2af4c967f64c007fc", + "End": "cae688bcd93f41e899e788ae1a0ace64", + "Id": "1444f96e3e3745c1b0d2d5d474fbe787", + "IsHidden": "False" + }, + { + "Start": "93aaaeee738246e392fe4ecb163fbee3", + "End": "aa47edccbb36431c88f67a0963b0c747", + "Id": "b91416e0faec4d78933e96a263bce8ae", + "IsHidden": "False" + }, + { + "Start": "b4be69865e8346dfb44eeeac7c42ac80", + "End": "6ea2dcb127bb46008d24eb923d8517d8", + "Id": "7c7fc5314d6f4d9a9a50971a736b5cfa", + "IsHidden": "False" + }, + { + "Start": "7012fd1422124f2e89614af444930681", + "End": "884c23c0aa9a46609649f9ca037bc7ff", + "Id": "ce31fdba2f6a4cc7a3959cda492b88ed", + "IsHidden": "False" + }, + { + "Start": "78d933c997284d4eba0fe7614cfa1249", + "End": "337807b71abb4b8c97ad6e013eea2326", + "Id": "30515d98e30f4c2aa4c25af71d6be120", + "IsHidden": "False" + }, + { + "Start": "7e997a90ce914fe6bfcb369c0a7fa6fc", + "End": "b30b8f4c10ca4e65b9147b97326d92f2", + "Id": "c613fdca1d36455087304462a52ea46d", + "IsHidden": "False" + }, + { + "Start": "660229d9b6454741a4e5aa131762dfee", + "End": "7efaeee5ef6f427680b4f07c3e0dc4bc", + "Id": "ddf79ea478484d15ae8a38144eb5cf25", + "IsHidden": "False" + }, + { + "Start": "09af07d46ff5470f9c22016c3bf14451", + "End": "debd5696fcdb4904a78ec6fa873d99fe", + "Id": "b52a98954bc642c6b016d6b252264151", + "IsHidden": "False" + }, + { + "Start": "8999bf2d05d145e3acb24f56c7d7da16", + "End": "106bd5ad114b4935bce7ba871d15535d", + "Id": "b0b0ea439a41456ab9ee8b4d83d438e9", + "IsHidden": "False" + }, + { + "Start": "f521437c946b4b3bb22d9f975aa81508", + "End": "542ca4fac51f4c8286f838bde3cd9ac0", + "Id": "c0fb6a64ded647f899edaa76e50bb2cb", + "IsHidden": "False" + }, + { + "Start": "59b22d72d6684144b70f8bbd9d33377f", + "End": "77888e501e644ee7b7486b2667e31e49", + "Id": "19c0b1af9c7a43389c2c449f1cbeb9c7", + "IsHidden": "False" + }, + { + "Start": "54f974a6b4f44a26afeca9e33f7bcbe1", + "End": "ef8173faa1f64bd5907ab8e2552159bf", + "Id": "b2a2f7ac9c2345d8888cbb1e29a10cdd", + "IsHidden": "False" + }, + { + "Start": "54f974a6b4f44a26afeca9e33f7bcbe1", + "End": "3a8c5b2c7e1a4907aefe0e1ad609739b", + "Id": "9de5f09ee7d54f29bb869c2eb680008e", + "IsHidden": "False" + }, + { + "Start": "54f974a6b4f44a26afeca9e33f7bcbe1", + "End": "6269a013b4364ca69c3c5de06b9018bd", + "Id": "9f36498f45de4de5851e01e67fea7e20", + "IsHidden": "False" + }, + { + "Start": "54f974a6b4f44a26afeca9e33f7bcbe1", + "End": "0d9fd4c6736d44d39fde4c144739c92f", + "Id": "95243e414fd74cea90582b135a77fdc3", + "IsHidden": "False" + }, + { + "Start": "54f974a6b4f44a26afeca9e33f7bcbe1", + "End": "a1fd2d58e45e4faf8babd410be404853", + "Id": "ad3d166ff743484ebb503ee0ffbb404f", + "IsHidden": "False" + }, + { + "Start": "54f974a6b4f44a26afeca9e33f7bcbe1", + "End": "90399d16da96461186051616cf08d0d8", + "Id": "8d4c4f6c8e51472f9c175200b0a79cef", + "IsHidden": "False" + }, + { + "Start": "1d727274a69141a7bce496b6b8aa1e43", + "End": "6642b5d5de764c44be494608e3273391", + "Id": "6b0c9aa1f72d4b609bac25c5236cac31", + "IsHidden": "False" + }, + { + "Start": "1d727274a69141a7bce496b6b8aa1e43", + "End": "99fe65eb221440b096ff0c9dbe612c4b", + "Id": "a0603ee534864390b0056fb124723e52", + "IsHidden": "False" + }, + { + "Start": "1d727274a69141a7bce496b6b8aa1e43", + "End": "9239938598594cc5abbb34e8cddf0ecc", + "Id": "a1ef56d4a5d9401bb6c010372e7bc30b", + "IsHidden": "False" + }, + { + "Start": "1d727274a69141a7bce496b6b8aa1e43", + "End": "8102df397b2d4b78b72256201741cc2a", + "Id": "5f9136f670d042259656ea96e06398b1", + "IsHidden": "False" + }, + { + "Start": "1d727274a69141a7bce496b6b8aa1e43", + "End": "4aa5bc2b54c947e68b2f28970ff6297e", + "Id": "b43f5ae91f6f429d8da6097f7665d2c5", + "IsHidden": "False" + }, + { + "Start": "1d727274a69141a7bce496b6b8aa1e43", + "End": "833d934ea4e5413bba9812de171a4ac7", + "Id": "3b6054da639f4956bf8b82a50179aac5", + "IsHidden": "False" + }, + { + "Start": "1c3a763901304f2097d48d54187986fe", + "End": "68c421f91bac48c0b5a8e291bc59b8ad", + "Id": "5ec75e95d04f4f83bec9f58c4c780e8a", + "IsHidden": "False" + }, + { + "Start": "b84fa53dfc1b45a79b8850461045eb27", + "End": "bdb3a58102b341a3aa53bdfbb6e86566", + "Id": "bbf7f9952ab64e1aa0a9e4c65a5edc4d", + "IsHidden": "False" + }, + { + "Start": "2fbb931c87c14e85b8dbe82ca633edf8", + "End": "23ea9b320f134ce7b6f23956fc2da953", + "Id": "baccae5379ed40e2a070cee27d615b38", + "IsHidden": "False" + }, + { + "Start": "6519d52661054d4a8921aa5c3775166b", + "End": "299e7851bf864e65b8c57d8f232eb7b4", + "Id": "5d0776813a82402ca74b6c39468c783e", + "IsHidden": "False" + }, + { + "Start": "9997513a78f248578e9a19ee04fc154e", + "End": "7ba3c380030f4df482ac77f8aacdf8ec", + "Id": "d8ddfac236f545b0a46c0ff1eb3e59c2", + "IsHidden": "False" + }, + { + "Start": "963848879ef540e1b5d13a21ad5c0108", + "End": "64cad8271a2c4236a432b3f8cb9a965e", + "Id": "d8c319cc26f446f492e7fd2a475d0eec", + "IsHidden": "False" + }, + { + "Start": "63fc46d633fa438f8686d0b41c773174", + "End": "e162b184014f49f6b791ed7d446743a7", + "Id": "7f411c26bdfe4e9cacf69138fa73f303", + "IsHidden": "False" + } + ], + "Dependencies": [], + "NodeLibraryDependencies": [], + "Thumbnail": "", + "GraphDocumentationURL": null, + "ExtensionWorkspaceData": [ + { + "ExtensionGuid": "28992e1d-abb9-417f-8b1b-05e053bee670", + "Name": "Properties", + "Version": "3.0", + "Data": {} + } + ], + "Author": "", + "Linting": { + "activeLinter": "None", + "activeLinterId": "7b75fb44-43fd-4631-a878-29f4d5d8399a", + "warningCount": 0, + "errorCount": 0 + }, + "Bindings": [], + "View": { + "Dynamo": { + "ScaleFactor": 1.0, + "HasRunWithoutCrash": true, + "IsVisibleInDynamoLibrary": true, + "Version": "3.0.0.5795", + "RunType": "Automatic", + "RunPeriod": "1000" + }, + "Camera": { + "Name": "_Background Preview", + "EyeX": -18.535654067993164, + "EyeY": 23.499059677124023, + "EyeZ": 18.203514099121094, + "LookX": 23.659494400024414, + "LookY": -15.509147644042969, + "LookZ": -23.096899032592773, + "UpX": 0.15792295336723328, + "UpY": 0.9753423929214478, + "UpZ": -0.15416771173477173 + }, + "ConnectorPins": [], + "NodeViews": [ + { + "Id": "f1942fd42c654edb83e404b55e079342", + "Name": "Arc.ByCenterPointStartPointSweepAngle", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 296.63865674503245, + "Y": 459.46992075209585 + }, + { + "Id": "0044ddb33da444429aaae0defd9c4253", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -92.87097263133705, + "Y": 756.118612493406 + }, + { + "Id": "6b8c83a8df76454481d01936cd5ddbcd", + "Name": "Curve.Reverse", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 494.55308010512, + "Y": 1524.6184308072145 + }, + { + "Id": "186620d42cf04f3b8c8706a3723d35a5", + "Name": "Data.ParseJSON", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1417.761683843641, + "Y": 447.16409305995114 + }, + { + "Id": "f8f38e2638fb4f5690220969e9889012", + "Name": "Data.StringifyJSON", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1107.775570011588, + "Y": 446.0985095043583 + }, + { + "Id": "77cad78ea1c84a3da85d408c8eaeeaa9", + "Name": "Geometry.IsAlmostEqualTo", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1687.9545644297436, + "Y": 133.59932106351306 + }, + { + "Id": "37ee72a03b78496498939b22f124c4d8", + "Name": "Curve.StartPoint", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 3630.764528366825, + "Y": 801.7812336689647 + }, + { + "Id": "4fa40d24e7b74edc9634f64ab9a5300f", + "Name": "Arc.StartAngle", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 3627.6292064978416, + "Y": 1088.4972292282807 + }, + { + "Id": "c35e9fa163bb492aafd32b13c85cff91", + "Name": "Arc.SweepAngle", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 3625.9667441113725, + "Y": 1219.8317577593596 + }, + { + "Id": "cf84ed18adc645e5adfd20be59defa5d", + "Name": "Arc.Radius", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 3628.60796275563, + "Y": 1367.5434038393994 + }, + { + "Id": "a01a881e59c64af9b13e6487c934ca59", + "Name": "Curve.EndPoint", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 3630.419083450444, + "Y": 948.7460319010495 + }, + { + "Id": "9af943f031474236b91c2589f5710508", + "Name": "Curve.Normal", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 3628.8553798163152, + "Y": 1509.333784735947 + }, + { + "Id": "2c6332704233410ebaad1d7f5a234e2c", + "Name": "List.Join", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 3964.8830765033035, + "Y": 851.8943868091317 + }, + { + "Id": "8cee6fe36679421693795c2993fe8609", + "Name": "List.Join", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 3965.724547133882, + "Y": 1181.2386744079129 + }, + { + "Id": "4f0038f4b48749af8854c4a8bd8e9764", + "Name": "List.Join", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 3959.54181781606, + "Y": 2069.3946838434777 + }, + { + "Id": "55be4d0d781c4da48e87107bcedf41ac", + "Name": "Curve.Normal", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 3622.6726504984936, + "Y": 2397.489794171511 + }, + { + "Id": "bd7bed6bcb144f4c8372cc5e77c8554b", + "Name": "Curve.EndPoint", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 3624.2363541326213, + "Y": 1836.902041336614 + }, + { + "Id": "26cd1399b4eb4da88e1533b736ae2488", + "Name": "List.Join", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 3958.7003471854814, + "Y": 1740.0503962446953 + }, + { + "Id": "303bfe1b40b34305b2d69b8973c464a4", + "Name": "Arc.StartAngle", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 3621.4464771800194, + "Y": 1976.6532386638453 + }, + { + "Id": "bc0cf9b3b0ad4e74ba271b5f330a6067", + "Name": "Arc.SweepAngle", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 3619.7840147935503, + "Y": 2107.9877671949243 + }, + { + "Id": "9b6b2d2ac61f4a66a03b61611a447512", + "Name": "Arc.Radius", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 3622.425233437808, + "Y": 2255.6994132749637 + }, + { + "Id": "c7d38c0b0ca34c4d95b22574442b68d7", + "Name": "Curve.StartPoint", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 3624.581799049003, + "Y": 1689.9372431045292 + }, + { + "Id": "e8e8c398442c40ac925a5e946b51e2f7", + "Name": "Geometry.IsAlmostEqualTo", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 4257.079607363659, + "Y": 880.4933394591524 + }, + { + "Id": "dd4baa80397e4acda0858f2af5016f3f", + "Name": "==", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 4284.381105063611, + "Y": 1219.8400469695205 + }, + { + "Id": "a908d05fb4224d848d07f40cf2038363", + "Name": "Vector.IsAlmostEqualTo", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 4280.67931204004, + "Y": 1603.5582921142907 + }, + { + "Id": "862114159ec740f8a4296e0238f31a37", + "Name": "List.Join", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 4720.8725335816, + "Y": 1186.0048615016274 + }, + { + "Id": "6b394d6b32e4496b8fd4c098339692d9", + "Name": "List.AllTrue", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 4930.997091230196, + "Y": 1187.1036660976501 + }, + { + "Id": "90c67936e61e4f8e8381065aafd57424", + "Name": "Watch", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 3029.341310103814, + "Y": 1092.207700866861 + }, + { + "Id": "2e6805a3e1a34a119a709370699fb031", + "Name": "Watch", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 3015.6753210280963, + "Y": 1879.2024372557896 + }, + { + "Id": "ed28fb93e5484598bd1bbb4f66d2c27c", + "Name": "Data.StringifyJSON", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 949.2938465720335, + "Y": 1744.194896129113 + }, + { + "Id": "a14e625f30d54fce81a1933543e778b5", + "Name": "Data.ParseJSON", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1274.2728553362995, + "Y": 1744.6746376266112 + }, + { + "Id": "f0e1505d50c04577aad94f2e49faa9f6", + "Name": "Geometry.IsAlmostEqualTo", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1656.878799687922, + "Y": 1393.5397538721734 + }, + { + "Id": "c5431f2230a54b53bef8db7fa7722bbf", + "Name": "Geometry.Mirror", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 534.8372232197748, + "Y": 2522.1061187662144 + }, + { + "Id": "223c8a4c031c4ae093f3fb7e1901b27f", + "Name": "Data.ParseJSON", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1268.1661539522124, + "Y": 2832.2382221989556 + }, + { + "Id": "e86a4398b0a844008ad5d6f80c913106", + "Name": "Geometry.IsAlmostEqualTo", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1543.1365583129264, + "Y": 2691.224973394873 + }, + { + "Id": "8d2ba25b0c464d9a8d51c90db5f2755a", + "Name": "Data.StringifyJSON", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 976.4422869494829, + "Y": 2832.099206835129 + }, + { + "Id": "a0fcfe276bb148c38363a2a9329ff8c6", + "Name": "Point.ByCoordinates", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -139.96109229618673, + "Y": 334.1691223481582 + }, + { + "Id": "f588cf20edac424492e5f61cd8b4e248", + "Name": "Number", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -423.0642070850604, + "Y": 447.05931770139983 + }, + { + "Id": "64e09445f75c479b995db569c9962748", + "Name": "Point.ByCoordinates", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -139.96109229618673, + "Y": 547.1691223481582 + }, + { + "Id": "ae01d16856e04ee98e942873c3311f1b", + "Name": "Vector.ByCoordinates", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -170.8286597103837, + "Y": 904.1768936034762 + }, + { + "Id": "df33083708db43e186898f5569e5c7cc", + "Name": "Number", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -422.8866195768363, + "Y": 585.6435936344649 + }, + { + "Id": "bddda9cf3fba49abbc8adbf8970cada6", + "Name": "Plane.XZ", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 294.28927530161764, + "Y": 2606.855850483501 + }, + { + "Id": "53fb98609ab24c28a8d453c51e584542", + "Name": "CoordinateSystem.ByOrigin", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -728.1471631376862, + "Y": 3878.071382297084 + }, + { + "Id": "16e543ccbaf748269b1c0c8b64e38a14", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -982.1471631376862, + "Y": 3913.2088822970836 + }, + { + "Id": "8533e802506546c88cf46efb60cb30ef", + "Name": "CoordinateSystem.Rotate", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -349.6471631376862, + "Y": 4145.071382297084 + }, + { + "Id": "37395a69d48c4a7b99610a0c96cfbc22", + "Name": "Point.ByCoordinates", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -728.1471631376862, + "Y": 4090.071382297084 + }, + { + "Id": "01740c040af643349a8d72e79a7c7dd4", + "Name": "Vector.ByCoordinates", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -728.1471631376862, + "Y": 4302.071382297084 + }, + { + "Id": "a0d2de17c88643ceaa26c85513637113", + "Name": "Number", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -728.1471631376862, + "Y": 4514.071382297084 + }, + { + "Id": "b6f93229de91434794d004917d47136b", + "Name": "CoordinateSystem.Scale", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 177.63998379852, + "Y": 4050.071382297084 + }, + { + "Id": "121c70cf049e40b59687d2a0f5a9c373", + "Name": "Number", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -302.27885813520425, + "Y": 3989.071382297084 + }, + { + "Id": "2a792b15395a4536bdd6b37f4746dd54", + "Name": "Geometry.Transform", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 601.2193716861198, + "Y": 3822.494830296757 + }, + { + "Id": "871816cfb04e4293a4d3894dc32beef5", + "Name": "CoordinateSystem.ByOrigin", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 233.74429847344982, + "Y": 3857.913132801048 + }, + { + "Id": "64e0f81d9fc2401497569e344f4ba003", + "Name": "Data.ParseJSON", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1300.987366581579, + "Y": 4080.1321034679213 + }, + { + "Id": "d12022d962f6465c9ab53b259cceaed5", + "Name": "Geometry.IsAlmostEqualTo", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1575.9577709422929, + "Y": 3939.1188546638386 + }, + { + "Id": "5d982ac07be34126ac01f2c13e785100", + "Name": "Data.StringifyJSON", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1009.2634995788494, + "Y": 4079.9930881040946 + }, + { + "Id": "2f51e27778ee4b959adebdd46176b3c2", + "Name": "==", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 4414.778397312352, + "Y": 2172.2781067751703 + }, + { + "Id": "f6080375b8b14407825598fa40fd8efc", + "Name": "==", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 4476.38753023386, + "Y": 4814.39541301405 + }, + { + "Id": "53289c64260b450e851247482102e42f", + "Name": "List.Join", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 4001.4339270736186, + "Y": 3813.4894080823087 + }, + { + "Id": "ee7d04ce4fcc45038e223ab6461bd3be", + "Name": "List.Join", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 3995.2511977557965, + "Y": 4701.645417517873 + }, + { + "Id": "64fc0dc37b4f436682cab86af9ffae38", + "Name": "List.Join", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 3994.409727125218, + "Y": 4372.301129919091 + }, + { + "Id": "56dfaca1789a4a99a6397eae2b574848", + "Name": "==", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 4320.090485003348, + "Y": 3852.0907806439163 + }, + { + "Id": "cff8d487655f4560b7781c14859f3dee", + "Name": "Vector.IsAlmostEqualTo", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 4316.388691979777, + "Y": 4235.809025788687 + }, + { + "Id": "f393e438026947b09ec6cbf0ec1267bb", + "Name": "List.Join", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 4756.581913521337, + "Y": 3818.2555951760232 + }, + { + "Id": "e4b1b61b70b8446bb5e70c8f15c29500", + "Name": "List.AllTrue", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 4981.218926935868, + "Y": 3818.145028458218 + }, + { + "Id": "8a69649066dc42ce8e4f3bd48b8cfce3", + "Name": "List.Join", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 4000.59245644304, + "Y": 3484.1451204835275 + }, + { + "Id": "c874d99f1c9243efa05a85f15e4721c1", + "Name": "Geometry.IsAlmostEqualTo", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 4292.788987303396, + "Y": 3512.744073133548 + }, + { + "Id": "d65207d9048b4fe48bc0f2537e3a48eb", + "Name": "Curve.StartPoint", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 3666.473908306561, + "Y": 3434.0319673433605 + }, + { + "Id": "0cbff5f7b4f249b5aafd093080b934fd", + "Name": "Arc.StartAngle", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 3663.338586437578, + "Y": 3720.7479629026766 + }, + { + "Id": "0b35ca7e52ed440da07fc16b24aec654", + "Name": "Arc.SweepAngle", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 3661.676124051109, + "Y": 3852.0824914337554 + }, + { + "Id": "f4505785f2fd45a0a7f32b6ab468fd8f", + "Name": "Arc.Radius", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 3664.3173426953667, + "Y": 3999.7941375137952 + }, + { + "Id": "c06b28bb6759461da214daa96e74528f", + "Name": "Curve.EndPoint", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 3666.128463390181, + "Y": 3580.9967655754454 + }, + { + "Id": "30411f356d424d1586002230d8f0582d", + "Name": "Curve.Normal", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 3664.5647597560524, + "Y": 4141.584518410343 + }, + { + "Id": "3b65233a999d4f7fa77f5a66407beba0", + "Name": "Curve.Normal", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 3658.3820304382302, + "Y": 5029.740527845906 + }, + { + "Id": "327a343b43b0472696bdb14409cd46e1", + "Name": "Curve.EndPoint", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 3659.945734072358, + "Y": 4469.15277501101 + }, + { + "Id": "0db95d22e7d34642b9830d2be50196cb", + "Name": "Arc.StartAngle", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 3657.155857119756, + "Y": 4608.903972338241 + }, + { + "Id": "adc09b9ba1264b1c9e5a19b2b5acb70e", + "Name": "Arc.SweepAngle", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 3655.493394733287, + "Y": 4740.23850086932 + }, + { + "Id": "5f6bfb18eb5241e9844dfa68fd4fc6ae", + "Name": "Arc.Radius", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 3658.1346133775446, + "Y": 4887.950146949359 + }, + { + "Id": "d37cda811b8448208dda815c3501e7b7", + "Name": "Curve.StartPoint", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 3660.29117898874, + "Y": 4322.187976778925 + }, + { + "Id": "8f3d7e17396c4346bd491d121a996bb4", + "Name": "Watch", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 3065.0506900435507, + "Y": 3724.458434541257 + }, + { + "Id": "525d0603b30d4f4a872926e6dbfe7583", + "Name": "Watch", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 3051.384700967833, + "Y": 4511.4531709301855 + }, + { + "Id": "71efc8c5c0c74189901707c30e6d5903", + "Name": "List.AllTrue Final", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 6413.404609203155, + "Y": 228.7521476430494 + }, + { + "Id": "8664814186334fae8508981e55c59bf5", + "Name": "List Create", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 5796.814452254825, + "Y": 237.26175931196235 + }, + { + "Id": "ea79751ba09a4bb7ad332a23b9b2fed6", + "Name": "List Create", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 5377.410478759014, + "Y": 2771.468394324099 + }, + { + "Id": "82304dd5025948f8a5644a84a32d58d4", + "Name": "List.AllFalse", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 5761.533812890683, + "Y": 2775.0126300890893 + }, + { + "Id": "62b0e398a3d64036b177a8c9d5ce8fd6", + "Name": "Object.Type", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1502.2738148533165, + "Y": 827.9993730144638 + }, + { + "Id": "a2ce63c1256b44de9ad7b8e0e3af4816", + "Name": "==", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1810.3254531348305, + "Y": 746.1070080906611 + }, + { + "Id": "9748522aea3548ddae928f1db98ad282", + "Name": "Object.Type", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1505.8531365311503, + "Y": 682.7486210064117 + }, + { + "Id": "4d9686d01eb546e5901fb2256ca24bfb", + "Name": "List.Flatten", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 6082.079339021073, + "Y": 233.1790672382266 + }, + { + "Id": "683a7cbf882c49cc8829979c23443c84", + "Name": "List Create", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2583.5022150559444, + "Y": 302.7203761775361 + } + ], + "Annotations": [ + { + "Id": "8720175eaf73426e8f070ae3df436551", + "Title": "Check Arc Props", + "DescriptionText": "Description ", + "IsExpanded": true, + "WidthAdjustment": 0.0, + "HeightAdjustment": 0.0, + "Nodes": [ + "37ee72a03b78496498939b22f124c4d8", + "4fa40d24e7b74edc9634f64ab9a5300f", + "c35e9fa163bb492aafd32b13c85cff91", + "cf84ed18adc645e5adfd20be59defa5d", + "a01a881e59c64af9b13e6487c934ca59", + "9af943f031474236b91c2589f5710508", + "2c6332704233410ebaad1d7f5a234e2c", + "8cee6fe36679421693795c2993fe8609", + "4f0038f4b48749af8854c4a8bd8e9764", + "55be4d0d781c4da48e87107bcedf41ac", + "bd7bed6bcb144f4c8372cc5e77c8554b", + "26cd1399b4eb4da88e1533b736ae2488", + "303bfe1b40b34305b2d69b8973c464a4", + "bc0cf9b3b0ad4e74ba271b5f330a6067", + "9b6b2d2ac61f4a66a03b61611a447512", + "c7d38c0b0ca34c4d95b22574442b68d7", + "e8e8c398442c40ac925a5e946b51e2f7", + "dd4baa80397e4acda0858f2af5016f3f", + "a908d05fb4224d848d07f40cf2038363", + "862114159ec740f8a4296e0238f31a37", + "6b394d6b32e4496b8fd4c098339692d9", + "90c67936e61e4f8e8381065aafd57424", + "2e6805a3e1a34a119a709370699fb031", + "2f51e27778ee4b959adebdd46176b3c2" + ], + "HasNestedGroups": false, + "Left": 3005.6753210280963, + "Top": 728.7812336689647, + "Width": 2111.3217702020997, + "Height": 1800.7085605025466, + "FontSize": 36.0, + "GroupStyleId": "00000000-0000-0000-0000-000000000000", + "InitialTop": 801.7812336689647, + "InitialHeight": 1740.7085605025466, + "TextblockHeight": 63.0, + "Background": "#FFC1D676" + }, + { + "Id": "5dc775e99b2543968241d8bc4ae1427a", + "Title": "Check Arc Props", + "DescriptionText": "Description ", + "IsExpanded": true, + "WidthAdjustment": 0.0, + "HeightAdjustment": 0.0, + "Nodes": [ + "d65207d9048b4fe48bc0f2537e3a48eb", + "0cbff5f7b4f249b5aafd093080b934fd", + "0b35ca7e52ed440da07fc16b24aec654", + "f4505785f2fd45a0a7f32b6ab468fd8f", + "c06b28bb6759461da214daa96e74528f", + "30411f356d424d1586002230d8f0582d", + "8a69649066dc42ce8e4f3bd48b8cfce3", + "53289c64260b450e851247482102e42f", + "ee7d04ce4fcc45038e223ab6461bd3be", + "3b65233a999d4f7fa77f5a66407beba0", + "327a343b43b0472696bdb14409cd46e1", + "64fc0dc37b4f436682cab86af9ffae38", + "0db95d22e7d34642b9830d2be50196cb", + "adc09b9ba1264b1c9e5a19b2b5acb70e", + "5f6bfb18eb5241e9844dfa68fd4fc6ae", + "d37cda811b8448208dda815c3501e7b7", + "c874d99f1c9243efa05a85f15e4721c1", + "56dfaca1789a4a99a6397eae2b574848", + "cff8d487655f4560b7781c14859f3dee", + "f393e438026947b09ec6cbf0ec1267bb", + "e4b1b61b70b8446bb5e70c8f15c29500", + "8f3d7e17396c4346bd491d121a996bb4", + "525d0603b30d4f4a872926e6dbfe7583", + "f6080375b8b14407825598fa40fd8efc" + ], + "HasNestedGroups": false, + "Left": 3041.384700967833, + "Top": 3361.0319673433605, + "Width": 2125.834225968035, + "Height": 1800.7085605025459, + "FontSize": 36.0, + "GroupStyleId": "00000000-0000-0000-0000-000000000000", + "InitialTop": 3434.0319673433605, + "InitialHeight": 1740.7085605025459, + "TextblockHeight": 63.0, + "Background": "#FFC1D676" + }, + { + "Id": "299ea6c97b7040eeba5940b4ec204708", + "Title": "All True", + "DescriptionText": "", + "IsExpanded": true, + "WidthAdjustment": 0.0, + "HeightAdjustment": 0.0, + "Nodes": [ + "71efc8c5c0c74189901707c30e6d5903" + ], + "HasNestedGroups": false, + "Left": 6403.404609203155, + "Top": 155.7521476430494, + "Width": 216.5, + "Height": 205.0, + "FontSize": 36.0, + "GroupStyleId": "00000000-0000-0000-0000-000000000000", + "InitialTop": 228.7521476430494, + "InitialHeight": 145.0, + "TextblockHeight": 63.0, + "Background": "#FFC1D676" + }, + { + "Id": "9bc393cdd4bf4a4dbf2398613221de44", + "Title": "All False ", + "DescriptionText": "", + "IsExpanded": true, + "WidthAdjustment": 0.0, + "HeightAdjustment": 0.0, + "Nodes": [ + "82304dd5025948f8a5644a84a32d58d4" + ], + "HasNestedGroups": false, + "Left": 5751.533812890683, + "Top": 2702.0126300890893, + "Width": 196.0, + "Height": 205.0, + "FontSize": 36.0, + "GroupStyleId": "00000000-0000-0000-0000-000000000000", + "InitialTop": 2775.0126300890893, + "InitialHeight": 145.0, + "TextblockHeight": 63.0, + "Background": "#FFC1D676" + } + ], + "X": -4088.5041597935374, + "Y": 132.95728738117455, + "Zoom": 0.6909990788186477 + } +} \ No newline at end of file diff --git a/test/core/json/Curve_Circle_JSONParsing.dyn b/test/core/json/Curve_Circle_JSONParsing.dyn new file mode 100644 index 00000000000..25963c1d5da --- /dev/null +++ b/test/core/json/Curve_Circle_JSONParsing.dyn @@ -0,0 +1,2037 @@ +{ + "Uuid": "68ee13d5-35e3-4428-89c4-58d765929cce", + "IsCustomNode": false, + "Description": null, + "Name": "Curve_Circle_JSONParsing", + "ElementResolver": { + "ResolutionMap": { + "DSCore.Object": { + "Key": "DSCore.Object", + "Value": "DSCoreNodes.dll" + }, + "DSCore.Data": { + "Key": "DSCore.Data", + "Value": "DSCoreNodes.dll" + }, + "DesignScript.Builtin.Dictionary": { + "Key": "DesignScript.Builtin.Dictionary", + "Value": "DesignScriptBuiltin.dll" + }, + "Color": { + "Key": "DSCore.Color", + "Value": "DSCoreNodes.dll" + }, + "DSCore.DateTime.Now": { + "Key": "DSCore.DateTime", + "Value": "DSCoreNodes.dll" + }, + "DSCore.DateTime": { + "Key": "DSCore.DateTime", + "Value": "DSCoreNodes.dll" + }, + "Point": { + "Key": "Autodesk.DesignScript.Geometry.Point", + "Value": "ProtoGeometry.dll" + } + } + }, + "Inputs": [], + "Outputs": [], + "Nodes": [ + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "a7e4f7ff62b240f4abab4348721417ec", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "fe21ad7954d54a95bbe0953f5a7b6530", + "Name": "x", + "Description": "X coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "f3d235d612814f56914c487feb526899", + "Name": "y", + "Description": "Y coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "865a3ba3c8224a02a72b388f8770d273", + "Name": "z", + "Description": "Z coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "9f3921b70d2f4a369b7e9de62b053c0d", + "Name": "Vector", + "Description": "Vector created by coordinates", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Vector.ByCoordinates@double,double,double", + "Replication": "Auto", + "Description": "Form a Vector by 3 Euclidean coordinates\n\nVector.ByCoordinates (x: double = 0, y: double = 0, z: double = 0): Vector" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "24a55d8e2d80482db12c43f05e129234", + "NodeType": "CodeBlockNode", + "Inputs": [], + "Outputs": [ + { + "Id": "76ca5a3e85ae43af9d9f94e9cdbd3882", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "7607fef87aa24c11843c3a594ca9a1bb", + "Name": "", + "Description": "Value of expression at line 2", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "548ca39f61ea41e69dcf4a2f43bd8c00", + "Name": "", + "Description": "Value of expression at line 3", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "1;\n2;\n3;" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "5e31e45a7785465682393a69a9add69c", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "e54be5b096cc48c29e41e3201bd7ab4d", + "Name": "curve", + "Description": "Autodesk.DesignScript.Geometry.Curve", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "9e98f206943f4b8c84a3d35b8393cb52", + "Name": "Curve", + "Description": "A new Curve with the opposite direction", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Curve.Reverse", + "Replication": "Auto", + "Description": "Reverse the direction of the curve\n\nCurve.Reverse ( ): Curve" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "51ae28ba70fc4145a18e8f354986af4e", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "d072bbf9356d43a4a2ea80ed86fe4d67", + "Name": "values", + "Description": "A List of values\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "a2931c4e166248a79e796a2b35686986", + "Name": "json", + "Description": "A JSON string where primitive types (e.g. double, int, boolean), Lists, and Dictionary's will be turned into the associated JSON type.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Data.StringifyJSON@var[]..[]", + "Replication": "Auto", + "Description": "Stringify converts an arbitrary value or a list of arbitrary values to JSON. Replication can be used to apply the operation over a list, producing a list of JSON strings.\n\nData.StringifyJSON (values: var[]..[]): string" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "fd92058d1ac44d7e86180c45f1427b93", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "bc1f9e0308e1482784386c61e5065355", + "Name": "values", + "Description": "A List of values\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "433dfe0c113f4901824a0062ca6b8b26", + "Name": "json", + "Description": "A JSON string where primitive types (e.g. double, int, boolean), Lists, and Dictionary's will be turned into the associated JSON type.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Data.StringifyJSON@var[]..[]", + "Replication": "Auto", + "Description": "Stringify converts an arbitrary value or a list of arbitrary values to JSON. Replication can be used to apply the operation over a list, producing a list of JSON strings.\n\nData.StringifyJSON (values: var[]..[]): string" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "e3b9997a47a94bb4b5ba56c0ec016d81", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "b9bbffa6ae4e4ab780c9f1e8c6b0bac2", + "Name": "json", + "Description": "A JSON string\n\nstring", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "f59cd63f8f6b4fc08e8219fc87ace6a4", + "Name": "result", + "Description": "The result type depends on the content of the input string. The result type can be a primitive value (e.g. string, boolean, double), a List, or a Dictionary.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Data.ParseJSON@string", + "Replication": "Auto", + "Description": "Parse converts an arbitrary JSON string to a value. It is the opposite of JSON.Stringify.\n\nData.ParseJSON (json: string): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "d83c66bc817040049e7750a3e55beaac", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "cb7eecaaad4d424c9ad7aab08f1aa777", + "Name": "geometry", + "Description": "Autodesk.DesignScript.Geometry.Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "5d4dce7568ef4042ad37e1cef9f05ea5", + "Name": "other", + "Description": "Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "8d10d4981e4b46899750780c94970cfe", + "Name": "bool", + "Description": "bool", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Geometry.IsAlmostEqualTo@Autodesk.DesignScript.Geometry.Geometry", + "Replication": "Auto", + "Description": "Check if the two objects have the same representational geometry or numerical values\n\nGeometry.IsAlmostEqualTo (other: Geometry): bool" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "b9e44817e2c346d9a9ee9dc2022081b4", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "d5d90ab6dcd24632840929a03f141ed8", + "Name": "json", + "Description": "A JSON string\n\nstring", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "23b8f7b3fe2e4168abec7207922cf007", + "Name": "result", + "Description": "The result type depends on the content of the input string. The result type can be a primitive value (e.g. string, boolean, double), a List, or a Dictionary.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Data.ParseJSON@string", + "Replication": "Auto", + "Description": "Parse converts an arbitrary JSON string to a value. It is the opposite of JSON.Stringify.\n\nData.ParseJSON (json: string): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "d5d14ae365784b0da4f9b6771a836410", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "efeb2facdaf947b3849b60673c6fe3f3", + "Name": "geometry", + "Description": "Autodesk.DesignScript.Geometry.Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "02a5e271620e49619c338fc8ce221f73", + "Name": "other", + "Description": "Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "d8c7e93f8bf84845b7ba4d48c2d7a58a", + "Name": "bool", + "Description": "bool", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Geometry.IsAlmostEqualTo@Autodesk.DesignScript.Geometry.Geometry", + "Replication": "Auto", + "Description": "Check if the two objects have the same representational geometry or numerical values\n\nGeometry.IsAlmostEqualTo (other: Geometry): bool" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "44537e24956448408f4505fd9b5b321d", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "6cbe53992af84b5b989abbb165be55d7", + "Name": "geometry", + "Description": "Autodesk.DesignScript.Geometry.Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "a385d56b562a4e89adb3c5f842fff1c4", + "Name": "mirrorPlane", + "Description": "Plane", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "8de2b3a1b7d443248e94692d191eeb61", + "Name": "Geometry", + "Description": "Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Geometry.Mirror@Autodesk.DesignScript.Geometry.Plane", + "Replication": "Auto", + "Description": "Mirror the object across the input Plane\n\nGeometry.Mirror (mirrorPlane: Plane): Geometry" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "5d23d6b37a6a4c06aeb06b102d56cd80", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "2f9f654ae7b64d86b5e0b198735977e2", + "Name": "json", + "Description": "A JSON string\n\nstring", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "ea2c305133c3429288a4abde849a9f46", + "Name": "result", + "Description": "The result type depends on the content of the input string. The result type can be a primitive value (e.g. string, boolean, double), a List, or a Dictionary.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Data.ParseJSON@string", + "Replication": "Auto", + "Description": "Parse converts an arbitrary JSON string to a value. It is the opposite of JSON.Stringify.\n\nData.ParseJSON (json: string): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "652e9e4486144099894be3f08c4c9fc7", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "978ea0270541414b93e10c13c45a205c", + "Name": "geometry", + "Description": "Autodesk.DesignScript.Geometry.Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "bef2aa2a15f841e8b9e4f44946f0b775", + "Name": "other", + "Description": "Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "b926fde5a53e4bdba0c91a73cbc30bda", + "Name": "bool", + "Description": "bool", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Geometry.IsAlmostEqualTo@Autodesk.DesignScript.Geometry.Geometry", + "Replication": "Auto", + "Description": "Check if the two objects have the same representational geometry or numerical values\n\nGeometry.IsAlmostEqualTo (other: Geometry): bool" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "2128226609374012ba137370eef163c0", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "a03f0b1c37da4672a97168e190ffec44", + "Name": "values", + "Description": "A List of values\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "fe3129b9b2ef4fcdbefc47422fb130ff", + "Name": "json", + "Description": "A JSON string where primitive types (e.g. double, int, boolean), Lists, and Dictionary's will be turned into the associated JSON type.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Data.StringifyJSON@var[]..[]", + "Replication": "Auto", + "Description": "Stringify converts an arbitrary value or a list of arbitrary values to JSON. Replication can be used to apply the operation over a list, producing a list of JSON strings.\n\nData.StringifyJSON (values: var[]..[]): string" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "aba327c8f3e64c8b89773c70b956a411", + "NodeType": "FunctionNode", + "Inputs": [], + "Outputs": [ + { + "Id": "d21c720649fd4b38b134483cd7085798", + "Name": "Plane", + "Description": "Plane at XZ plane of world", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Plane.XZ", + "Replication": "Auto", + "Description": "Creates a plane in the world XZ plane\n\nPlane.XZ ( ): Plane" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "39f74f08d4da46e19947b5b4efdc7ebc", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "b1fa0dfaa4a74b48acbb0398244b6fab", + "Name": "x", + "Description": "double\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "aa2baa7214094ce3b567f0ff8b63a26a", + "Name": "y", + "Description": "double\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "851147abf68e4c1a91622b0718f15f95", + "Name": "z", + "Description": "double\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "d556f7bd440a428fbf2e2ccad628e42b", + "Name": "CoordinateSystem", + "Description": "CoordinateSystem", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.CoordinateSystem.ByOrigin@double,double,double", + "Replication": "Auto", + "Description": "Create a CoordinateSystem with origin at X, Y, and Z locations, with X and Y Axes set as WCS X and Y Axes.\n\nCoordinateSystem.ByOrigin (x: double = 0, y: double = 0, z: double = 0): CoordinateSystem" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "2f5f7b038ad0434f8f5e2d7583647884", + "NodeType": "CodeBlockNode", + "Inputs": [], + "Outputs": [ + { + "Id": "819519ec72e645d6876a3a82328ad5b9", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "5c577a758bd44d0c912bdb3ecfa30e3d", + "Name": "", + "Description": "Value of expression at line 2", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "06bb1c0a2251425b931ed190b79854c3", + "Name": "", + "Description": "Value of expression at line 3", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "2;\n3;\n4;" + }, + { + "ConcreteType": "CoreNodeModels.Input.DoubleInput, CoreNodeModels", + "NumberType": "Double", + "Id": "5305f3a3c4a74409ada1cd4b2c8c637c", + "NodeType": "NumberInputNode", + "Inputs": [], + "Outputs": [ + { + "Id": "aba63dc0daa24691844cc6a21bafc279", + "Name": "", + "Description": "Double", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Creates a number", + "InputValue": 2.3 + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "5426756b840a4e33b5be7e398229d31e", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "55ba3d474af045d588e874fcdc515347", + "Name": "geometry", + "Description": "Autodesk.DesignScript.Geometry.Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "08b17dc418e841848efb19b78eea4e7e", + "Name": "fromCoordinateSystem", + "Description": "CoordinateSystem", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "5f13c4fbfa93457ba1a341c9392fb43d", + "Name": "contextCoordinateSystem", + "Description": "CoordinateSystem", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "50c47544083149688e7769a070c102a0", + "Name": "Geometry", + "Description": "Transformed Geometry.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Geometry.Transform@Autodesk.DesignScript.Geometry.CoordinateSystem,Autodesk.DesignScript.Geometry.CoordinateSystem", + "Replication": "Auto", + "Description": "Transforms this geometry from source CoordinateSystem to a new context CoordinateSystem.\n\nGeometry.Transform (fromCoordinateSystem: CoordinateSystem, contextCoordinateSystem: CoordinateSystem): Geometry" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "d10c902d9b4a4f4e84e9560d9cbabb0a", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "3ef72af8e94d4eccbb8192199b8d314a", + "Name": "x", + "Description": "double\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "777a98cc7f174d23b27666eb84459362", + "Name": "y", + "Description": "double\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "cf5806834ef843a2a3f22694a19f18d4", + "Name": "CoordinateSystem", + "Description": "CoordinateSystem", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.CoordinateSystem.ByOrigin@double,double", + "Replication": "Auto", + "Description": "Create a CoordinateSystem with origin at X and Y locations, with X and Y Axes set as WCS X and Y Axes. Z defaults to 0.\n\nCoordinateSystem.ByOrigin (x: double = 0, y: double = 0): CoordinateSystem" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "c1e541db95974aeda31430fa457a133f", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "07acc12ab6a0455ca316d47aac043803", + "Name": "geometry", + "Description": "Autodesk.DesignScript.Geometry.Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "ae09f16d60f74bf8babe30b0d68b74a8", + "Name": "other", + "Description": "Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "d1b33003e6ce46e0b98c6458338ec371", + "Name": "bool", + "Description": "bool", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Geometry.IsAlmostEqualTo@Autodesk.DesignScript.Geometry.Geometry", + "Replication": "Auto", + "Description": "Check if the two objects have the same representational geometry or numerical values\n\nGeometry.IsAlmostEqualTo (other: Geometry): bool" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "fd86e90a6192439f910add86e306e539", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "bda57ff58ce54a3d85241a9e78d49aec", + "Name": "x", + "Description": "X coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "57a37f530f22454ab4dd226aff3cb3db", + "Name": "y", + "Description": "Y coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "46d94df1d6c544f2b97b03708e83cf26", + "Name": "z", + "Description": "Z coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "973159024a7345d28047582361db693b", + "Name": "Point", + "Description": "Point created by coordinates", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Point.ByCoordinates@double,double,double", + "Replication": "Auto", + "Description": "Form a Point given 3 cartesian coordinates\n\nPoint.ByCoordinates (x: double = 0, y: double = 0, z: double = 0): Point" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "80090cbf4a77468e9e4e51f2c4d2d834", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "7c1dcee9bf704335bd16314179cd22a0", + "Name": "coordinateSystem", + "Description": "Autodesk.DesignScript.Geometry.CoordinateSystem", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "9dd3ebb84a4f49cdb58e9368dd8772ab", + "Name": "amount", + "Description": "Amount to scale\n\ndouble\nDefault value : 1", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "9a0b813c68904c5780a59d4a8e7f8ee3", + "Name": "CoordinateSystem", + "Description": "Scaled coordinate system", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.CoordinateSystem.Scale@double", + "Replication": "Auto", + "Description": "Scale uniformly around the origin\n\nCoordinateSystem.Scale (amount: double = 1): CoordinateSystem" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "ee5a076196134dd98083bf29254665ba", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "26602e05829644d39632523406c92930", + "Name": "json", + "Description": "A JSON string\n\nstring", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "6722814d2f3b49f4b9c5f94f40c2b474", + "Name": "result", + "Description": "The result type depends on the content of the input string. The result type can be a primitive value (e.g. string, boolean, double), a List, or a Dictionary.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Data.ParseJSON@string", + "Replication": "Auto", + "Description": "Parse converts an arbitrary JSON string to a value. It is the opposite of JSON.Stringify.\n\nData.ParseJSON (json: string): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "9f4d64765eb5494182ef83d6fdd8537b", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "67e2394959264bcc91c6e9955678fd9a", + "Name": "values", + "Description": "A List of values\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "ab0daa6d62dc4861b31513042c79b0fb", + "Name": "json", + "Description": "A JSON string where primitive types (e.g. double, int, boolean), Lists, and Dictionary's will be turned into the associated JSON type.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Data.StringifyJSON@var[]..[]", + "Replication": "Auto", + "Description": "Stringify converts an arbitrary value or a list of arbitrary values to JSON. Replication can be used to apply the operation over a list, producing a list of JSON strings.\n\nData.StringifyJSON (values: var[]..[]): string" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "4286ccb49fd945a1abb7d0ed7b97bb8b", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "4b94b50838654cb6b349164ccaae61e5", + "Name": "coordinateSystem", + "Description": "Autodesk.DesignScript.Geometry.CoordinateSystem", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "6f7dcea2cd3a48e89952317458d56a2b", + "Name": "origin", + "Description": "Origin point\n\nPoint", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "76c330173a1c490fa7bb944ca1befb4c", + "Name": "axis", + "Description": "Vector axis for rotation\n\nVector", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "4c22fcc4dca04d27a58f6bccc4e30871", + "Name": "degrees", + "Description": "Degrees to rotate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "5a90c42eb01b44a78cf045a06f2fed44", + "Name": "CoordinateSystem", + "Description": "Rotated coordinate system", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.CoordinateSystem.Rotate@Autodesk.DesignScript.Geometry.Point,Autodesk.DesignScript.Geometry.Vector,double", + "Replication": "Auto", + "Description": "Rotates an object around an origin and an axis by a specified degree\n\nCoordinateSystem.Rotate (origin: Point, axis: Vector, degrees: double = 0): CoordinateSystem" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "0083c6c2ac164251a608513055f3237a", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "9928c90f25b64ccabd790730eec33138", + "Name": "x", + "Description": "X coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "d4253aed95524a0d9a37dfe88ae72e65", + "Name": "y", + "Description": "Y coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "97c2735c8ef24a1eb2c4747b257b8fb8", + "Name": "z", + "Description": "Z coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "8aba6d80693f400a95ced7ef66885210", + "Name": "Vector", + "Description": "Vector created by coordinates", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Vector.ByCoordinates@double,double,double", + "Replication": "Auto", + "Description": "Form a Vector by 3 Euclidean coordinates\n\nVector.ByCoordinates (x: double = 0, y: double = 0, z: double = 0): Vector" + }, + { + "ConcreteType": "CoreNodeModels.Input.DoubleInput, CoreNodeModels", + "NumberType": "Double", + "Id": "c4dc5b65228148398133fb05e045c2b6", + "NodeType": "NumberInputNode", + "Inputs": [], + "Outputs": [ + { + "Id": "4f1161c1d6ce4663bfb5eeb6c5746821", + "Name": "", + "Description": "Double", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Creates a number", + "InputValue": 24.0 + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "54d56712f1fa41948a5262aaf4eba5ba", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "478882655f074195b868c842d6bbf08a", + "Name": "list", + "Description": "List to be checked on whether all items are true.\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "8a50856149154ceeaa08c3002d36059c", + "Name": "bool", + "Description": "True if all items from list are true, false if one or more items is not true", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.List.AllTrue@var[]..[]", + "Replication": "Auto", + "Description": "Determines if all items in the given list is a boolean and has a true value.\n\nList.AllTrue (list: var[]..[]): bool" + }, + { + "ConcreteType": "CoreNodeModels.CreateList, CoreNodeModels", + "VariableInputPorts": true, + "Id": "b618dae7b0504c15bece43a4093e585c", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "071936b0c6e746709f2b699e3b030c57", + "Name": "item0", + "Description": "Item Index #0", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "c1b88af399ec4b5c9a886e3694da3efb", + "Name": "item1", + "Description": "Item Index #1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "309d5a9e567a45fa9e15bb013fe1af47", + "Name": "item2", + "Description": "Item Index #2", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "f63e61d53a6c441faf312cae22e731c9", + "Name": "item3", + "Description": "Item Index #3", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "f10301693b934e158a6f175d49c857d2", + "Name": "item4", + "Description": "Item Index #4", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "b63f0153313a4d86832d66b6aa3ff1ae", + "Name": "list", + "Description": "A list (type: var[]..[])", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Makes a new list from the given inputs" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "3cd3ff76fcdc494c8ac1e017b98144d7", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "adc74e7dfb5a40c991b79720b20824e6", + "Name": "x", + "Description": "X coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "6211d65676434b6a9c303e560e727634", + "Name": "y", + "Description": "Y coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "3a26436b6dec4a2b8022805252df3f41", + "Name": "z", + "Description": "Z coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "b69fa2f29168481c8dec0371e3dd27c1", + "Name": "Point", + "Description": "Point created by coordinates", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Point.ByCoordinates@double,double,double", + "Replication": "Auto", + "Description": "Form a Point given 3 cartesian coordinates\n\nPoint.ByCoordinates (x: double = 0, y: double = 0, z: double = 0): Point" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "11d1e83471b246689ddef76021f669a4", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "556941c2f1f14c22bbe713170e0f7e38", + "Name": "centerPoint", + "Description": "Center point of circle\n\nPoint\nDefault value : Autodesk.DesignScript.Geometry.Point.ByCoordinates(0, 0, 0)", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "a65ad24507684c23a70198d60fbba5db", + "Name": "radius", + "Description": "Radius\n\ndouble\nDefault value : 1", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "ccba570fcaa74ec6ad8a4c216db5a9e8", + "Name": "normal", + "Description": "Normal direction vector\n\nVector\nDefault value : Autodesk.DesignScript.Geometry.Vector.ByCoordinates(0, 0, 1)", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "06068a51b17e45e0bd25f2e444712fba", + "Name": "Circle", + "Description": "Circle created with center point radius and normal", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Circle.ByCenterPointRadiusNormal@Autodesk.DesignScript.Geometry.Point,double,Autodesk.DesignScript.Geometry.Vector", + "Replication": "Auto", + "Description": "Creates a Circle with specified center Point, radius, and normal direction.\n\nCircle.ByCenterPointRadiusNormal (centerPoint: Point = Autodesk.DesignScript.Geometry.Point.ByCoordinates(0, 0, 0), radius: double = 1, normal: Vector = Autodesk.DesignScript.Geometry.Vector.ByCoordinates(0, 0, 1)): Circle" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "f898f47eab024cbb9506ae4b8938091f", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "78973a541cfb416a9d36c4987743cbdd", + "Name": "object", + "Description": "Object to query type\n\nvar", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "6cd6f36e56e8442c8f81f88415860c03", + "Name": "string", + "Description": "Type of object.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Object.Type@var", + "Replication": "Auto", + "Description": "Returns the type of object represented as string.\n\nObject.Type (object: var): string" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "807a067af2ee4972af1fee9fcf9d5e3d", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "1c24e4a35724485c909d59c66fb1135d", + "Name": "x", + "Description": "Basic type object to compare (e.g. bool, int, double, string, etc.)\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "eed6c3e547d94e828dfba67d0c70fa9d", + "Name": "y", + "Description": "Basic type object to compare (e.g. bool, int, double, string, etc.)\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "8addaed584254423aebb5635d0d1a3d7", + "Name": "bool", + "Description": "Result of equality check", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "==@var[]..[],var[]..[]", + "Replication": "Auto", + "Description": "Compares if x and y are equal\n\n== (x: var[]..[], y: var[]..[]): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "beb5fa60df7f4e35a5f51d3faa4f91fa", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "eac01079917b4dffb1ccfce24cbb1a08", + "Name": "object", + "Description": "Object to query type\n\nvar", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "7d3a805802484357a390288f80e8328c", + "Name": "string", + "Description": "Type of object.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Object.Type@var", + "Replication": "Auto", + "Description": "Returns the type of object represented as string.\n\nObject.Type (object: var): string" + } + ], + "Connectors": [ + { + "Start": "9f3921b70d2f4a369b7e9de62b053c0d", + "End": "ccba570fcaa74ec6ad8a4c216db5a9e8", + "Id": "48dcdb19041a477b923f3a4eeb328c58", + "IsHidden": "False" + }, + { + "Start": "76ca5a3e85ae43af9d9f94e9cdbd3882", + "End": "fe21ad7954d54a95bbe0953f5a7b6530", + "Id": "9766c59d83c14ff8b20031005403f8bb", + "IsHidden": "False" + }, + { + "Start": "76ca5a3e85ae43af9d9f94e9cdbd3882", + "End": "adc74e7dfb5a40c991b79720b20824e6", + "Id": "11d796c39b624eea848c10c2d01742f3", + "IsHidden": "False" + }, + { + "Start": "7607fef87aa24c11843c3a594ca9a1bb", + "End": "f3d235d612814f56914c487feb526899", + "Id": "8dcdffe220054e40876068f74a32efe7", + "IsHidden": "False" + }, + { + "Start": "7607fef87aa24c11843c3a594ca9a1bb", + "End": "6211d65676434b6a9c303e560e727634", + "Id": "fb181e7be7ed41de8884b3063652f37b", + "IsHidden": "False" + }, + { + "Start": "548ca39f61ea41e69dcf4a2f43bd8c00", + "End": "865a3ba3c8224a02a72b388f8770d273", + "Id": "a2d2a633f4d5436e8acffb155fcda41f", + "IsHidden": "False" + }, + { + "Start": "548ca39f61ea41e69dcf4a2f43bd8c00", + "End": "3a26436b6dec4a2b8022805252df3f41", + "Id": "2e2e1372956e437ca23f83ac1102e738", + "IsHidden": "False" + }, + { + "Start": "548ca39f61ea41e69dcf4a2f43bd8c00", + "End": "a65ad24507684c23a70198d60fbba5db", + "Id": "ae47fe2854934624bbba1e8ebcd89fab", + "IsHidden": "False" + }, + { + "Start": "9e98f206943f4b8c84a3d35b8393cb52", + "End": "bc1f9e0308e1482784386c61e5065355", + "Id": "cbd540eda9a84c90a54ef6fc3c421c16", + "IsHidden": "False" + }, + { + "Start": "9e98f206943f4b8c84a3d35b8393cb52", + "End": "efeb2facdaf947b3849b60673c6fe3f3", + "Id": "462596824fb0426a82a46f731fa59523", + "IsHidden": "False" + }, + { + "Start": "a2931c4e166248a79e796a2b35686986", + "End": "b9bbffa6ae4e4ab780c9f1e8c6b0bac2", + "Id": "dd559924ec1c4c4e85f6d3469534192b", + "IsHidden": "False" + }, + { + "Start": "433dfe0c113f4901824a0062ca6b8b26", + "End": "d5d90ab6dcd24632840929a03f141ed8", + "Id": "8638223bc5bb40dca61155700aa80714", + "IsHidden": "False" + }, + { + "Start": "f59cd63f8f6b4fc08e8219fc87ace6a4", + "End": "5d4dce7568ef4042ad37e1cef9f05ea5", + "Id": "8ec752ce50ac4fde8cd441c35e051e89", + "IsHidden": "False" + }, + { + "Start": "f59cd63f8f6b4fc08e8219fc87ace6a4", + "End": "78973a541cfb416a9d36c4987743cbdd", + "Id": "0142248e10a4455eb742977de4f89e57", + "IsHidden": "False" + }, + { + "Start": "8d10d4981e4b46899750780c94970cfe", + "End": "071936b0c6e746709f2b699e3b030c57", + "Id": "1adb85605fb44b549cb060bcfdbd9211", + "IsHidden": "False" + }, + { + "Start": "23b8f7b3fe2e4168abec7207922cf007", + "End": "02a5e271620e49619c338fc8ce221f73", + "Id": "d0c5a687b8df43f7b66b2db88b80f999", + "IsHidden": "False" + }, + { + "Start": "d8c7e93f8bf84845b7ba4d48c2d7a58a", + "End": "c1b88af399ec4b5c9a886e3694da3efb", + "Id": "6c82b64a87684be6aabbabe7aff96664", + "IsHidden": "False" + }, + { + "Start": "8de2b3a1b7d443248e94692d191eeb61", + "End": "a03f0b1c37da4672a97168e190ffec44", + "Id": "b69a2815a89440d39f336fb8d4b9a279", + "IsHidden": "False" + }, + { + "Start": "8de2b3a1b7d443248e94692d191eeb61", + "End": "978ea0270541414b93e10c13c45a205c", + "Id": "76422a7c203341b9b0abbcc3bb98aec5", + "IsHidden": "False" + }, + { + "Start": "ea2c305133c3429288a4abde849a9f46", + "End": "bef2aa2a15f841e8b9e4f44946f0b775", + "Id": "101cf3821bf34354973fb18147fe2cc7", + "IsHidden": "False" + }, + { + "Start": "b926fde5a53e4bdba0c91a73cbc30bda", + "End": "309d5a9e567a45fa9e15bb013fe1af47", + "Id": "3f0008c127ca490db78e1b017cb29f76", + "IsHidden": "False" + }, + { + "Start": "fe3129b9b2ef4fcdbefc47422fb130ff", + "End": "2f9f654ae7b64d86b5e0b198735977e2", + "Id": "8f0b53c6a4a44c179b039e558af33251", + "IsHidden": "False" + }, + { + "Start": "d21c720649fd4b38b134483cd7085798", + "End": "a385d56b562a4e89adb3c5f842fff1c4", + "Id": "3994b045f5b24dfdaf2d88e612a213af", + "IsHidden": "False" + }, + { + "Start": "d556f7bd440a428fbf2e2ccad628e42b", + "End": "4b94b50838654cb6b349164ccaae61e5", + "Id": "4af4a6dc30b043639beefd83039623ed", + "IsHidden": "False" + }, + { + "Start": "819519ec72e645d6876a3a82328ad5b9", + "End": "b1fa0dfaa4a74b48acbb0398244b6fab", + "Id": "b60db3d4d7464e7a8bd63c89422bf6a6", + "IsHidden": "False" + }, + { + "Start": "819519ec72e645d6876a3a82328ad5b9", + "End": "9928c90f25b64ccabd790730eec33138", + "Id": "34fefaf110694375ac3d3d2558f6e66f", + "IsHidden": "False" + }, + { + "Start": "5c577a758bd44d0c912bdb3ecfa30e3d", + "End": "aa2baa7214094ce3b567f0ff8b63a26a", + "Id": "c2b6171f7bb34ebd905505d8dc72f234", + "IsHidden": "False" + }, + { + "Start": "06bb1c0a2251425b931ed190b79854c3", + "End": "851147abf68e4c1a91622b0718f15f95", + "Id": "0b1ec8674ce34c97b11c80615e29baeb", + "IsHidden": "False" + }, + { + "Start": "06bb1c0a2251425b931ed190b79854c3", + "End": "d4253aed95524a0d9a37dfe88ae72e65", + "Id": "019f01e9914e44efbc04b758559df10c", + "IsHidden": "False" + }, + { + "Start": "aba63dc0daa24691844cc6a21bafc279", + "End": "9dd3ebb84a4f49cdb58e9368dd8772ab", + "Id": "afab3fa0b2f64bc98d161c8a6e568caa", + "IsHidden": "False" + }, + { + "Start": "50c47544083149688e7769a070c102a0", + "End": "67e2394959264bcc91c6e9955678fd9a", + "Id": "cc9e3bc36c7c41418755caeaa51718eb", + "IsHidden": "False" + }, + { + "Start": "50c47544083149688e7769a070c102a0", + "End": "07acc12ab6a0455ca316d47aac043803", + "Id": "387d5c9ef1ff426aaa94300030e3e85e", + "IsHidden": "False" + }, + { + "Start": "cf5806834ef843a2a3f22694a19f18d4", + "End": "08b17dc418e841848efb19b78eea4e7e", + "Id": "fa87fe70843d4de4bb9e99ff40ec0a21", + "IsHidden": "False" + }, + { + "Start": "d1b33003e6ce46e0b98c6458338ec371", + "End": "f63e61d53a6c441faf312cae22e731c9", + "Id": "e6ad4e0d55264c82abff7bddca444cc4", + "IsHidden": "False" + }, + { + "Start": "973159024a7345d28047582361db693b", + "End": "6f7dcea2cd3a48e89952317458d56a2b", + "Id": "07c3fdd8d1cc48b0921494b4488ce9ba", + "IsHidden": "False" + }, + { + "Start": "9a0b813c68904c5780a59d4a8e7f8ee3", + "End": "5f13c4fbfa93457ba1a341c9392fb43d", + "Id": "68bc9d47e2084647a79e9b2d3d8b48de", + "IsHidden": "False" + }, + { + "Start": "6722814d2f3b49f4b9c5f94f40c2b474", + "End": "ae09f16d60f74bf8babe30b0d68b74a8", + "Id": "abf5f62e4c374b9895bdb798eb076904", + "IsHidden": "False" + }, + { + "Start": "ab0daa6d62dc4861b31513042c79b0fb", + "End": "26602e05829644d39632523406c92930", + "Id": "bfa86a403c4d48418b86e9c3ae55a178", + "IsHidden": "False" + }, + { + "Start": "5a90c42eb01b44a78cf045a06f2fed44", + "End": "7c1dcee9bf704335bd16314179cd22a0", + "Id": "6563b4f7c2b343af830c3799ae8eb922", + "IsHidden": "False" + }, + { + "Start": "8aba6d80693f400a95ced7ef66885210", + "End": "76c330173a1c490fa7bb944ca1befb4c", + "Id": "f48c37bd21f74b8f83638999127fac18", + "IsHidden": "False" + }, + { + "Start": "4f1161c1d6ce4663bfb5eeb6c5746821", + "End": "4c22fcc4dca04d27a58f6bccc4e30871", + "Id": "3d24dc11c7d24d3586eb2f82f95bc7fc", + "IsHidden": "False" + }, + { + "Start": "b63f0153313a4d86832d66b6aa3ff1ae", + "End": "478882655f074195b868c842d6bbf08a", + "Id": "ffb3511a215044698468bdffe4d9b2c9", + "IsHidden": "False" + }, + { + "Start": "b69fa2f29168481c8dec0371e3dd27c1", + "End": "556941c2f1f14c22bbe713170e0f7e38", + "Id": "c46c063fa071472a8e83dc0859d6d653", + "IsHidden": "False" + }, + { + "Start": "06068a51b17e45e0bd25f2e444712fba", + "End": "d072bbf9356d43a4a2ea80ed86fe4d67", + "Id": "af44015c07f7450ab34fd25a24877c7a", + "IsHidden": "False" + }, + { + "Start": "06068a51b17e45e0bd25f2e444712fba", + "End": "55ba3d474af045d588e874fcdc515347", + "Id": "fc1471eff86048078b9b40c03332b198", + "IsHidden": "False" + }, + { + "Start": "06068a51b17e45e0bd25f2e444712fba", + "End": "6cbe53992af84b5b989abbb165be55d7", + "Id": "f5268d5ed84f44deb16d2751d1702aac", + "IsHidden": "False" + }, + { + "Start": "06068a51b17e45e0bd25f2e444712fba", + "End": "cb7eecaaad4d424c9ad7aab08f1aa777", + "Id": "70627167048a4391a0c00e56c5a2fefe", + "IsHidden": "False" + }, + { + "Start": "06068a51b17e45e0bd25f2e444712fba", + "End": "e54be5b096cc48c29e41e3201bd7ab4d", + "Id": "c105c02d3aea435f94bff7c305a7b1ee", + "IsHidden": "False" + }, + { + "Start": "06068a51b17e45e0bd25f2e444712fba", + "End": "eac01079917b4dffb1ccfce24cbb1a08", + "Id": "75d88da6d3d64a9381cff57fd890c9b8", + "IsHidden": "False" + }, + { + "Start": "6cd6f36e56e8442c8f81f88415860c03", + "End": "eed6c3e547d94e828dfba67d0c70fa9d", + "Id": "3cdaf38cfccc4b699457297e00046d6f", + "IsHidden": "False" + }, + { + "Start": "8addaed584254423aebb5635d0d1a3d7", + "End": "f10301693b934e158a6f175d49c857d2", + "Id": "7d93e1075f624fd4a2e92f30f01bc445", + "IsHidden": "False" + }, + { + "Start": "7d3a805802484357a390288f80e8328c", + "End": "1c24e4a35724485c909d59c66fb1135d", + "Id": "37df874fa7524494ae12f832f20bdb2d", + "IsHidden": "False" + } + ], + "Dependencies": [], + "NodeLibraryDependencies": [], + "Thumbnail": "", + "GraphDocumentationURL": null, + "ExtensionWorkspaceData": [ + { + "ExtensionGuid": "28992e1d-abb9-417f-8b1b-05e053bee670", + "Name": "Properties", + "Version": "3.0", + "Data": {} + } + ], + "Author": "None provided", + "Linting": { + "activeLinter": "None", + "activeLinterId": "7b75fb44-43fd-4631-a878-29f4d5d8399a", + "warningCount": 0, + "errorCount": 0 + }, + "Bindings": [], + "View": { + "Dynamo": { + "ScaleFactor": 1.0, + "HasRunWithoutCrash": true, + "IsVisibleInDynamoLibrary": true, + "Version": "3.0.0.5795", + "RunType": "Automatic", + "RunPeriod": "1000" + }, + "Camera": { + "Name": "_Background Preview", + "EyeX": -8.53628921508789, + "EyeY": 11.50893783569336, + "EyeZ": 10.083175659179688, + "LookX": 12.469983100891113, + "LookY": -7.515811920166016, + "LookZ": -12.716328620910645, + "UpX": 0.12759387493133545, + "UpY": 0.9832549691200256, + "UpZ": -0.13011401891708374 + }, + "ConnectorPins": [], + "NodeViews": [ + { + "Id": "a7e4f7ff62b240f4abab4348721417ec", + "Name": "Vector.ByCoordinates", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2559.724194920583, + "Y": 2320.1421308816025 + }, + { + "Id": "24a55d8e2d80482db12c43f05e129234", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2305.724194920583, + "Y": 2328.7971308816022 + }, + { + "Id": "5e31e45a7785465682393a69a9add69c", + "Name": "Curve.Reverse", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 3007.5683636520444, + "Y": 3226.789378632063 + }, + { + "Id": "51ae28ba70fc4145a18e8f354986af4e", + "Name": "Data.StringifyJSON", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 3536.4430698321557, + "Y": 2585.823585409682 + }, + { + "Id": "fd92058d1ac44d7e86180c45f1427b93", + "Name": "Data.StringifyJSON", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 3462.309130118958, + "Y": 3446.3658439539613 + }, + { + "Id": "e3b9997a47a94bb4b5ba56c0ec016d81", + "Name": "Data.ParseJSON", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 3846.429183664209, + "Y": 2586.8891689652746 + }, + { + "Id": "d83c66bc817040049e7750a3e55beaac", + "Name": "Geometry.IsAlmostEqualTo", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 4116.622064250312, + "Y": 2273.3243969688365 + }, + { + "Id": "b9e44817e2c346d9a9ee9dc2022081b4", + "Name": "Data.ParseJSON", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 3787.288138883224, + "Y": 3446.8455854514596 + }, + { + "Id": "d5d14ae365784b0da4f9b6771a836410", + "Name": "Geometry.IsAlmostEqualTo", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 4169.894083234846, + "Y": 3095.7107016970212 + }, + { + "Id": "44537e24956448408f4505fd9b5b321d", + "Name": "Geometry.Mirror", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 3197.882558109642, + "Y": 3833.3328009382003 + }, + { + "Id": "5d23d6b37a6a4c06aeb06b102d56cd80", + "Name": "Data.ParseJSON", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 3931.2114888420797, + "Y": 4143.464904370941 + }, + { + "Id": "652e9e4486144099894be3f08c4c9fc7", + "Name": "Geometry.IsAlmostEqualTo", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 4206.181893202794, + "Y": 4002.451655566858 + }, + { + "Id": "2128226609374012ba137370eef163c0", + "Name": "Data.StringifyJSON", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 3639.48762183935, + "Y": 4143.325889007114 + }, + { + "Id": "aba327c8f3e64c8b89773c70b956a411", + "Name": "Plane.XZ", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2957.334610191485, + "Y": 3918.082532655486 + }, + { + "Id": "39f74f08d4da46e19947b5b4efdc7ebc", + "Name": "CoordinateSystem.ByOrigin", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1899.3941077445652, + "Y": 4852.256206753418 + }, + { + "Id": "2f5f7b038ad0434f8f5e2d7583647884", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1645.3941077445652, + "Y": 4887.393706753419 + }, + { + "Id": "5305f3a3c4a74409ada1cd4b2c8c637c", + "Name": "Number", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2325.262412747047, + "Y": 4963.256206753418 + }, + { + "Id": "5426756b840a4e33b5be7e398229d31e", + "Name": "Geometry.Transform", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 3228.760642568371, + "Y": 4796.679654753092 + }, + { + "Id": "d10c902d9b4a4f4e84e9560d9cbabb0a", + "Name": "CoordinateSystem.ByOrigin", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2861.285569355701, + "Y": 4832.097957257383 + }, + { + "Id": "c1e541db95974aeda31430fa457a133f", + "Name": "Geometry.IsAlmostEqualTo", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 4203.499041824544, + "Y": 4913.303679120174 + }, + { + "Id": "fd86e90a6192439f910add86e306e539", + "Name": "Point.ByCoordinates", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1899.3941077445652, + "Y": 5064.256206753418 + }, + { + "Id": "80090cbf4a77468e9e4e51f2c4d2d834", + "Name": "CoordinateSystem.Scale", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2805.1812546807714, + "Y": 5024.256206753418 + }, + { + "Id": "ee5a076196134dd98083bf29254665ba", + "Name": "Data.ParseJSON", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 3928.5286374638304, + "Y": 5054.316927924256 + }, + { + "Id": "9f4d64765eb5494182ef83d6fdd8537b", + "Name": "Data.StringifyJSON", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 3636.804770461101, + "Y": 5054.17791256043 + }, + { + "Id": "4286ccb49fd945a1abb7d0ed7b97bb8b", + "Name": "CoordinateSystem.Rotate", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2277.894107744565, + "Y": 5119.256206753418 + }, + { + "Id": "0083c6c2ac164251a608513055f3237a", + "Name": "Vector.ByCoordinates", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1899.3941077445652, + "Y": 5276.256206753418 + }, + { + "Id": "c4dc5b65228148398133fb05e045c2b6", + "Name": "Number", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1899.3941077445652, + "Y": 5488.256206753418 + }, + { + "Id": "54d56712f1fa41948a5262aaf4eba5ba", + "Name": "List.AllTrue", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 5474.3085565570545, + "Y": 3249.870619446731 + }, + { + "Id": "b618dae7b0504c15bece43a4093e585c", + "Name": "List Create", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 5122.848007195213, + "Y": 3256.544925506534 + }, + { + "Id": "3cd3ff76fcdc494c8ac1e017b98144d7", + "Name": "Point.ByCoordinates", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2559.724194920583, + "Y": 2108.1421308816025 + }, + { + "Id": "11d1e83471b246689ddef76021f669a4", + "Name": "Circle.ByCenterPointRadiusNormal", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2932.87606651063, + "Y": 2212.3026294139695 + }, + { + "Id": "f898f47eab024cbb9506ae4b8938091f", + "Name": "Object.Type", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 4124.72645895323, + "Y": 2806.2105610148865 + }, + { + "Id": "807a067af2ee4972af1fee9fcf9d5e3d", + "Name": "==", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 4432.778097234743, + "Y": 2724.318196091084 + }, + { + "Id": "beb5fa60df7f4e35a5f51d3faa4f91fa", + "Name": "Object.Type", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 4128.305780631063, + "Y": 2660.9598090068343 + } + ], + "Annotations": [ + { + "Id": "f6bddfc2102c40d6bbe541e088945deb", + "Title": "All True", + "DescriptionText": "", + "IsExpanded": true, + "WidthAdjustment": 0.0, + "HeightAdjustment": 0.0, + "Nodes": [ + "54d56712f1fa41948a5262aaf4eba5ba" + ], + "HasNestedGroups": false, + "Left": 5464.3085565570545, + "Top": 3176.870619446731, + "Width": 196.0, + "Height": 205.0, + "FontSize": 36.0, + "GroupStyleId": "00000000-0000-0000-0000-000000000000", + "InitialTop": 3249.870619446731, + "InitialHeight": 145.0, + "TextblockHeight": 63.0, + "Background": "#FFC1D676" + } + ], + "X": -1935.152768262881, + "Y": -923.7065727320851, + "Zoom": 0.4462733441767718 + } +} \ No newline at end of file diff --git a/test/core/json/Curve_EllipseArc_JSONParsing.dyn b/test/core/json/Curve_EllipseArc_JSONParsing.dyn new file mode 100644 index 00000000000..5aa321b4441 --- /dev/null +++ b/test/core/json/Curve_EllipseArc_JSONParsing.dyn @@ -0,0 +1,7249 @@ +{ + "Uuid": "a1c557d8-cab7-436c-9d6e-0408d11defdf", + "IsCustomNode": false, + "Description": null, + "Name": "Curve_EllipseArc_JSONParsing", + "ElementResolver": { + "ResolutionMap": { + "DSCore.Object": { + "Key": "DSCore.Object", + "Value": "DSCoreNodes.dll" + }, + "DSCore.Data": { + "Key": "DSCore.Data", + "Value": "DSCoreNodes.dll" + }, + "DesignScript.Builtin.Dictionary": { + "Key": "DesignScript.Builtin.Dictionary", + "Value": "DesignScriptBuiltin.dll" + }, + "Color": { + "Key": "DSCore.Color", + "Value": "DSCoreNodes.dll" + }, + "DSCore.DateTime.Now": { + "Key": "DSCore.DateTime", + "Value": "DSCoreNodes.dll" + }, + "DSCore.DateTime": { + "Key": "DSCore.DateTime", + "Value": "DSCoreNodes.dll" + }, + "Point": { + "Key": "Autodesk.DesignScript.Geometry.Point", + "Value": "ProtoGeometry.dll" + } + } + }, + "Inputs": [], + "Outputs": [], + "Nodes": [ + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "8d066dd6cc4b4e8ea8dc3581560b3c0f", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "4f9d2203be724ba3bbeffcda83d21985", + "Name": "curve", + "Description": "Autodesk.DesignScript.Geometry.Curve", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "3cdc499edc524603bf3829742519df2c", + "Name": "Curve", + "Description": "A new Curve with the opposite direction", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Curve.Reverse", + "Replication": "Auto", + "Description": "Reverse the direction of the curve\n\nCurve.Reverse ( ): Curve" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "f37cca417d17411188f6167addcc66f2", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "41923b126eea4e77903d3d2f1d9a01ae", + "Name": "values", + "Description": "A List of values\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "6f35afc341be469da46a9b7ff1e9aa7b", + "Name": "json", + "Description": "A JSON string where primitive types (e.g. double, int, boolean), Lists, and Dictionary's will be turned into the associated JSON type.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Data.StringifyJSON@var[]..[]", + "Replication": "Auto", + "Description": "Stringify converts an arbitrary value or a list of arbitrary values to JSON. Replication can be used to apply the operation over a list, producing a list of JSON strings.\n\nData.StringifyJSON (values: var[]..[]): string" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "828b68c83d8f4510a0bbe62ecb75ccc1", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "d5d96b1af10a49dcb2255cf95cfa4e20", + "Name": "values", + "Description": "A List of values\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "723818401a2f43a4bbf1048646e6f836", + "Name": "json", + "Description": "A JSON string where primitive types (e.g. double, int, boolean), Lists, and Dictionary's will be turned into the associated JSON type.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Data.StringifyJSON@var[]..[]", + "Replication": "Auto", + "Description": "Stringify converts an arbitrary value or a list of arbitrary values to JSON. Replication can be used to apply the operation over a list, producing a list of JSON strings.\n\nData.StringifyJSON (values: var[]..[]): string" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "699356af163a46089ddc3b068dec67c4", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "225bbe0ceaa94e82ad5f692cc59a1fa7", + "Name": "json", + "Description": "A JSON string\n\nstring", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "93e26e8d4e8247b09a708b225f0033fd", + "Name": "result", + "Description": "The result type depends on the content of the input string. The result type can be a primitive value (e.g. string, boolean, double), a List, or a Dictionary.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Data.ParseJSON@string", + "Replication": "Auto", + "Description": "Parse converts an arbitrary JSON string to a value. It is the opposite of JSON.Stringify.\n\nData.ParseJSON (json: string): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "701f4d77dcaa4e829a99f3e572dcfd94", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "5904b834e7584417ac1ea1a48e1843b5", + "Name": "geometry", + "Description": "Autodesk.DesignScript.Geometry.Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "4da8256fb0a043db9c38b41aa2439a40", + "Name": "other", + "Description": "Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "deaf3349d6044976b45cf0baaf8a321e", + "Name": "bool", + "Description": "bool", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Geometry.IsAlmostEqualTo@Autodesk.DesignScript.Geometry.Geometry", + "Replication": "Auto", + "Description": "Check if the two objects have the same representational geometry or numerical values\n\nGeometry.IsAlmostEqualTo (other: Geometry): bool" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "03764e6e1e914792a3919df9eb174e74", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "b85fbed4a9a84552879e7e03b114b2cb", + "Name": "json", + "Description": "A JSON string\n\nstring", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "6f1c34be8cb1444288cd8fab70297e30", + "Name": "result", + "Description": "The result type depends on the content of the input string. The result type can be a primitive value (e.g. string, boolean, double), a List, or a Dictionary.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Data.ParseJSON@string", + "Replication": "Auto", + "Description": "Parse converts an arbitrary JSON string to a value. It is the opposite of JSON.Stringify.\n\nData.ParseJSON (json: string): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "f1d69076c8834b589e2ccf4d09755c69", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "697ee7c557c041a7a158b3259dd00c2f", + "Name": "geometry", + "Description": "Autodesk.DesignScript.Geometry.Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "005acdcca81741e58b2af6d2c15d81ed", + "Name": "other", + "Description": "Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "43ab655529ca4ba3a9322ab25fbd701c", + "Name": "bool", + "Description": "bool", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Geometry.IsAlmostEqualTo@Autodesk.DesignScript.Geometry.Geometry", + "Replication": "Auto", + "Description": "Check if the two objects have the same representational geometry or numerical values\n\nGeometry.IsAlmostEqualTo (other: Geometry): bool" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "159dbed1f78342fda432521494ad2be3", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "c716658925b244cfa7cce179731bc2cd", + "Name": "geometry", + "Description": "Autodesk.DesignScript.Geometry.Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "d50136acf2734e8887e855adf6c189ee", + "Name": "mirrorPlane", + "Description": "Plane", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "61b9eeef3fc3451fb4d1804ab2d6ab17", + "Name": "Geometry", + "Description": "Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Geometry.Mirror@Autodesk.DesignScript.Geometry.Plane", + "Replication": "Auto", + "Description": "Mirror the object across the input Plane\n\nGeometry.Mirror (mirrorPlane: Plane): Geometry" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "a75376bd94aa436b9248c771143aff5f", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "515773696a9e4231827e27c5a15e9080", + "Name": "json", + "Description": "A JSON string\n\nstring", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "271a71ae930b4fe08c3c546a47cc92b0", + "Name": "result", + "Description": "The result type depends on the content of the input string. The result type can be a primitive value (e.g. string, boolean, double), a List, or a Dictionary.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Data.ParseJSON@string", + "Replication": "Auto", + "Description": "Parse converts an arbitrary JSON string to a value. It is the opposite of JSON.Stringify.\n\nData.ParseJSON (json: string): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "8e4762573c69400482c6d0b3add079c7", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "fee8adc7eba34895a646c66a1fb9561a", + "Name": "geometry", + "Description": "Autodesk.DesignScript.Geometry.Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "73e1cc53283841a68d894dda0a36ec59", + "Name": "other", + "Description": "Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "0ab149ab1c78473596784500cecfa545", + "Name": "bool", + "Description": "bool", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Geometry.IsAlmostEqualTo@Autodesk.DesignScript.Geometry.Geometry", + "Replication": "Auto", + "Description": "Check if the two objects have the same representational geometry or numerical values\n\nGeometry.IsAlmostEqualTo (other: Geometry): bool" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "addffa1b58634b1494ae454aeccd88b8", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "7d3f0c00e9f244f1aa542aa3404f08cb", + "Name": "values", + "Description": "A List of values\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "363fadbbc0514d57b485d4e2375cfc48", + "Name": "json", + "Description": "A JSON string where primitive types (e.g. double, int, boolean), Lists, and Dictionary's will be turned into the associated JSON type.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Data.StringifyJSON@var[]..[]", + "Replication": "Auto", + "Description": "Stringify converts an arbitrary value or a list of arbitrary values to JSON. Replication can be used to apply the operation over a list, producing a list of JSON strings.\n\nData.StringifyJSON (values: var[]..[]): string" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "1ec8a5b068b64bbf82b52f9174172823", + "NodeType": "FunctionNode", + "Inputs": [], + "Outputs": [ + { + "Id": "ffc42edaf24046ec9e84efad31bf7846", + "Name": "Plane", + "Description": "Plane at XZ plane of world", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Plane.XZ", + "Replication": "Auto", + "Description": "Creates a plane in the world XZ plane\n\nPlane.XZ ( ): Plane" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "e7bccf12d86e4cafae8bdcbef8ce3fcc", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "6974edece7414291a9dc676360b83788", + "Name": "x", + "Description": "double\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "1be2dbe103114acabffebb6d90db0f88", + "Name": "y", + "Description": "double\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "eb3001620aae4ebd9f5aa86cf1415edc", + "Name": "z", + "Description": "double\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "f9c4e1d3257c44f790d41f8a54300ac4", + "Name": "CoordinateSystem", + "Description": "CoordinateSystem", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.CoordinateSystem.ByOrigin@double,double,double", + "Replication": "Auto", + "Description": "Create a CoordinateSystem with origin at X, Y, and Z locations, with X and Y Axes set as WCS X and Y Axes.\n\nCoordinateSystem.ByOrigin (x: double = 0, y: double = 0, z: double = 0): CoordinateSystem" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "5e2455a2cf384d2386c37655a5fb8986", + "NodeType": "CodeBlockNode", + "Inputs": [], + "Outputs": [ + { + "Id": "a044fe0e1d164302917752ba151d6b1e", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "9598ef5f58c4496dabda0936b468da1d", + "Name": "", + "Description": "Value of expression at line 2", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "f222c4eac87a4b57a2b677be8a722860", + "Name": "", + "Description": "Value of expression at line 3", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "2;\n3;\n4;" + }, + { + "ConcreteType": "CoreNodeModels.Input.DoubleInput, CoreNodeModels", + "NumberType": "Double", + "Id": "2e003ad9926545ee8d7f8f528128bf6d", + "NodeType": "NumberInputNode", + "Inputs": [], + "Outputs": [ + { + "Id": "410e5034114c46e08cadfe297bd62821", + "Name": "", + "Description": "Double", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Creates a number", + "InputValue": 2.3 + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "563db764863d4e0f8456bec0be91e51d", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "177cad52a1114eaa97099c2e06a8ce0b", + "Name": "geometry", + "Description": "Autodesk.DesignScript.Geometry.Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "26b5f80162dc4d6f8f46baad0c488228", + "Name": "fromCoordinateSystem", + "Description": "CoordinateSystem", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "4b0045b39824427fa2dd2628b2afc88b", + "Name": "contextCoordinateSystem", + "Description": "CoordinateSystem", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "2d8ab2a7d3db4f3cbc19c690cdf9be37", + "Name": "Geometry", + "Description": "Transformed Geometry.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Geometry.Transform@Autodesk.DesignScript.Geometry.CoordinateSystem,Autodesk.DesignScript.Geometry.CoordinateSystem", + "Replication": "Auto", + "Description": "Transforms this geometry from source CoordinateSystem to a new context CoordinateSystem.\n\nGeometry.Transform (fromCoordinateSystem: CoordinateSystem, contextCoordinateSystem: CoordinateSystem): Geometry" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "8861ce7f91624cc685d5e77f6846daf3", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "bce7ef588dca4396ab0b708777d50096", + "Name": "x", + "Description": "double\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "e65b13a3f66d4d9ea82f427c9c1bef1f", + "Name": "y", + "Description": "double\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "902986ab5f31487292fa838bfb475379", + "Name": "CoordinateSystem", + "Description": "CoordinateSystem", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.CoordinateSystem.ByOrigin@double,double", + "Replication": "Auto", + "Description": "Create a CoordinateSystem with origin at X and Y locations, with X and Y Axes set as WCS X and Y Axes. Z defaults to 0.\n\nCoordinateSystem.ByOrigin (x: double = 0, y: double = 0): CoordinateSystem" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "a9d3831fda544d828c96166dd6496e4d", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "ba688765f31b4864a169fef6adf5d8c5", + "Name": "geometry", + "Description": "Autodesk.DesignScript.Geometry.Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "41e08a162f0a47aca60868ba697f9fe5", + "Name": "other", + "Description": "Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "5e1eb66c513a4cc3a3bed125fd15c798", + "Name": "bool", + "Description": "bool", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Geometry.IsAlmostEqualTo@Autodesk.DesignScript.Geometry.Geometry", + "Replication": "Auto", + "Description": "Check if the two objects have the same representational geometry or numerical values\n\nGeometry.IsAlmostEqualTo (other: Geometry): bool" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "5207e08dc89441399926207237e2114a", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "012fc210a84b4f9e907ef23ef0064c2e", + "Name": "x", + "Description": "X coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "c398df34aff247949dd8c50c3871b578", + "Name": "y", + "Description": "Y coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "d0e5d21623e84d848409f7c1a397f409", + "Name": "z", + "Description": "Z coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "d96029d0558e4d0c8700e4514e4c964c", + "Name": "Point", + "Description": "Point created by coordinates", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Point.ByCoordinates@double,double,double", + "Replication": "Auto", + "Description": "Form a Point given 3 cartesian coordinates\n\nPoint.ByCoordinates (x: double = 0, y: double = 0, z: double = 0): Point" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "2d99d87f0e414a79b063d8c707cb7a77", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "5fff48aab6e1420bb15dbbc7dda8b2de", + "Name": "coordinateSystem", + "Description": "Autodesk.DesignScript.Geometry.CoordinateSystem", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "3180e5e9cb2b45828cfe6f4b9668d835", + "Name": "amount", + "Description": "Amount to scale\n\ndouble\nDefault value : 1", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "6edbe84fd8b04ab6908f6c0763cf6eab", + "Name": "CoordinateSystem", + "Description": "Scaled coordinate system", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.CoordinateSystem.Scale@double", + "Replication": "Auto", + "Description": "Scale uniformly around the origin\n\nCoordinateSystem.Scale (amount: double = 1): CoordinateSystem" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "497ff1404efc4ccc8b9470d18933512d", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "7f0676c7525143af9b49365cf5c17a76", + "Name": "json", + "Description": "A JSON string\n\nstring", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "1fb3eaff5502465d8f4f9ae45c5d7311", + "Name": "result", + "Description": "The result type depends on the content of the input string. The result type can be a primitive value (e.g. string, boolean, double), a List, or a Dictionary.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Data.ParseJSON@string", + "Replication": "Auto", + "Description": "Parse converts an arbitrary JSON string to a value. It is the opposite of JSON.Stringify.\n\nData.ParseJSON (json: string): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "c8b052c3f7ff41c699224fad46d60d6c", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "0ad1b43457c14db0aca3d6a9eec8538b", + "Name": "values", + "Description": "A List of values\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "7b7bb652f8cf4e03afeab1881a301fa3", + "Name": "json", + "Description": "A JSON string where primitive types (e.g. double, int, boolean), Lists, and Dictionary's will be turned into the associated JSON type.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Data.StringifyJSON@var[]..[]", + "Replication": "Auto", + "Description": "Stringify converts an arbitrary value or a list of arbitrary values to JSON. Replication can be used to apply the operation over a list, producing a list of JSON strings.\n\nData.StringifyJSON (values: var[]..[]): string" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "48c70fae9a334375b39ecab1258a9b1d", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "35c6f07190ea489a94d006707ea0b3b8", + "Name": "coordinateSystem", + "Description": "Autodesk.DesignScript.Geometry.CoordinateSystem", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "92ea43ae8c3f46eb876b9c7b16b17aec", + "Name": "origin", + "Description": "Origin point\n\nPoint", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "3a856fd0a98d4de38cd4339d223aa0b2", + "Name": "axis", + "Description": "Vector axis for rotation\n\nVector", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "bcdc65b33e1f47478bb92534f351b02e", + "Name": "degrees", + "Description": "Degrees to rotate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "3c33ce0c3ebb4ddf9e9d901c4621dc11", + "Name": "CoordinateSystem", + "Description": "Rotated coordinate system", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.CoordinateSystem.Rotate@Autodesk.DesignScript.Geometry.Point,Autodesk.DesignScript.Geometry.Vector,double", + "Replication": "Auto", + "Description": "Rotates an object around an origin and an axis by a specified degree\n\nCoordinateSystem.Rotate (origin: Point, axis: Vector, degrees: double = 0): CoordinateSystem" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "4d263f66316f4354b60efbbed880c736", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "f663e4efdc604fc9b91a2fae86cf34d2", + "Name": "x", + "Description": "X coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "6cf6a53e6bc94155a40d39cde362f4c0", + "Name": "y", + "Description": "Y coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "6d559107072e4a63a7af3eadd756e5f7", + "Name": "z", + "Description": "Z coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "7c546033af2345beaa6a96631b9363eb", + "Name": "Vector", + "Description": "Vector created by coordinates", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Vector.ByCoordinates@double,double,double", + "Replication": "Auto", + "Description": "Form a Vector by 3 Euclidean coordinates\n\nVector.ByCoordinates (x: double = 0, y: double = 0, z: double = 0): Vector" + }, + { + "ConcreteType": "CoreNodeModels.Input.DoubleInput, CoreNodeModels", + "NumberType": "Double", + "Id": "09ffbb6c715e4b7db22fb0d409875ecc", + "NodeType": "NumberInputNode", + "Inputs": [], + "Outputs": [ + { + "Id": "017239f951534bc69d5f10a6065bcf0f", + "Name": "", + "Description": "Double", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Creates a number", + "InputValue": 24.0 + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "a29aa179c7ae4069a6d9c6d2055ab845", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "455a06e21ba34f86968b6c000c2db38b", + "Name": "list", + "Description": "List to be checked on whether all items are true.\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "8404fe02121d49459533aa46524cb8d3", + "Name": "bool", + "Description": "True if all items from list are true, false if one or more items is not true", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.List.AllTrue@var[]..[]", + "Replication": "Auto", + "Description": "Determines if all items in the given list is a boolean and has a true value.\n\nList.AllTrue (list: var[]..[]): bool" + }, + { + "ConcreteType": "CoreNodeModels.CreateList, CoreNodeModels", + "VariableInputPorts": true, + "Id": "843b3eff62b54f40aa92b44527783938", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "9d74c52e5b304dae80ce660e689409a8", + "Name": "item0", + "Description": "Item Index #0", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "1f92e4bda35b4c9e9dc533295a8a43b1", + "Name": "item1", + "Description": "Item Index #1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "44a927ef0d78451fb4b14472e9374315", + "Name": "item2", + "Description": "Item Index #2", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "2da74c9f49194d99bab6fae5d8eba8a5", + "Name": "item3", + "Description": "Item Index #3", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "f758d1f18b554c8092d2c2029c53f321", + "Name": "list", + "Description": "A list (type: var[]..[])", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Makes a new list from the given inputs" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "d0cf8ef91da047aa8ef9cf09a02b8b8c", + "NodeType": "CodeBlockNode", + "Inputs": [], + "Outputs": [ + { + "Id": "49de85a228594f179642e35d37599229", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "7476854291b14ca58c70d1da28c8ecde", + "Name": "", + "Description": "Value of expression at line 2", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "e33a45a6291e4bf59ac867a7dc92ca14", + "Name": "", + "Description": "Value of expression at line 3", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "ddd9c4377a5d4e728e60856f70a04649", + "Name": "", + "Description": "Value of expression at line 4", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "2.4;\n4;\n35;\n120;" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSVarArgFunction, DynamoCore", + "FunctionSignature": "DSCore.List.Join@var[]..[]", + "FunctionType": "VariableArgument", + "Id": "b32960df47ee4ed7a81be7be4828751a", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "b9ac99f2346c4a41b2ce182913c61aa0", + "Name": "list0", + "Description": "Lists to join into one.\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "b3ba205aacc9401e8cf5d9ca0bd8489d", + "Name": "list1", + "Description": "var[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "e3de989b43594037a009dcaeee5f1028", + "Name": "list", + "Description": "Joined list.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Concatenates all given lists into a single list.\n\nList.Join (lists: var[]..[]): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "1d9f05f749c34102a42b07422810041b", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "75c66ca6c41d4714a10b3da4bd939cc9", + "Name": "list", + "Description": "List to flatten.\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "08ee4aa829a44f51878af3e666e23c89", + "Name": "amount", + "Description": "Layers of list nesting to remove (-1 will remove all list nestings)\n\nint\nDefault value : -1", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "3e4997bc247644aa9eb21c1a3bd75a18", + "Name": "list", + "Description": "Flattened list by amount", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.List.Flatten@var[]..[],int", + "Replication": "Auto", + "Description": "Flattens a nested list of lists by a certain amount.\n\nList.Flatten (list: var[]..[], amount: int = -1): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "6c1a320bcd89467ebd7d3012aeec509e", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "f9a1e7fb03aa43a5a2945c44f8bf3d3a", + "Name": "plane", + "Description": "Plane containing the ellipse arc\n\nPlane\nDefault value : Autodesk.DesignScript.Geometry.Plane.XY()", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "b3dac334702f4509ab17ae8d93942b73", + "Name": "xRadius", + "Description": "The radius of the EllipseArc in the X direction of the Plane\n\ndouble\nDefault value : 1", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "8b3e76b5a8a645faa2cf477e940623ad", + "Name": "yRadius", + "Description": "The radius of the EllipseArc in the Y direction of the Plane\n\ndouble\nDefault value : 1", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "42ee530840824e6ab65f4ae851a86d69", + "Name": "startAngle", + "Description": "The start angle of the arc as measured from the positive x-axis of the input plane\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "66347e262e634fa99e3b44737219ee16", + "Name": "sweepAngle", + "Description": "The angle to sweep from the start angle in degrees\n\ndouble\nDefault value : 180", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "f3463f27f176499288611a9720bd9f9e", + "Name": "EllipseArc", + "Description": "Ellipse arc created by plane radii and angles", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.EllipseArc.ByPlaneRadiiAngles@Autodesk.DesignScript.Geometry.Plane,double,double,double,double", + "Replication": "Auto", + "Description": "Create an EllipseArc in a plane with the given the radii along the X and Y axes and the angles to sweep through\n\nEllipseArc.ByPlaneRadiiAngles (plane: Plane = Autodesk.DesignScript.Geometry.Plane.XY(), xRadius: double = 1, yRadius: double = 1, startAngle: double = 0, sweepAngle: double = 180): EllipseArc" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "55bf402f19e542c986d4914c1075a9ad", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "f91e6871e7b04d2f80920bc466bc79fd", + "Name": "coordinateSystem", + "Description": "Autodesk.DesignScript.Geometry.CoordinateSystem", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "983b0d6a7ed8469fa8d02360d2ac36b7", + "Name": "Plane", + "Description": "Plane", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.CoordinateSystem.XYPlane", + "Replication": "Auto", + "Description": "Returns the Plane the X and Y axes lie in, with root at the origin.\n\nCoordinateSystem.XYPlane: Plane" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "6ef2f4fb29c7403a890cefd122aaa184", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "e7a879472d4942d49ece6a99e7df18a6", + "Name": "plane", + "Description": "Plane containing the ellipse arc\n\nPlane\nDefault value : Autodesk.DesignScript.Geometry.Plane.XY()", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "77090b94943c4616bb635e30e73e3d2a", + "Name": "xRadius", + "Description": "The radius of the EllipseArc in the X direction of the Plane\n\ndouble\nDefault value : 1", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "8c74a526226f4c4e8e4c19871073088d", + "Name": "yRadius", + "Description": "The radius of the EllipseArc in the Y direction of the Plane\n\ndouble\nDefault value : 1", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "fa5f2737a3aa4714ad7a573c11812970", + "Name": "startAngle", + "Description": "The start angle of the arc as measured from the positive x-axis of the input plane\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "657f3638cc3e494fbc7a89aef66b6f46", + "Name": "sweepAngle", + "Description": "The angle to sweep from the start angle in degrees\n\ndouble\nDefault value : 180", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "81440e84ddc143bcaaf0152ea465fd30", + "Name": "EllipseArc", + "Description": "Ellipse arc created by plane radii and angles", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.EllipseArc.ByPlaneRadiiAngles@Autodesk.DesignScript.Geometry.Plane,double,double,double,double", + "Replication": "Auto", + "Description": "Create an EllipseArc in a plane with the given the radii along the X and Y axes and the angles to sweep through\n\nEllipseArc.ByPlaneRadiiAngles (plane: Plane = Autodesk.DesignScript.Geometry.Plane.XY(), xRadius: double = 1, yRadius: double = 1, startAngle: double = 0, sweepAngle: double = 180): EllipseArc" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "5ce6da9a5d044956848d63d8fc3e7080", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "f3f71e38c4f34bea964bbf862dd10ffb", + "Name": "values", + "Description": "A List of values\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "6e43d792cf21450bae8ff9866ab9fe2b", + "Name": "json", + "Description": "A JSON string where primitive types (e.g. double, int, boolean), Lists, and Dictionary's will be turned into the associated JSON type.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Data.StringifyJSON@var[]..[]", + "Replication": "Auto", + "Description": "Stringify converts an arbitrary value or a list of arbitrary values to JSON. Replication can be used to apply the operation over a list, producing a list of JSON strings.\n\nData.StringifyJSON (values: var[]..[]): string" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "9f622e9a33a9446eabde6ca4ff301d55", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "916d1d4b9a3f491d91837af75c57d0fe", + "Name": "json", + "Description": "A JSON string\n\nstring", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "f50dcd6adc7e4e3aa6e14739756f5876", + "Name": "result", + "Description": "The result type depends on the content of the input string. The result type can be a primitive value (e.g. string, boolean, double), a List, or a Dictionary.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Data.ParseJSON@string", + "Replication": "Auto", + "Description": "Parse converts an arbitrary JSON string to a value. It is the opposite of JSON.Stringify.\n\nData.ParseJSON (json: string): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "09e8782df6e741b983af491ba6b73261", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "ceaa92f478dc426fbc4a6415b7fd464e", + "Name": "geometry", + "Description": "Autodesk.DesignScript.Geometry.Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "578c2d0f247f441c938a1f19afe81f56", + "Name": "other", + "Description": "Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "dcaed69bf7c54f4e8f75f45519170b79", + "Name": "bool", + "Description": "bool", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Geometry.IsAlmostEqualTo@Autodesk.DesignScript.Geometry.Geometry", + "Replication": "Auto", + "Description": "Check if the two objects have the same representational geometry or numerical values\n\nGeometry.IsAlmostEqualTo (other: Geometry): bool" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "b096d14188dd40bbb49cc9d02f0bde20", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "b20d2673e9d140069af510846894262f", + "Name": "json", + "Description": "A JSON string\n\nstring", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "c2e6b6f20e2a4b8aa4253abce30d039e", + "Name": "result", + "Description": "The result type depends on the content of the input string. The result type can be a primitive value (e.g. string, boolean, double), a List, or a Dictionary.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Data.ParseJSON@string", + "Replication": "Auto", + "Description": "Parse converts an arbitrary JSON string to a value. It is the opposite of JSON.Stringify.\n\nData.ParseJSON (json: string): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "f922dab6d5a74234860e435d3ccaff33", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "870d8131e4d049c9a81de279b794d477", + "Name": "values", + "Description": "A List of values\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "b4c13a2dd27c491aba75439e5afaa5e9", + "Name": "json", + "Description": "A JSON string where primitive types (e.g. double, int, boolean), Lists, and Dictionary's will be turned into the associated JSON type.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Data.StringifyJSON@var[]..[]", + "Replication": "Auto", + "Description": "Stringify converts an arbitrary value or a list of arbitrary values to JSON. Replication can be used to apply the operation over a list, producing a list of JSON strings.\n\nData.StringifyJSON (values: var[]..[]): string" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "2b9fc65d09234d2289ad650874a69856", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "8e1efb9e18ef4d659fcb965e11e2f5c7", + "Name": "geometry", + "Description": "Autodesk.DesignScript.Geometry.Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "9d0e4201d2154e44b629fe0711569495", + "Name": "other", + "Description": "Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "0634e79b708149d19dbd22eda9c96986", + "Name": "bool", + "Description": "bool", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Geometry.IsAlmostEqualTo@Autodesk.DesignScript.Geometry.Geometry", + "Replication": "Auto", + "Description": "Check if the two objects have the same representational geometry or numerical values\n\nGeometry.IsAlmostEqualTo (other: Geometry): bool" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "04f3ead9381142bf9afe1962e3e8f4dd", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "a933d5d9381443d29564fa0ee3ada9cf", + "Name": "curve", + "Description": "Autodesk.DesignScript.Geometry.Curve", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "bf998738359a4864af51f7e053e9816f", + "Name": "Curve", + "Description": "A new Curve with the opposite direction", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Curve.Reverse", + "Replication": "Auto", + "Description": "Reverse the direction of the curve\n\nCurve.Reverse ( ): Curve" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSVarArgFunction, DynamoCore", + "FunctionSignature": "DSCore.List.Join@var[]..[]", + "FunctionType": "VariableArgument", + "Id": "992a2c06f3ee45eea76007b624ecf9fc", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "f37e341d1a714e90b08605bfe2cbd1c8", + "Name": "list0", + "Description": "Lists to join into one.\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "6777d1c8c38b44adb529b7316fd090ba", + "Name": "list1", + "Description": "var[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "c395941fb79e4b5bb0ffdb8563d5e6ed", + "Name": "list2", + "Description": "var[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "b3de0fb26f1f464dac5c7c38e4459e81", + "Name": "list", + "Description": "Joined list.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Concatenates all given lists into a single list.\n\nList.Join (lists: var[]..[]): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "9da15c3e62594147bd62b462cdbf4aa5", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "5b06253a2b954d2b8fbec8eba3996571", + "Name": "ellipseArc", + "Description": "Autodesk.DesignScript.Geometry.EllipseArc", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "89353c4855294c15bf7547950bd9cd10", + "Name": "Vector", + "Description": "Vector", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.EllipseArc.MinorAxis", + "Replication": "Auto", + "Description": "The minor axis of the Ellipse. This is the shorter axis. The length of the Vector is the Minor radius.\n\nEllipseArc.MinorAxis: Vector" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "a5c34ff37de345509ee4daa145e87e19", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "d09cd09f266f4e718f07128c32552903", + "Name": "ellipseArc", + "Description": "Autodesk.DesignScript.Geometry.EllipseArc", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "b4dc14509b554e9ea9212a5eb4e4b757", + "Name": "Vector", + "Description": "Vector", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.EllipseArc.MajorAxis", + "Replication": "Auto", + "Description": "The major axis of the Ellipse. This is the longer axis. The length of the Vector is the Major radius.\n\nEllipseArc.MajorAxis: Vector" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "494ce10abae343279ddae6b0bbba5f50", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "2d6fe7900af54e05a2b7cc5ab406e6ad", + "Name": "ellipseArc", + "Description": "Autodesk.DesignScript.Geometry.EllipseArc", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "c577521b715b43708bde1dc18b912621", + "Name": "double", + "Description": "double", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.EllipseArc.SweepAngle", + "Replication": "Auto", + "Description": "Returns the sweep angle of the ellipse arc in degrees.\n\nEllipseArc.SweepAngle: double" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "78aead17842f4c668611226d67c330c5", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "917852d45bbf4c24aa072c66e26d39d9", + "Name": "ellipseArc", + "Description": "Autodesk.DesignScript.Geometry.EllipseArc", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "d90723f4f7334bdcb7be2ff961509775", + "Name": "double", + "Description": "double", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.EllipseArc.StartAngle", + "Replication": "Auto", + "Description": "The start angle in degrees\n\nEllipseArc.StartAngle: double" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "ef2ea86c01a641a59d4b7500c39bdbb8", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "13dc63d8455b48cf9871abb6b8155f35", + "Name": "ellipseArc", + "Description": "Autodesk.DesignScript.Geometry.EllipseArc", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "7fef74821eff4cb7971aeaa59034a975", + "Name": "Vector", + "Description": "Vector", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.EllipseArc.MinorAxis", + "Replication": "Auto", + "Description": "The minor axis of the Ellipse. This is the shorter axis. The length of the Vector is the Minor radius.\n\nEllipseArc.MinorAxis: Vector" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "f7fe03c5ceb24dd0b7b36a396f728c1f", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "a9f1d4fa986d45da969c360cd063704a", + "Name": "ellipseArc", + "Description": "Autodesk.DesignScript.Geometry.EllipseArc", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "dd01314a54e74088a9bae54606340fd0", + "Name": "Vector", + "Description": "Vector", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.EllipseArc.MajorAxis", + "Replication": "Auto", + "Description": "The major axis of the Ellipse. This is the longer axis. The length of the Vector is the Major radius.\n\nEllipseArc.MajorAxis: Vector" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "2073480ce5804a56bddb0f1a24acd69a", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "7da1474faa8c408dbfbf4cd8bd142731", + "Name": "ellipseArc", + "Description": "Autodesk.DesignScript.Geometry.EllipseArc", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "80f572464adc4553b769513551278660", + "Name": "double", + "Description": "double", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.EllipseArc.StartAngle", + "Replication": "Auto", + "Description": "The start angle in degrees\n\nEllipseArc.StartAngle: double" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "696013a3085846b8b794bac4dab62a13", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "49dbe2c9af804ca0bda82f487d4c0830", + "Name": "ellipseArc", + "Description": "Autodesk.DesignScript.Geometry.EllipseArc", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "b19f939348f24f35b216565c5529ed04", + "Name": "double", + "Description": "double", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.EllipseArc.SweepAngle", + "Replication": "Auto", + "Description": "Returns the sweep angle of the ellipse arc in degrees.\n\nEllipseArc.SweepAngle: double" + }, + { + "ConcreteType": "CoreNodeModels.Equals, CoreNodeModels", + "Id": "032a5f5c6a69415aa3016d270bbc534c", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "9774f95868914d9d83df87bcb8eec799", + "Name": "x", + "Description": "Integer or double value", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "9f16ef786c404cfb96635728fb23a4a0", + "Name": "y", + "Description": "Integer or double value", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "be92680e40054ca5afeb15263b9dcfdc", + "Name": "tolerance", + "Description": "Tolerance permitted for equality check\r\nDefault value: 1E-05", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "1357b27129f7475dbbb9bf2d4ca92b99", + "Name": "bool", + "Description": "Result of equality check", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Auto", + "Description": "Returns True if x and y are equal given a certain tolerance" + }, + { + "ConcreteType": "CoreNodeModels.Watch, CoreNodeModels", + "WatchWidth": 420.0, + "WatchHeight": 38.0, + "Id": "f7ebbfba6c1140869e031366ea777364", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "fafadc6c684d4b39ac37b6e0b388aed6", + "Name": "", + "Description": "Node to show output from", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "282ec3273ef0464fa54733cbedc424e8", + "Name": "", + "Description": "Node output", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Visualizes a node's output" + }, + { + "ConcreteType": "CoreNodeModels.Watch, CoreNodeModels", + "WatchWidth": 420.0, + "WatchHeight": 38.0, + "Id": "2c0c071c800c4fd7a0f57ade01a9d306", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "775de7cb2c6943b4942100f38c756b04", + "Name": "", + "Description": "Node to show output from", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "6d5a90f5836048f2aa50569c79bb8664", + "Name": "", + "Description": "Node output", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Visualizes a node's output" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "6152e81e7b0a485aa86a64d39c79adbd", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "5f5475ecd99146668c8de25d60675284", + "Name": "list", + "Description": "List to be checked on whether all items are true.\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "cf1aed1fbdb94040a386c9e5f8ab43f1", + "Name": "bool", + "Description": "True if all items from list are true, false if one or more items is not true", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.List.AllTrue@var[]..[]", + "Replication": "Auto", + "Description": "Determines if all items in the given list is a boolean and has a true value.\n\nList.AllTrue (list: var[]..[]): bool" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSVarArgFunction, DynamoCore", + "FunctionSignature": "DSCore.List.Join@var[]..[]", + "FunctionType": "VariableArgument", + "Id": "e9ed2457c2654f66a6befab35c5d9eec", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "e97f6f9cd55c4a369432832983a860f5", + "Name": "list0", + "Description": "Lists to join into one.\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "220cef8f46464e1399988094fd3e0602", + "Name": "list1", + "Description": "var[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "5c900f954c1d4b2d8853a4cb3847c5f1", + "Name": "list2", + "Description": "var[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "185391cd20a04ead953e9e9f1ddca79e", + "Name": "list", + "Description": "Joined list.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Concatenates all given lists into a single list.\n\nList.Join (lists: var[]..[]): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "3b099612e2484cf1aa6b2abb9924895c", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "64397c2e50cd446e99c622a5213ab4ae", + "Name": "vector", + "Description": "Autodesk.DesignScript.Geometry.Vector", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "f38afc6a5a394d7898fcc1d95b56c519", + "Name": "otherVector", + "Description": "Other vector\n\nVector", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "c2d5bbbd5c8845c6b1fc6c3d770ff297", + "Name": "bool", + "Description": "Returns True if the vectors are almost equal; false otherwise.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Vector.IsAlmostEqualTo@Autodesk.DesignScript.Geometry.Vector", + "Replication": "Auto", + "Description": "Determine whether two vectors are almost equal. A tolerance value of 1e-5 given to handle precision issues.\n\nVector.IsAlmostEqualTo (otherVector: Vector): bool" + }, + { + "ConcreteType": "CoreNodeModels.Equals, CoreNodeModels", + "Id": "63ba465577864b89ab824a1a3988f2ec", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "ccd78ed4e4f741ed9be7eb0d65467b43", + "Name": "x", + "Description": "Integer or double value", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "e19369a06b6c4e7dbb7f65c78f3d646b", + "Name": "y", + "Description": "Integer or double value", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "9a033d6cf3ee4f8d8e0836a187ecf789", + "Name": "tolerance", + "Description": "Tolerance permitted for equality check\r\nDefault value: 1E-05", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "9fcf267fccb040c8bdbb37469f3ee409", + "Name": "bool", + "Description": "Result of equality check", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Auto", + "Description": "Returns True if x and y are equal given a certain tolerance" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "f4591f5d41d64b87a545cb5d1c24a0db", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "ad9f520b2ea944e48c96c22865d29251", + "Name": "geometry", + "Description": "Autodesk.DesignScript.Geometry.Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "74a3513e5b2e44f9abf405d1144b0a77", + "Name": "other", + "Description": "Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "0672efaf56c44d1dae170d1b0cb36f05", + "Name": "bool", + "Description": "bool", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Geometry.IsAlmostEqualTo@Autodesk.DesignScript.Geometry.Geometry", + "Replication": "Auto", + "Description": "Check if the two objects have the same representational geometry or numerical values\n\nGeometry.IsAlmostEqualTo (other: Geometry): bool" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "e40758455ac94353b048327dafa50eae", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "6e855b6618c54f87b312e563eb042a9b", + "Name": "curve", + "Description": "Autodesk.DesignScript.Geometry.Curve", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "d88225f4c5514471846599f96c0e0b22", + "Name": "Point", + "Description": "Point", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Curve.StartPoint", + "Replication": "Auto", + "Description": "Get the start Point along the Curve\n\nCurve.StartPoint: Point" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSVarArgFunction, DynamoCore", + "FunctionSignature": "DSCore.List.Join@var[]..[]", + "FunctionType": "VariableArgument", + "Id": "10535f3cbb164760a7d746438a125a8c", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "d93e3d3351364ef3920e80cb8cd07547", + "Name": "list0", + "Description": "Lists to join into one.\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "9a444516c2f04ae1ac191f655eef1d3e", + "Name": "list1", + "Description": "var[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "c22ebdd6e54143e8aa074a5494f97277", + "Name": "list", + "Description": "Joined list.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Concatenates all given lists into a single list.\n\nList.Join (lists: var[]..[]): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "78f03c5b17f64c138a60d425621e5e43", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "030673f6816b4e88b9cbc9d0e25528c1", + "Name": "curve", + "Description": "Autodesk.DesignScript.Geometry.Curve", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "2c85e44fffd6489aa7ac335b19362d4a", + "Name": "Point", + "Description": "Point", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Curve.EndPoint", + "Replication": "Auto", + "Description": "Get the end Point along the Curve\n\nCurve.EndPoint: Point" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "c8225366add848909844f4217905ae72", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "e27df428400441faa2160c961c1aa8be", + "Name": "curve", + "Description": "Autodesk.DesignScript.Geometry.Curve", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "59edcc912cef4ffda81bb63999b9e681", + "Name": "Vector", + "Description": "Vector", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Curve.Normal", + "Replication": "Auto", + "Description": "The normal to the plane the curve lies in. Only valid for planar curves.\n\nCurve.Normal: Vector" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSVarArgFunction, DynamoCore", + "FunctionSignature": "DSCore.List.Join@var[]..[]", + "FunctionType": "VariableArgument", + "Id": "8b9ebca2ac3d40539d6fe1f7e1236dd0", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "4ae4d7be0aa049d18bdeb6558232b6ca", + "Name": "list0", + "Description": "Lists to join into one.\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "496899350fd24d23965cda8ffcf53267", + "Name": "list1", + "Description": "var[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "1652c79e8e5a4aa48437b96e90231172", + "Name": "list", + "Description": "Joined list.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Concatenates all given lists into a single list.\n\nList.Join (lists: var[]..[]): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "957a223a5af64e08a26a07a69ca290fe", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "7c2f4ccfcd4e4b018ff9aa9974c63fd1", + "Name": "curve", + "Description": "Autodesk.DesignScript.Geometry.Curve", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "6b4e5c65839a42ca96be09c835c8cdc7", + "Name": "Vector", + "Description": "Vector", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Curve.Normal", + "Replication": "Auto", + "Description": "The normal to the plane the curve lies in. Only valid for planar curves.\n\nCurve.Normal: Vector" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "e4d106cd36bc4b28960445edb986d255", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "2c4b8d19f7cb46b3b1a730d24c79bfe5", + "Name": "curve", + "Description": "Autodesk.DesignScript.Geometry.Curve", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "aa13c233e53e44ce90c4170665b88704", + "Name": "Point", + "Description": "Point", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Curve.EndPoint", + "Replication": "Auto", + "Description": "Get the end Point along the Curve\n\nCurve.EndPoint: Point" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "18ebfdaf7f6047d6b6e7bf61c4a1b33d", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "9c032609e69044a79a4b69787745e800", + "Name": "curve", + "Description": "Autodesk.DesignScript.Geometry.Curve", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "8a0b81914781456faf07d293fa694794", + "Name": "Point", + "Description": "Point", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Curve.StartPoint", + "Replication": "Auto", + "Description": "Get the start Point along the Curve\n\nCurve.StartPoint: Point" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSVarArgFunction, DynamoCore", + "FunctionSignature": "DSCore.List.Join@var[]..[]", + "FunctionType": "VariableArgument", + "Id": "cb0f1185810d4fc190278708fc569ed1", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "d54336cc41c54fe0875c8b6ee6e54a24", + "Name": "list0", + "Description": "Lists to join into one.\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "354bf8725ec042b4bfb7012e2cba961a", + "Name": "list1", + "Description": "var[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "828d097f160d4ce4ae4b2b548d8a11d1", + "Name": "list2", + "Description": "var[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "e79da8a794dd4652a6c646defd1cbaf1", + "Name": "list", + "Description": "Joined list.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Concatenates all given lists into a single list.\n\nList.Join (lists: var[]..[]): var[]..[]" + }, + { + "ConcreteType": "CoreNodeModels.Watch, CoreNodeModels", + "WatchWidth": 420.0, + "WatchHeight": 38.0, + "Id": "23cf931405174b989b27a73120b22053", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "f412301259bf445aad0592e541c2046b", + "Name": "", + "Description": "Node to show output from", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "0ebcb9e30cbf4fb8959d476fb6aff0b0", + "Name": "", + "Description": "Node output", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Visualizes a node's output" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "9a44eaede3c446cf9af7431e8c20835a", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "c88fbeea1c7943cb9879b5adf292af0d", + "Name": "ellipseArc", + "Description": "Autodesk.DesignScript.Geometry.EllipseArc", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "f19c7cdf5ec749bd86d02477e817ecb4", + "Name": "Vector", + "Description": "Vector", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.EllipseArc.MinorAxis", + "Replication": "Auto", + "Description": "The minor axis of the Ellipse. This is the shorter axis. The length of the Vector is the Minor radius.\n\nEllipseArc.MinorAxis: Vector" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "3ced2b548c2e44dc8a67f7d477db74d7", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "cfea9fd631ea477884cfd9a315670e78", + "Name": "ellipseArc", + "Description": "Autodesk.DesignScript.Geometry.EllipseArc", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "c6abfc2d858e44269c96387d169deb77", + "Name": "Vector", + "Description": "Vector", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.EllipseArc.MajorAxis", + "Replication": "Auto", + "Description": "The major axis of the Ellipse. This is the longer axis. The length of the Vector is the Major radius.\n\nEllipseArc.MajorAxis: Vector" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "dc29fbf60c1e4f0aa37ef74a19605176", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "11fc699ce8f8455f8b1aecb2ad2f87bb", + "Name": "ellipseArc", + "Description": "Autodesk.DesignScript.Geometry.EllipseArc", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "b026d6b11c404f0cb5bab3df4b3b5f6e", + "Name": "double", + "Description": "double", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.EllipseArc.StartAngle", + "Replication": "Auto", + "Description": "The start angle in degrees\n\nEllipseArc.StartAngle: double" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "53cc5f58c97643f7a3214696835d89cd", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "19bb47a87fc8497bb7e802407ef8348e", + "Name": "curve", + "Description": "Autodesk.DesignScript.Geometry.Curve", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "40d7a094c08f4da09797006cc92b5f3a", + "Name": "Point", + "Description": "Point", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Curve.EndPoint", + "Replication": "Auto", + "Description": "Get the end Point along the Curve\n\nCurve.EndPoint: Point" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "38d5e8bb90244cc09befb5611ed0750d", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "9f21fff4b16b4e6d8dac7c8ae6a45ac0", + "Name": "curve", + "Description": "Autodesk.DesignScript.Geometry.Curve", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "53376034b2374b84baea64c33c779f58", + "Name": "Point", + "Description": "Point", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Curve.StartPoint", + "Replication": "Auto", + "Description": "Get the start Point along the Curve\n\nCurve.StartPoint: Point" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSVarArgFunction, DynamoCore", + "FunctionSignature": "DSCore.List.Join@var[]..[]", + "FunctionType": "VariableArgument", + "Id": "e111936fc9864137a97bca3d3559746b", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "36701f033be549a5aa893c62760a51e4", + "Name": "list0", + "Description": "Lists to join into one.\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "3ea4654985f64e3f9fc9260bb18c2a98", + "Name": "list1", + "Description": "var[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "053b2631634844b58dd778ee0761b27e", + "Name": "list2", + "Description": "var[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "3cdb5298462c46cdaab608d2c66b788c", + "Name": "list", + "Description": "Joined list.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Concatenates all given lists into a single list.\n\nList.Join (lists: var[]..[]): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "6e9e1c5ad87540ff8b70751403328e14", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "a841f07b24904f74ae1681fde86a7ef2", + "Name": "ellipseArc", + "Description": "Autodesk.DesignScript.Geometry.EllipseArc", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "4bbd9b5aedc84f7080b5199cfff59327", + "Name": "Vector", + "Description": "Vector", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.EllipseArc.MinorAxis", + "Replication": "Auto", + "Description": "The minor axis of the Ellipse. This is the shorter axis. The length of the Vector is the Minor radius.\n\nEllipseArc.MinorAxis: Vector" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "061a601e48e64715bf00e17c4b801729", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "0f8e3caae88b4424ac0ad86e2e25cb6b", + "Name": "ellipseArc", + "Description": "Autodesk.DesignScript.Geometry.EllipseArc", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "deaeb29dff6e46e3a8b81b1e7a9b792d", + "Name": "Vector", + "Description": "Vector", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.EllipseArc.MajorAxis", + "Replication": "Auto", + "Description": "The major axis of the Ellipse. This is the longer axis. The length of the Vector is the Major radius.\n\nEllipseArc.MajorAxis: Vector" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "0736c2e6e0234deebc2e3c357e7a863d", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "0f03147075434884aca235b2135cc560", + "Name": "ellipseArc", + "Description": "Autodesk.DesignScript.Geometry.EllipseArc", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "80c4925068d24ede85bd3b4d8e842942", + "Name": "double", + "Description": "double", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.EllipseArc.SweepAngle", + "Replication": "Auto", + "Description": "Returns the sweep angle of the ellipse arc in degrees.\n\nEllipseArc.SweepAngle: double" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "f41f740083054098b437f506277f0548", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "090bbc200e4844f8b49460ab0d2cc7f8", + "Name": "ellipseArc", + "Description": "Autodesk.DesignScript.Geometry.EllipseArc", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "f5407de54e3f4c7cb8acee8ad285b98b", + "Name": "double", + "Description": "double", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.EllipseArc.StartAngle", + "Replication": "Auto", + "Description": "The start angle in degrees\n\nEllipseArc.StartAngle: double" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "c2c32450f71b430aa5a0d597b535ad9f", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "47365272425142f9afab84d14c52af49", + "Name": "ellipseArc", + "Description": "Autodesk.DesignScript.Geometry.EllipseArc", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "b6eab5624e90445e801e391886881e68", + "Name": "double", + "Description": "double", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.EllipseArc.SweepAngle", + "Replication": "Auto", + "Description": "Returns the sweep angle of the ellipse arc in degrees.\n\nEllipseArc.SweepAngle: double" + }, + { + "ConcreteType": "CoreNodeModels.Equals, CoreNodeModels", + "Id": "b4bbc256b877481aaf5c85fffcdff36a", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "29853194c1ac417394c8bb3437b00c79", + "Name": "x", + "Description": "Integer or double value", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "508279f93a0240328ad0b0ef1a2a2b6c", + "Name": "y", + "Description": "Integer or double value", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "09e687f8df4143d2ac10e5c79813995b", + "Name": "tolerance", + "Description": "Tolerance permitted for equality check\r\nDefault value: 1E-05", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "4a1bdbd9b3914d5aac70657a7bf07712", + "Name": "bool", + "Description": "Result of equality check", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Auto", + "Description": "Returns True if x and y are equal given a certain tolerance" + }, + { + "ConcreteType": "CoreNodeModels.Watch, CoreNodeModels", + "WatchWidth": 420.0, + "WatchHeight": 38.0, + "Id": "ed4c8ac3cdd347e7b030f0bf94cf83e3", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "fe12ecef9d65496295bb9e2c6a5e0ac1", + "Name": "", + "Description": "Node to show output from", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "0dd578546ee5429fb7831a861e466e9f", + "Name": "", + "Description": "Node output", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Visualizes a node's output" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "8a61342503154be98114725e1a035fd9", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "80aad24fdf43487080a0d8c08dee2510", + "Name": "vector", + "Description": "Autodesk.DesignScript.Geometry.Vector", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "defddd9b887c4f80831b59afede9744c", + "Name": "otherVector", + "Description": "Other vector\n\nVector", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "ff18b08a9f274e2aa2dac250b0b3484a", + "Name": "bool", + "Description": "Returns True if the vectors are almost equal; false otherwise.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Vector.IsAlmostEqualTo@Autodesk.DesignScript.Geometry.Vector", + "Replication": "Auto", + "Description": "Determine whether two vectors are almost equal. A tolerance value of 1e-5 given to handle precision issues.\n\nVector.IsAlmostEqualTo (otherVector: Vector): bool" + }, + { + "ConcreteType": "CoreNodeModels.Equals, CoreNodeModels", + "Id": "f6bc06277ace450dbfb951d8cc466bad", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "13e63dbbbe2c4773b28632d8cd68d026", + "Name": "x", + "Description": "Integer or double value", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "0212e10e67e54d80906c696225a5cdfb", + "Name": "y", + "Description": "Integer or double value", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "39e7fa371ec64e9eae1d0759a7968160", + "Name": "tolerance", + "Description": "Tolerance permitted for equality check\r\nDefault value: 1E-05", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "6057ddc2dc88424dbc1ac6c49b9dfaad", + "Name": "bool", + "Description": "Result of equality check", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Auto", + "Description": "Returns True if x and y are equal given a certain tolerance" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "c4675648d2ac49669ab7e3ce3ef33fcf", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "c92a11e45bf245f58e9d329421483a7e", + "Name": "geometry", + "Description": "Autodesk.DesignScript.Geometry.Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "1b7b9a14f6b448d3a959c467a1fb343d", + "Name": "other", + "Description": "Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "bb8e9670fcf44517945224d4c4dc3b30", + "Name": "bool", + "Description": "bool", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Geometry.IsAlmostEqualTo@Autodesk.DesignScript.Geometry.Geometry", + "Replication": "Auto", + "Description": "Check if the two objects have the same representational geometry or numerical values\n\nGeometry.IsAlmostEqualTo (other: Geometry): bool" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "3f0d6842fe8441dfb67e53245aad1c62", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "a3823b7ba52446a1b8d58016a9dbd8ba", + "Name": "curve", + "Description": "Autodesk.DesignScript.Geometry.Curve", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "004ddb16a21f4b948894c2aa8f90724b", + "Name": "Point", + "Description": "Point", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Curve.StartPoint", + "Replication": "Auto", + "Description": "Get the start Point along the Curve\n\nCurve.StartPoint: Point" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSVarArgFunction, DynamoCore", + "FunctionSignature": "DSCore.List.Join@var[]..[]", + "FunctionType": "VariableArgument", + "Id": "f7f96f0fc4e34e9485cd6706fb71b155", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "49715ec2fe4e44eeb90095c55cc5fa91", + "Name": "list0", + "Description": "Lists to join into one.\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "4ba5aceab7194c44a933128df8818b97", + "Name": "list1", + "Description": "var[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "acbbbccf0d304f0f994b0d1a7b80beb6", + "Name": "list", + "Description": "Joined list.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Concatenates all given lists into a single list.\n\nList.Join (lists: var[]..[]): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "b2e941a4e18c41aa86233986ab6e1b51", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "ae416cb4cdee437ba25e2cf9113119c3", + "Name": "curve", + "Description": "Autodesk.DesignScript.Geometry.Curve", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "fb6a666d16484d8d8891eca870f34efa", + "Name": "Point", + "Description": "Point", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Curve.EndPoint", + "Replication": "Auto", + "Description": "Get the end Point along the Curve\n\nCurve.EndPoint: Point" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSVarArgFunction, DynamoCore", + "FunctionSignature": "DSCore.List.Join@var[]..[]", + "FunctionType": "VariableArgument", + "Id": "8ae9a2a41a314c18a69caba0d0950cdb", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "b01b2f492c454351a7172fc8d526725b", + "Name": "list0", + "Description": "Lists to join into one.\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "db7e040eeb2d457f930a4d780f84aa92", + "Name": "list1", + "Description": "var[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "8dbfaecde2a74addbf094dd0c7fcce84", + "Name": "list", + "Description": "Joined list.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Concatenates all given lists into a single list.\n\nList.Join (lists: var[]..[]): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "6823f55202564264ae278373763a8bf6", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "c7fb081e8ff14179ad6c599008fecb27", + "Name": "curve", + "Description": "Autodesk.DesignScript.Geometry.Curve", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "0a3dd444bc694514868fc7d635326467", + "Name": "Vector", + "Description": "Vector", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Curve.Normal", + "Replication": "Auto", + "Description": "The normal to the plane the curve lies in. Only valid for planar curves.\n\nCurve.Normal: Vector" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSVarArgFunction, DynamoCore", + "FunctionSignature": "DSCore.List.Join@var[]..[]", + "FunctionType": "VariableArgument", + "Id": "49bc586f66854b83affee259c02b0296", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "5be2ea2cd876451dbf396b7c45cfe0e1", + "Name": "list0", + "Description": "Lists to join into one.\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "d60e28d368b446eaa1da4560099bbf9f", + "Name": "list1", + "Description": "var[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "b5f98f0d72114ab2ae1f64b84c7b0f7d", + "Name": "list2", + "Description": "var[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "260a9477fd3741b29b3210944d51f3ca", + "Name": "list", + "Description": "Joined list.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Concatenates all given lists into a single list.\n\nList.Join (lists: var[]..[]): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "c046ed4937414b84b3d1ffde8144b0bd", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "10d48b62c4344e12a551cc2ca53b0055", + "Name": "curve", + "Description": "Autodesk.DesignScript.Geometry.Curve", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "9a7554fc2286432e8965222097a7ff95", + "Name": "Vector", + "Description": "Vector", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Curve.Normal", + "Replication": "Auto", + "Description": "The normal to the plane the curve lies in. Only valid for planar curves.\n\nCurve.Normal: Vector" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSVarArgFunction, DynamoCore", + "FunctionSignature": "DSCore.List.Join@var[]..[]", + "FunctionType": "VariableArgument", + "Id": "d774eea9887d4ba59ff652de77a59f36", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "e35567174bdb4ce0b505f5eacc77f7be", + "Name": "list0", + "Description": "Lists to join into one.\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "e93f04e7e6974168b3d7b0bdbf8580c8", + "Name": "list1", + "Description": "var[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "906c3335ca2946b6a0a5d8f30088c608", + "Name": "list2", + "Description": "var[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "4f9138b2c9ed4832858135573f2c7b52", + "Name": "list", + "Description": "Joined list.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Concatenates all given lists into a single list.\n\nList.Join (lists: var[]..[]): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "7093d0bcddcb4ca79452fc5ce60a7d91", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "705a5abeffba45c09909824acc5b79a4", + "Name": "list", + "Description": "List to be checked on whether all items are true.\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "1e8926f4aee34cb0a874ecba573115e0", + "Name": "bool", + "Description": "True if all items from list are true, false if one or more items is not true", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.List.AllTrue@var[]..[]", + "Replication": "Auto", + "Description": "Determines if all items in the given list is a boolean and has a true value.\n\nList.AllTrue (list: var[]..[]): bool" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "1c6a90dcd1a54e898067e595fdeae51e", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "786d2e724f134ea2b72911aa8750118e", + "Name": "curve", + "Description": "Autodesk.DesignScript.Geometry.Curve", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "6870303c71cb4d4db6b372317931525e", + "Name": "Point", + "Description": "Point", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Curve.StartPoint", + "Replication": "Auto", + "Description": "Get the start Point along the Curve\n\nCurve.StartPoint: Point" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "35103a70298a48ec963975233308a7c9", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "9ded0a989b85425ea1e19ef4a3207458", + "Name": "curve", + "Description": "Autodesk.DesignScript.Geometry.Curve", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "5bcef4625f174b279ea132833ade6ff7", + "Name": "Point", + "Description": "Point", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Curve.EndPoint", + "Replication": "Auto", + "Description": "Get the end Point along the Curve\n\nCurve.EndPoint: Point" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "14f4e1966aaa44e88ab701a5eeea5f7a", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "4dfb95c3e4774f09bea66c3edc8ab55b", + "Name": "curve", + "Description": "Autodesk.DesignScript.Geometry.Curve", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "e612ab997ba441baa4a4b7b3182a6428", + "Name": "Vector", + "Description": "Vector", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Curve.Normal", + "Replication": "Auto", + "Description": "The normal to the plane the curve lies in. Only valid for planar curves.\n\nCurve.Normal: Vector" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSVarArgFunction, DynamoCore", + "FunctionSignature": "DSCore.List.Join@var[]..[]", + "FunctionType": "VariableArgument", + "Id": "5a4a18a39f0841309b9159e07464e45b", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "9525a8d127994a37aa51a7df1883d956", + "Name": "list0", + "Description": "Lists to join into one.\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "681498283dd24172a6da1c33eed37614", + "Name": "list1", + "Description": "var[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "66b3ae5af5024e458061b99a247a816b", + "Name": "list", + "Description": "Joined list.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Concatenates all given lists into a single list.\n\nList.Join (lists: var[]..[]): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "4016dbb6bcb84d57a106c84592c6c85d", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "d6451fd2b6274f45ab6fb78021f6ba7d", + "Name": "curve", + "Description": "Autodesk.DesignScript.Geometry.Curve", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "1f0ced2a99c34d96a32586106c50b077", + "Name": "Vector", + "Description": "Vector", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Curve.Normal", + "Replication": "Auto", + "Description": "The normal to the plane the curve lies in. Only valid for planar curves.\n\nCurve.Normal: Vector" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "676cea3e30a04ded9a09192a8cdb9559", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "9970e5107c694e85bd3692938e1cd5fb", + "Name": "curve", + "Description": "Autodesk.DesignScript.Geometry.Curve", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "2e28f3851e5348ecb71b0eb793af3d01", + "Name": "Point", + "Description": "Point", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Curve.EndPoint", + "Replication": "Auto", + "Description": "Get the end Point along the Curve\n\nCurve.EndPoint: Point" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSVarArgFunction, DynamoCore", + "FunctionSignature": "DSCore.List.Join@var[]..[]", + "FunctionType": "VariableArgument", + "Id": "3f657d66b6744ed995c75029d6399faa", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "ab9fe6798ab545689b3a0ab9fa5efd44", + "Name": "list0", + "Description": "Lists to join into one.\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "daeccd09685f4dbb9b2c67850416474e", + "Name": "list1", + "Description": "var[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "bec4781dcdb74a19ad62e389910dbbee", + "Name": "list", + "Description": "Joined list.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Concatenates all given lists into a single list.\n\nList.Join (lists: var[]..[]): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "94e964fda36348d39cfc5c81b3e4e854", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "e8f9d751ba404f6da8dca5f0186343a6", + "Name": "curve", + "Description": "Autodesk.DesignScript.Geometry.Curve", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "fc07267461bf48e09baff17b050695b7", + "Name": "Point", + "Description": "Point", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Curve.StartPoint", + "Replication": "Auto", + "Description": "Get the start Point along the Curve\n\nCurve.StartPoint: Point" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "31793908340e4b81848ad117749f842a", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "659d6f927ab8484d9c13780baadc0338", + "Name": "geometry", + "Description": "Autodesk.DesignScript.Geometry.Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "8309569d51634772a02fde8f14628dbc", + "Name": "other", + "Description": "Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "dd765fe445244bfeb00bcc449abfabcf", + "Name": "bool", + "Description": "bool", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Geometry.IsAlmostEqualTo@Autodesk.DesignScript.Geometry.Geometry", + "Replication": "Auto", + "Description": "Check if the two objects have the same representational geometry or numerical values\n\nGeometry.IsAlmostEqualTo (other: Geometry): bool" + }, + { + "ConcreteType": "CoreNodeModels.Equals, CoreNodeModels", + "Id": "ef0d4b5b97e64e63a7edeb9ad47745f7", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "20381616bbc34991b0f4ab831c97bdd1", + "Name": "x", + "Description": "Integer or double value", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "b935c9214e384b588858dde55f065a69", + "Name": "y", + "Description": "Integer or double value", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "fb137800224c4511baf5ac34b57f1fd7", + "Name": "tolerance", + "Description": "Tolerance permitted for equality check\r\nDefault value: 1E-05", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "e380f9f10a7f45d7a30e59fd87d299ee", + "Name": "bool", + "Description": "Result of equality check", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Auto", + "Description": "Returns True if x and y are equal given a certain tolerance" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "b37c27e413b547d2aae79de2623cdf0d", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "8fcb355c78bb4d3ab34bcf29e6f35ffe", + "Name": "vector", + "Description": "Autodesk.DesignScript.Geometry.Vector", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "80cd54c2eccc4aed8740421990524753", + "Name": "otherVector", + "Description": "Other vector\n\nVector", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "20f74d8c02ff435496d260fc4fc1b291", + "Name": "bool", + "Description": "Returns True if the vectors are almost equal; false otherwise.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Vector.IsAlmostEqualTo@Autodesk.DesignScript.Geometry.Vector", + "Replication": "Auto", + "Description": "Determine whether two vectors are almost equal. A tolerance value of 1e-5 given to handle precision issues.\n\nVector.IsAlmostEqualTo (otherVector: Vector): bool" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSVarArgFunction, DynamoCore", + "FunctionSignature": "DSCore.List.Join@var[]..[]", + "FunctionType": "VariableArgument", + "Id": "1f1b32ffae3b46afaf440cf5c28928dd", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "a273f17a46464c87806c045647060d6a", + "Name": "list0", + "Description": "Lists to join into one.\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "6f77156c72644e408ace58a97a0e2841", + "Name": "list1", + "Description": "var[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "a3c92e74245e4a0aae0bb59e2b5409b9", + "Name": "list2", + "Description": "var[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "2fe625a0b8c941f3819ed3b9276c3888", + "Name": "list", + "Description": "Joined list.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Concatenates all given lists into a single list.\n\nList.Join (lists: var[]..[]): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "b9f4f9f432df402187936de0d8104d29", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "273b98deefcf4996b16a42c9586e20ac", + "Name": "list", + "Description": "List to be checked on whether all items are true.\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "bb9eb22619fc4b62a765e9e8dde43064", + "Name": "bool", + "Description": "True if all items from list are true, false if one or more items is not true", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.List.AllTrue@var[]..[]", + "Replication": "Auto", + "Description": "Determines if all items in the given list is a boolean and has a true value.\n\nList.AllTrue (list: var[]..[]): bool" + }, + { + "ConcreteType": "CoreNodeModels.Watch, CoreNodeModels", + "WatchWidth": 420.0, + "WatchHeight": 38.0, + "Id": "42b645200ecc4c8fb9ab3a0dc2874fb7", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "61fdbcf4d52741b7b4668fb652661994", + "Name": "", + "Description": "Node to show output from", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "c0ded1e7fde947e89f88b3122978ff8e", + "Name": "", + "Description": "Node output", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Visualizes a node's output" + }, + { + "ConcreteType": "CoreNodeModels.Watch, CoreNodeModels", + "WatchWidth": 420.0, + "WatchHeight": 38.0, + "Id": "1345ef3306a24666813a1683c2b62c21", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "01412d72ca314597afddefb89490ee1c", + "Name": "", + "Description": "Node to show output from", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "7b6c7fe8dcdb41ef99804b8fafae03fc", + "Name": "", + "Description": "Node output", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Visualizes a node's output" + }, + { + "ConcreteType": "CoreNodeModels.Equals, CoreNodeModels", + "Id": "a42354e080e04da888492285ab0bfc90", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "c3590f7d4d1140e28fde03acd5a1d609", + "Name": "x", + "Description": "Integer or double value", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "598fac63895040ff90d239bfeb8c8956", + "Name": "y", + "Description": "Integer or double value", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "25e482fa8ded422f935469f3450f508d", + "Name": "tolerance", + "Description": "Tolerance permitted for equality check\r\nDefault value: 1E-05", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "42f48a91b3c14b9e902927913778eb71", + "Name": "bool", + "Description": "Result of equality check", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Auto", + "Description": "Returns True if x and y are equal given a certain tolerance" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "95750af0f940439fae33513eb957fc61", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "399656b3c65349f8a40b8cde4aff9012", + "Name": "ellipseArc", + "Description": "Autodesk.DesignScript.Geometry.EllipseArc", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "3a14b51c437b407e875181459b0358b4", + "Name": "double", + "Description": "double", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.EllipseArc.SweepAngle", + "Replication": "Auto", + "Description": "Returns the sweep angle of the ellipse arc in degrees.\n\nEllipseArc.SweepAngle: double" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "9d1247a67c254d8fba848237558fd210", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "9f8a21ab5f57475a8617a12f897a65f4", + "Name": "ellipseArc", + "Description": "Autodesk.DesignScript.Geometry.EllipseArc", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "5614dfe687c848f487771956e513a7c1", + "Name": "double", + "Description": "double", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.EllipseArc.StartAngle", + "Replication": "Auto", + "Description": "The start angle in degrees\n\nEllipseArc.StartAngle: double" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "99a1a943bd4b4370a0697e7ac5da21e1", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "521d3072a4674cc6ba1aff0e9cbabcf9", + "Name": "ellipseArc", + "Description": "Autodesk.DesignScript.Geometry.EllipseArc", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "4200cc0247a4402b8921ee5139821156", + "Name": "Vector", + "Description": "Vector", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.EllipseArc.MajorAxis", + "Replication": "Auto", + "Description": "The major axis of the Ellipse. This is the longer axis. The length of the Vector is the Major radius.\n\nEllipseArc.MajorAxis: Vector" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "2d8a1dc80b5f4b938d58cdfc18d526e6", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "c12c62199013485d820dbf9346ed45c0", + "Name": "ellipseArc", + "Description": "Autodesk.DesignScript.Geometry.EllipseArc", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "f3558e04c85849d6bb66a213c69fdbf6", + "Name": "Vector", + "Description": "Vector", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.EllipseArc.MinorAxis", + "Replication": "Auto", + "Description": "The minor axis of the Ellipse. This is the shorter axis. The length of the Vector is the Minor radius.\n\nEllipseArc.MinorAxis: Vector" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "825e9698699445c3953211195aad81b5", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "c907616375c44fc6a80448daabaeee65", + "Name": "ellipseArc", + "Description": "Autodesk.DesignScript.Geometry.EllipseArc", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "e86085b8bb2449679f1233745c00b552", + "Name": "double", + "Description": "double", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.EllipseArc.StartAngle", + "Replication": "Auto", + "Description": "The start angle in degrees\n\nEllipseArc.StartAngle: double" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "4587eeb48728469f88f173d2d254ff2b", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "5b96e579118a4b26970044a83066e0af", + "Name": "ellipseArc", + "Description": "Autodesk.DesignScript.Geometry.EllipseArc", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "f3de2e9871d8440382662775138b275e", + "Name": "double", + "Description": "double", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.EllipseArc.SweepAngle", + "Replication": "Auto", + "Description": "Returns the sweep angle of the ellipse arc in degrees.\n\nEllipseArc.SweepAngle: double" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "4d33d83e82de4568b8e030eece9d8306", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "aa43c385fa5445f19f8921011b9ab2ba", + "Name": "ellipseArc", + "Description": "Autodesk.DesignScript.Geometry.EllipseArc", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "750c594ed20543d9aaa32c7f0882353e", + "Name": "Vector", + "Description": "Vector", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.EllipseArc.MajorAxis", + "Replication": "Auto", + "Description": "The major axis of the Ellipse. This is the longer axis. The length of the Vector is the Major radius.\n\nEllipseArc.MajorAxis: Vector" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "7c599993283c4bf787f3486da95351e8", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "967cb34427e74f70814379a9561ac34c", + "Name": "ellipseArc", + "Description": "Autodesk.DesignScript.Geometry.EllipseArc", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "ad3a68306ff943f3991f67cf3f53ebac", + "Name": "Vector", + "Description": "Vector", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.EllipseArc.MinorAxis", + "Replication": "Auto", + "Description": "The minor axis of the Ellipse. This is the shorter axis. The length of the Vector is the Minor radius.\n\nEllipseArc.MinorAxis: Vector" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSVarArgFunction, DynamoCore", + "FunctionSignature": "DSCore.List.Join@var[]..[]", + "FunctionType": "VariableArgument", + "Id": "1308b9604658466e89db9544d1740da2", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "a93f5cb50ff94bcdba84937fbcea985f", + "Name": "list0", + "Description": "Lists to join into one.\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "386ab228ea8e417890ff864106012e28", + "Name": "list1", + "Description": "var[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "6fdf687afdab4336833df2eec7d29c62", + "Name": "list2", + "Description": "var[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "aaf5e44e7f484e79be9660a32486f883", + "Name": "list", + "Description": "Joined list.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Concatenates all given lists into a single list.\n\nList.Join (lists: var[]..[]): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSVarArgFunction, DynamoCore", + "FunctionSignature": "DSCore.List.Join@var[]..[]", + "FunctionType": "VariableArgument", + "Id": "689b89397bfc4421968bb8d5f189fbea", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "0d60b65aff8f480d970b84aea6d6f9af", + "Name": "list0", + "Description": "Lists to join into one.\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "77071688e24b45c1955c1c7687ce1551", + "Name": "list1", + "Description": "var[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "b44303fb5ac04e72996c4715c9ccae2a", + "Name": "list2", + "Description": "var[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "8e2322850f2641369878508094db12f9", + "Name": "list", + "Description": "Joined list.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Concatenates all given lists into a single list.\n\nList.Join (lists: var[]..[]): var[]..[]" + }, + { + "ConcreteType": "CoreNodeModels.CreateList, CoreNodeModels", + "VariableInputPorts": true, + "Id": "01ba04b6974c463c8e961b21e7f8cc03", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "8b75e746298a417bb5155eddbf4859db", + "Name": "item0", + "Description": "Item Index #0", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "f75e52ab415c45efac22ba5be15d4032", + "Name": "item1", + "Description": "Item Index #1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "66669e1b67d24708a6ab7bb1fa179cf6", + "Name": "item2", + "Description": "Item Index #2", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "a91d419c112b4f83888d9747c8ccc3e9", + "Name": "item3", + "Description": "Item Index #3", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "f9d632948a2742bfac3a039ff08bcffe", + "Name": "list", + "Description": "A list (type: var[]..[])", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Makes a new list from the given inputs" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "aeb58fc01bbc4e3b8e3a6bb674595fbd", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "ac643431e1dd4ff3ac1c9d2deff8d030", + "Name": "list", + "Description": "List to flatten.\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "f2efc301797b447593473c9913db4dc0", + "Name": "amount", + "Description": "Layers of list nesting to remove (-1 will remove all list nestings)\n\nint\nDefault value : -1", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "a7d5b614ab564b8a8c58be617304e124", + "Name": "list", + "Description": "Flattened list by amount", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.List.Flatten@var[]..[],int", + "Replication": "Auto", + "Description": "Flattens a nested list of lists by a certain amount.\n\nList.Flatten (list: var[]..[], amount: int = -1): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "a73925f57d2c44d7994a2c4d77bf8581", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "1171f8be63644239a2333a8845038e3b", + "Name": "list", + "Description": "List to be checked on whether all items are false.\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "2ba87110c33346388fdba2d281c6c8f6", + "Name": "bool", + "Description": "True if all items from list are false, false if one or more items is not false", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.List.AllFalse@var[]..[]", + "Replication": "Auto", + "Description": "Determines if all items in the given list is a boolean and has a false value.\n\nList.AllFalse (list: var[]..[]): bool" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "fdab29719ed447a89f8a0c6d158f6306", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "2049dd974161403292b5fc9370bbc12e", + "Name": "x", + "Description": "Basic type object to compare (e.g. bool, int, double, string, etc.)\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "d419ccecc1cc458b86ac549913924094", + "Name": "y", + "Description": "Basic type object to compare (e.g. bool, int, double, string, etc.)\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "ef33d1b366c246f78dcdc404abfe5b74", + "Name": "bool", + "Description": "Result of equality check", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "==@var[]..[],var[]..[]", + "Replication": "Auto", + "Description": "Compares if x and y are equal\n\n== (x: var[]..[], y: var[]..[]): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "5998b47b8b30432baa88d94ab6f8f0c0", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "e5b6cf21676446cc9a6ca778e3bb479a", + "Name": "object", + "Description": "Object to query type\n\nvar", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "34789e6bd6e840d38a7d0325ed72c271", + "Name": "string", + "Description": "Type of object.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Object.Type@var", + "Replication": "Auto", + "Description": "Returns the type of object represented as string.\n\nObject.Type (object: var): string" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "a3281447bc764bb0851d0aa9db6fe2f6", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "9b701c0eb3314852958da0ec621ce377", + "Name": "object", + "Description": "Object to query type\n\nvar", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "7a1b24cc3ed342729714c052fc2f3d1e", + "Name": "string", + "Description": "Type of object.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Object.Type@var", + "Replication": "Auto", + "Description": "Returns the type of object represented as string.\n\nObject.Type (object: var): string" + }, + { + "ConcreteType": "CoreNodeModels.CreateList, CoreNodeModels", + "VariableInputPorts": true, + "Id": "6e569bdedbc34772898c7e7a3f67911b", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "8869da740c894b98a4da9c19a922f9b2", + "Name": "item0", + "Description": "Item Index #0", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "f66fc0b696a24b078d88e0635736232b", + "Name": "item1", + "Description": "Item Index #1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "a48ae9de3fa545a5a73df1df7a58d9eb", + "Name": "item2", + "Description": "Item Index #2", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "d550230610f14d46a414d4fd8e14ff81", + "Name": "item3", + "Description": "Item Index #3", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "28fb57a7c1e74ccc8941865666802379", + "Name": "list", + "Description": "A list (type: var[]..[])", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Makes a new list from the given inputs" + }, + { + "ConcreteType": "CoreNodeModels.CreateList, CoreNodeModels", + "VariableInputPorts": true, + "Id": "77c1651772ec46ae952d2d45f8ea6f05", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "d565c11405984ccfa4c32a2facac0e81", + "Name": "item0", + "Description": "Item Index #0", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "96f7b965493f4f7881e649c4f488b809", + "Name": "item1", + "Description": "Item Index #1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "3a8076aac5ec4dc2b85fc5bd432cda5a", + "Name": "item2", + "Description": "Item Index #2", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "f9daac13e0574ccebcd024526d075aa7", + "Name": "list", + "Description": "A list (type: var[]..[])", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Makes a new list from the given inputs" + } + ], + "Connectors": [ + { + "Start": "3cdc499edc524603bf3829742519df2c", + "End": "d5d96b1af10a49dcb2255cf95cfa4e20", + "Id": "885dfdce8f994700b687b14721db108e", + "IsHidden": "False" + }, + { + "Start": "3cdc499edc524603bf3829742519df2c", + "End": "697ee7c557c041a7a158b3259dd00c2f", + "Id": "35a57463714d4fe68df51e0de1cab429", + "IsHidden": "False" + }, + { + "Start": "3cdc499edc524603bf3829742519df2c", + "End": "f412301259bf445aad0592e541c2046b", + "Id": "5762b3d335bb4e7699eb6624dbae8e65", + "IsHidden": "False" + }, + { + "Start": "6f35afc341be469da46a9b7ff1e9aa7b", + "End": "225bbe0ceaa94e82ad5f692cc59a1fa7", + "Id": "0da05e0d98ad4be5a4b5b0d1a922352c", + "IsHidden": "False" + }, + { + "Start": "723818401a2f43a4bbf1048646e6f836", + "End": "b85fbed4a9a84552879e7e03b114b2cb", + "Id": "355da5fb55994ad8ae352160ca3cb3a1", + "IsHidden": "False" + }, + { + "Start": "93e26e8d4e8247b09a708b225f0033fd", + "End": "4da8256fb0a043db9c38b41aa2439a40", + "Id": "5a0e51c138fa40dc84238340500893cc", + "IsHidden": "False" + }, + { + "Start": "93e26e8d4e8247b09a708b225f0033fd", + "End": "e5b6cf21676446cc9a6ca778e3bb479a", + "Id": "9ac0f1175b5142d3a5295940cfa1946b", + "IsHidden": "False" + }, + { + "Start": "deaf3349d6044976b45cf0baaf8a321e", + "End": "8869da740c894b98a4da9c19a922f9b2", + "Id": "05e81ef8bbd2452eb59c8112b5357bfd", + "IsHidden": "False" + }, + { + "Start": "6f1c34be8cb1444288cd8fab70297e30", + "End": "005acdcca81741e58b2af6d2c15d81ed", + "Id": "933571552d11412c9a6f2852fa203f82", + "IsHidden": "False" + }, + { + "Start": "6f1c34be8cb1444288cd8fab70297e30", + "End": "fe12ecef9d65496295bb9e2c6a5e0ac1", + "Id": "cad167575ba44dc682c726350bf6a9f5", + "IsHidden": "False" + }, + { + "Start": "43ab655529ca4ba3a9322ab25fbd701c", + "End": "96f7b965493f4f7881e649c4f488b809", + "Id": "788c61f193ef448ebbef677102c3d62c", + "IsHidden": "False" + }, + { + "Start": "61b9eeef3fc3451fb4d1804ab2d6ab17", + "End": "7d3f0c00e9f244f1aa542aa3404f08cb", + "Id": "fdb6449b483f4111b0c1aaded36ccc9c", + "IsHidden": "False" + }, + { + "Start": "61b9eeef3fc3451fb4d1804ab2d6ab17", + "End": "fee8adc7eba34895a646c66a1fb9561a", + "Id": "108e4d4b6f89462c9e5a999550581a60", + "IsHidden": "False" + }, + { + "Start": "271a71ae930b4fe08c3c546a47cc92b0", + "End": "73e1cc53283841a68d894dda0a36ec59", + "Id": "9ec01679f67c4035a78d63609563b721", + "IsHidden": "False" + }, + { + "Start": "0ab149ab1c78473596784500cecfa545", + "End": "f66fc0b696a24b078d88e0635736232b", + "Id": "7c86a26d417c415f91c09d89941f849e", + "IsHidden": "False" + }, + { + "Start": "363fadbbc0514d57b485d4e2375cfc48", + "End": "515773696a9e4231827e27c5a15e9080", + "Id": "af0da864b7cc4240aedc97269404344a", + "IsHidden": "False" + }, + { + "Start": "ffc42edaf24046ec9e84efad31bf7846", + "End": "d50136acf2734e8887e855adf6c189ee", + "Id": "f6412f5918984ae9bba7051021c906fb", + "IsHidden": "False" + }, + { + "Start": "f9c4e1d3257c44f790d41f8a54300ac4", + "End": "35c6f07190ea489a94d006707ea0b3b8", + "Id": "a872f8e90231462d9561ec4de009e02e", + "IsHidden": "False" + }, + { + "Start": "a044fe0e1d164302917752ba151d6b1e", + "End": "6974edece7414291a9dc676360b83788", + "Id": "c3be8c2e60434dce92cea9e9decd0770", + "IsHidden": "False" + }, + { + "Start": "a044fe0e1d164302917752ba151d6b1e", + "End": "f663e4efdc604fc9b91a2fae86cf34d2", + "Id": "00386e40cdb54d778267eeaefe1c4c31", + "IsHidden": "False" + }, + { + "Start": "9598ef5f58c4496dabda0936b468da1d", + "End": "1be2dbe103114acabffebb6d90db0f88", + "Id": "96cddd3475964a2ea7091db15640f597", + "IsHidden": "False" + }, + { + "Start": "f222c4eac87a4b57a2b677be8a722860", + "End": "eb3001620aae4ebd9f5aa86cf1415edc", + "Id": "a6f11fea992149c8837ede29f9e36731", + "IsHidden": "False" + }, + { + "Start": "f222c4eac87a4b57a2b677be8a722860", + "End": "6cf6a53e6bc94155a40d39cde362f4c0", + "Id": "ef37f9fef45a4a8582efc7e172f90c33", + "IsHidden": "False" + }, + { + "Start": "410e5034114c46e08cadfe297bd62821", + "End": "3180e5e9cb2b45828cfe6f4b9668d835", + "Id": "6094d55d4516411e92cb246d979f9816", + "IsHidden": "False" + }, + { + "Start": "2d8ab2a7d3db4f3cbc19c690cdf9be37", + "End": "0ad1b43457c14db0aca3d6a9eec8538b", + "Id": "e74b439e4d9441718f2bef5e6557c15e", + "IsHidden": "False" + }, + { + "Start": "2d8ab2a7d3db4f3cbc19c690cdf9be37", + "End": "ba688765f31b4864a169fef6adf5d8c5", + "Id": "168bf8d8b2904e65bb215a3a05c79521", + "IsHidden": "False" + }, + { + "Start": "902986ab5f31487292fa838bfb475379", + "End": "26b5f80162dc4d6f8f46baad0c488228", + "Id": "615c8f4a5646425a841492a8c96c8d90", + "IsHidden": "False" + }, + { + "Start": "5e1eb66c513a4cc3a3bed125fd15c798", + "End": "a48ae9de3fa545a5a73df1df7a58d9eb", + "Id": "df3455bdf128461387aca89e32762795", + "IsHidden": "False" + }, + { + "Start": "d96029d0558e4d0c8700e4514e4c964c", + "End": "92ea43ae8c3f46eb876b9c7b16b17aec", + "Id": "2e60d56bfc464a8691ccb343f0ec87e5", + "IsHidden": "False" + }, + { + "Start": "6edbe84fd8b04ab6908f6c0763cf6eab", + "End": "4b0045b39824427fa2dd2628b2afc88b", + "Id": "926b7ec9a6a648b28f5670301a9b2592", + "IsHidden": "False" + }, + { + "Start": "1fb3eaff5502465d8f4f9ae45c5d7311", + "End": "41e08a162f0a47aca60868ba697f9fe5", + "Id": "e09dfc6d78f94e59b0a6d91f096dc4e9", + "IsHidden": "False" + }, + { + "Start": "7b7bb652f8cf4e03afeab1881a301fa3", + "End": "7f0676c7525143af9b49365cf5c17a76", + "Id": "f7eb5074780944758b1bf2446d9750cb", + "IsHidden": "False" + }, + { + "Start": "3c33ce0c3ebb4ddf9e9d901c4621dc11", + "End": "5fff48aab6e1420bb15dbbc7dda8b2de", + "Id": "4a48dd55d5c74e41a50ca1c70ed56153", + "IsHidden": "False" + }, + { + "Start": "3c33ce0c3ebb4ddf9e9d901c4621dc11", + "End": "f91e6871e7b04d2f80920bc466bc79fd", + "Id": "ffc26054cb8845d0b9927faa0afa35e4", + "IsHidden": "False" + }, + { + "Start": "7c546033af2345beaa6a96631b9363eb", + "End": "3a856fd0a98d4de38cd4339d223aa0b2", + "Id": "bb3bad1de71a4323b6460cd11ab8692f", + "IsHidden": "False" + }, + { + "Start": "017239f951534bc69d5f10a6065bcf0f", + "End": "bcdc65b33e1f47478bb92534f351b02e", + "Id": "16919ae006234de899b6be37acd51c5c", + "IsHidden": "False" + }, + { + "Start": "f758d1f18b554c8092d2c2029c53f321", + "End": "75c66ca6c41d4714a10b3da4bd939cc9", + "Id": "0f792bb508bf4ad9963040823264893e", + "IsHidden": "False" + }, + { + "Start": "49de85a228594f179642e35d37599229", + "End": "b3dac334702f4509ab17ae8d93942b73", + "Id": "69f0dafc16674c8b8e52cfdc1c0be0e9", + "IsHidden": "False" + }, + { + "Start": "49de85a228594f179642e35d37599229", + "End": "8c74a526226f4c4e8e4c19871073088d", + "Id": "41b6da666ecb47929c4e3053d940f9cd", + "IsHidden": "False" + }, + { + "Start": "7476854291b14ca58c70d1da28c8ecde", + "End": "8b3e76b5a8a645faa2cf477e940623ad", + "Id": "99f3339feaaf4c24bd0dd8a27068b3e6", + "IsHidden": "False" + }, + { + "Start": "7476854291b14ca58c70d1da28c8ecde", + "End": "77090b94943c4616bb635e30e73e3d2a", + "Id": "2eb1337bd4414fa5acd626b174f1d11d", + "IsHidden": "False" + }, + { + "Start": "e33a45a6291e4bf59ac867a7dc92ca14", + "End": "42ee530840824e6ab65f4ae851a86d69", + "Id": "eb672280a1b346ba89ad84cf1af0cec6", + "IsHidden": "False" + }, + { + "Start": "e33a45a6291e4bf59ac867a7dc92ca14", + "End": "fa5f2737a3aa4714ad7a573c11812970", + "Id": "860ae19337cd4acb8cc26c3d49dc8aae", + "IsHidden": "False" + }, + { + "Start": "ddd9c4377a5d4e728e60856f70a04649", + "End": "66347e262e634fa99e3b44737219ee16", + "Id": "4f1034eb8ea945a19da30f379e7de385", + "IsHidden": "False" + }, + { + "Start": "ddd9c4377a5d4e728e60856f70a04649", + "End": "657f3638cc3e494fbc7a89aef66b6f46", + "Id": "9577f7b2a7b74122973a9f6babf2a389", + "IsHidden": "False" + }, + { + "Start": "e3de989b43594037a009dcaeee5f1028", + "End": "c716658925b244cfa7cce179731bc2cd", + "Id": "d6ca34d7ea5142908ca53d6d83f80df6", + "IsHidden": "False" + }, + { + "Start": "e3de989b43594037a009dcaeee5f1028", + "End": "177cad52a1114eaa97099c2e06a8ce0b", + "Id": "70874157c7504387b41270ae8e837ab5", + "IsHidden": "False" + }, + { + "Start": "3e4997bc247644aa9eb21c1a3bd75a18", + "End": "455a06e21ba34f86968b6c000c2db38b", + "Id": "23a8ec252a174d4c830a1ba65b5b6115", + "IsHidden": "False" + }, + { + "Start": "f3463f27f176499288611a9720bd9f9e", + "End": "f3f71e38c4f34bea964bbf862dd10ffb", + "Id": "d871f410c935466d9a0d469e566dd548", + "IsHidden": "False" + }, + { + "Start": "f3463f27f176499288611a9720bd9f9e", + "End": "ceaa92f478dc426fbc4a6415b7fd464e", + "Id": "b1873a97dd7645cd84b4a048c307670d", + "IsHidden": "False" + }, + { + "Start": "f3463f27f176499288611a9720bd9f9e", + "End": "4f9d2203be724ba3bbeffcda83d21985", + "Id": "7bb85a071f2f4856a4f2cdbd1a98b3e7", + "IsHidden": "False" + }, + { + "Start": "f3463f27f176499288611a9720bd9f9e", + "End": "775de7cb2c6943b4942100f38c756b04", + "Id": "84b4d1067378421396bbb3fd75ab40f9", + "IsHidden": "False" + }, + { + "Start": "f3463f27f176499288611a9720bd9f9e", + "End": "b3ba205aacc9401e8cf5d9ca0bd8489d", + "Id": "7777871092a842439c07854c38f71c09", + "IsHidden": "False" + }, + { + "Start": "983b0d6a7ed8469fa8d02360d2ac36b7", + "End": "f9a1e7fb03aa43a5a2945c44f8bf3d3a", + "Id": "2491f7512a944f59ae25163d7fcbd832", + "IsHidden": "False" + }, + { + "Start": "983b0d6a7ed8469fa8d02360d2ac36b7", + "End": "e7a879472d4942d49ece6a99e7df18a6", + "Id": "fc2acc56f01d44ee91cd591adaff1518", + "IsHidden": "False" + }, + { + "Start": "81440e84ddc143bcaaf0152ea465fd30", + "End": "41923b126eea4e77903d3d2f1d9a01ae", + "Id": "0ce1738c41a44c839443617f788f854e", + "IsHidden": "False" + }, + { + "Start": "81440e84ddc143bcaaf0152ea465fd30", + "End": "5904b834e7584417ac1ea1a48e1843b5", + "Id": "a114833591784673a359b2128e052192", + "IsHidden": "False" + }, + { + "Start": "81440e84ddc143bcaaf0152ea465fd30", + "End": "a933d5d9381443d29564fa0ee3ada9cf", + "Id": "881ed3efd7a643018b5fd8503562ecd2", + "IsHidden": "False" + }, + { + "Start": "81440e84ddc143bcaaf0152ea465fd30", + "End": "b9ac99f2346c4a41b2ce182913c61aa0", + "Id": "4419c61f1fdd49bcaaa1ebf6cbdf4d83", + "IsHidden": "False" + }, + { + "Start": "81440e84ddc143bcaaf0152ea465fd30", + "End": "9b701c0eb3314852958da0ec621ce377", + "Id": "34ba08267067457ebb6974ca677d9e62", + "IsHidden": "False" + }, + { + "Start": "6e43d792cf21450bae8ff9866ab9fe2b", + "End": "916d1d4b9a3f491d91837af75c57d0fe", + "Id": "36ef82ec3e6e4c7298e3dff9fa15c234", + "IsHidden": "False" + }, + { + "Start": "f50dcd6adc7e4e3aa6e14739756f5876", + "End": "578c2d0f247f441c938a1f19afe81f56", + "Id": "518d2986e8604e34839bced1e22b65fd", + "IsHidden": "False" + }, + { + "Start": "f50dcd6adc7e4e3aa6e14739756f5876", + "End": "fafadc6c684d4b39ac37b6e0b388aed6", + "Id": "d2097641abef4d3aaa5db9c663bea4bc", + "IsHidden": "False" + }, + { + "Start": "dcaed69bf7c54f4e8f75f45519170b79", + "End": "d565c11405984ccfa4c32a2facac0e81", + "Id": "dc7abc71ef4645dd93204837c14e0757", + "IsHidden": "False" + }, + { + "Start": "c2e6b6f20e2a4b8aa4253abce30d039e", + "End": "9d0e4201d2154e44b629fe0711569495", + "Id": "4ec48648549d4c1c9fce65ee53ee1cb6", + "IsHidden": "False" + }, + { + "Start": "c2e6b6f20e2a4b8aa4253abce30d039e", + "End": "01412d72ca314597afddefb89490ee1c", + "Id": "5b7b61f2d3964033b897215fd27b3abf", + "IsHidden": "False" + }, + { + "Start": "b4c13a2dd27c491aba75439e5afaa5e9", + "End": "b20d2673e9d140069af510846894262f", + "Id": "c159e982c4b4433a8b9698a11a59c8b5", + "IsHidden": "False" + }, + { + "Start": "0634e79b708149d19dbd22eda9c96986", + "End": "3a8076aac5ec4dc2b85fc5bd432cda5a", + "Id": "6d31431b2e1a462892cff1b420a212b3", + "IsHidden": "False" + }, + { + "Start": "bf998738359a4864af51f7e053e9816f", + "End": "870d8131e4d049c9a81de279b794d477", + "Id": "704886632a654c4894f622469a5f1b2d", + "IsHidden": "False" + }, + { + "Start": "bf998738359a4864af51f7e053e9816f", + "End": "8e1efb9e18ef4d659fcb965e11e2f5c7", + "Id": "086cb7c3c764430794216f40a7a5fcfc", + "IsHidden": "False" + }, + { + "Start": "bf998738359a4864af51f7e053e9816f", + "End": "61fdbcf4d52741b7b4668fb652661994", + "Id": "5564ea06134f483daa84f78f53ccab62", + "IsHidden": "False" + }, + { + "Start": "b3de0fb26f1f464dac5c7c38e4459e81", + "End": "64397c2e50cd446e99c622a5213ab4ae", + "Id": "403dca916ed74fe48a35861fe4a2d367", + "IsHidden": "False" + }, + { + "Start": "89353c4855294c15bf7547950bd9cd10", + "End": "354bf8725ec042b4bfb7012e2cba961a", + "Id": "fff35e0d571e48918fb9549a8f1cca01", + "IsHidden": "False" + }, + { + "Start": "b4dc14509b554e9ea9212a5eb4e4b757", + "End": "d54336cc41c54fe0875c8b6ee6e54a24", + "Id": "0577544e19024f21b0ae7ae08942d077", + "IsHidden": "False" + }, + { + "Start": "c577521b715b43708bde1dc18b912621", + "End": "e19369a06b6c4e7dbb7f65c78f3d646b", + "Id": "af15589a60ea4ed89ea3b6e720fdece9", + "IsHidden": "False" + }, + { + "Start": "d90723f4f7334bdcb7be2ff961509775", + "End": "9f16ef786c404cfb96635728fb23a4a0", + "Id": "2862a5685e8d4294a6b0dc0ef55066d3", + "IsHidden": "False" + }, + { + "Start": "7fef74821eff4cb7971aeaa59034a975", + "End": "6777d1c8c38b44adb529b7316fd090ba", + "Id": "990d6856d64747aaa54f02bd6314c968", + "IsHidden": "False" + }, + { + "Start": "dd01314a54e74088a9bae54606340fd0", + "End": "f37e341d1a714e90b08605bfe2cbd1c8", + "Id": "7f1d245b5c314fa58ced715dd4bb05ca", + "IsHidden": "False" + }, + { + "Start": "80f572464adc4553b769513551278660", + "End": "9774f95868914d9d83df87bcb8eec799", + "Id": "a41ac2e03f6043d1a0418a6c10122fa3", + "IsHidden": "False" + }, + { + "Start": "b19f939348f24f35b216565c5529ed04", + "End": "ccd78ed4e4f741ed9be7eb0d65467b43", + "Id": "8441cdc864864ea990564f7b0bb724b8", + "IsHidden": "False" + }, + { + "Start": "1357b27129f7475dbbb9bf2d4ca92b99", + "End": "f75e52ab415c45efac22ba5be15d4032", + "Id": "e9aca5ecf06b4d6f96c5701758b1e7f8", + "IsHidden": "False" + }, + { + "Start": "282ec3273ef0464fa54733cbedc424e8", + "End": "5b06253a2b954d2b8fbec8eba3996571", + "Id": "77578d5e47fa45518f75536647920001", + "IsHidden": "False" + }, + { + "Start": "282ec3273ef0464fa54733cbedc424e8", + "End": "d09cd09f266f4e718f07128c32552903", + "Id": "0626ae9ce041423bb84a6e52c182db39", + "IsHidden": "False" + }, + { + "Start": "282ec3273ef0464fa54733cbedc424e8", + "End": "2d6fe7900af54e05a2b7cc5ab406e6ad", + "Id": "b3f9a52904e8440e965fccbbb1838398", + "IsHidden": "False" + }, + { + "Start": "282ec3273ef0464fa54733cbedc424e8", + "End": "917852d45bbf4c24aa072c66e26d39d9", + "Id": "21933785189b4ab0884ae9aedce38021", + "IsHidden": "False" + }, + { + "Start": "282ec3273ef0464fa54733cbedc424e8", + "End": "6e855b6618c54f87b312e563eb042a9b", + "Id": "6f775c6d8dea4b39977b23086127c821", + "IsHidden": "False" + }, + { + "Start": "282ec3273ef0464fa54733cbedc424e8", + "End": "030673f6816b4e88b9cbc9d0e25528c1", + "Id": "394b55a838fb42b7ae9772280079e737", + "IsHidden": "False" + }, + { + "Start": "282ec3273ef0464fa54733cbedc424e8", + "End": "e27df428400441faa2160c961c1aa8be", + "Id": "256b3f0e7ad1434fa32a05486ecd374a", + "IsHidden": "False" + }, + { + "Start": "6d5a90f5836048f2aa50569c79bb8664", + "End": "13dc63d8455b48cf9871abb6b8155f35", + "Id": "b28da5746af24086a60b625dc5a9c54a", + "IsHidden": "False" + }, + { + "Start": "6d5a90f5836048f2aa50569c79bb8664", + "End": "a9f1d4fa986d45da969c360cd063704a", + "Id": "a705799646c24b148edf608c220b6bd3", + "IsHidden": "False" + }, + { + "Start": "6d5a90f5836048f2aa50569c79bb8664", + "End": "49dbe2c9af804ca0bda82f487d4c0830", + "Id": "b7833a4359d345388b20892cbe127dba", + "IsHidden": "False" + }, + { + "Start": "6d5a90f5836048f2aa50569c79bb8664", + "End": "7da1474faa8c408dbfbf4cd8bd142731", + "Id": "d6647c8b15e14d6caf5a8ed8e1400668", + "IsHidden": "False" + }, + { + "Start": "6d5a90f5836048f2aa50569c79bb8664", + "End": "7c2f4ccfcd4e4b018ff9aa9974c63fd1", + "Id": "47c22df22e8842568e35dfaf81e2ee42", + "IsHidden": "False" + }, + { + "Start": "6d5a90f5836048f2aa50569c79bb8664", + "End": "2c4b8d19f7cb46b3b1a730d24c79bfe5", + "Id": "5ca0bb35bf114654a8b4702733220f50", + "IsHidden": "False" + }, + { + "Start": "6d5a90f5836048f2aa50569c79bb8664", + "End": "9c032609e69044a79a4b69787745e800", + "Id": "42fb5b0609b94f5287bf49c680a69951", + "IsHidden": "False" + }, + { + "Start": "cf1aed1fbdb94040a386c9e5f8ab43f1", + "End": "1f92e4bda35b4c9e9dc533295a8a43b1", + "Id": "ea7df33a91634f9188bac87799c7fa85", + "IsHidden": "False" + }, + { + "Start": "185391cd20a04ead953e9e9f1ddca79e", + "End": "5f5475ecd99146668c8de25d60675284", + "Id": "42d170525fa04d30b24098b9105da62b", + "IsHidden": "False" + }, + { + "Start": "c2d5bbbd5c8845c6b1fc6c3d770ff297", + "End": "5c900f954c1d4b2d8853a4cb3847c5f1", + "Id": "817e50f6929d42798d59505b7f101abe", + "IsHidden": "False" + }, + { + "Start": "9fcf267fccb040c8bdbb37469f3ee409", + "End": "220cef8f46464e1399988094fd3e0602", + "Id": "dd30309bf9364660bfebc4c3b3f01f36", + "IsHidden": "False" + }, + { + "Start": "0672efaf56c44d1dae170d1b0cb36f05", + "End": "e97f6f9cd55c4a369432832983a860f5", + "Id": "3004002449ff41fd934d9a02a1684451", + "IsHidden": "False" + }, + { + "Start": "d88225f4c5514471846599f96c0e0b22", + "End": "d93e3d3351364ef3920e80cb8cd07547", + "Id": "e182541e371044919d81b47706d152a7", + "IsHidden": "False" + }, + { + "Start": "c22ebdd6e54143e8aa074a5494f97277", + "End": "74a3513e5b2e44f9abf405d1144b0a77", + "Id": "50e077f464424f3a8551be14651b9324", + "IsHidden": "False" + }, + { + "Start": "2c85e44fffd6489aa7ac335b19362d4a", + "End": "9a444516c2f04ae1ac191f655eef1d3e", + "Id": "d680a00f27f04776bad24df55c5f004a", + "IsHidden": "False" + }, + { + "Start": "59edcc912cef4ffda81bb63999b9e681", + "End": "828d097f160d4ce4ae4b2b548d8a11d1", + "Id": "c3945586a0064b4483d8f954509c50de", + "IsHidden": "False" + }, + { + "Start": "1652c79e8e5a4aa48437b96e90231172", + "End": "ad9f520b2ea944e48c96c22865d29251", + "Id": "e67b89d7c8c847dfbc0356c1036271b3", + "IsHidden": "False" + }, + { + "Start": "6b4e5c65839a42ca96be09c835c8cdc7", + "End": "c395941fb79e4b5bb0ffdb8563d5e6ed", + "Id": "20541793716844078c612025b5d39896", + "IsHidden": "False" + }, + { + "Start": "aa13c233e53e44ce90c4170665b88704", + "End": "496899350fd24d23965cda8ffcf53267", + "Id": "0a0cf7a9276c46739c33f4566373b3a8", + "IsHidden": "False" + }, + { + "Start": "8a0b81914781456faf07d293fa694794", + "End": "4ae4d7be0aa049d18bdeb6558232b6ca", + "Id": "974809bc27434904827f65c37a60ef9e", + "IsHidden": "False" + }, + { + "Start": "e79da8a794dd4652a6c646defd1cbaf1", + "End": "f38afc6a5a394d7898fcc1d95b56c519", + "Id": "3ef895d15efc4c6abcc0ea783b1aa9ce", + "IsHidden": "False" + }, + { + "Start": "0ebcb9e30cbf4fb8959d476fb6aff0b0", + "End": "c88fbeea1c7943cb9879b5adf292af0d", + "Id": "31bd107a88ab43aaa3b2b79cb3a967b5", + "IsHidden": "False" + }, + { + "Start": "0ebcb9e30cbf4fb8959d476fb6aff0b0", + "End": "cfea9fd631ea477884cfd9a315670e78", + "Id": "db48c0ab8a324d29b42a0f61b4fe5083", + "IsHidden": "False" + }, + { + "Start": "0ebcb9e30cbf4fb8959d476fb6aff0b0", + "End": "47365272425142f9afab84d14c52af49", + "Id": "af984acd547a4867b2c289c17b1035ab", + "IsHidden": "False" + }, + { + "Start": "0ebcb9e30cbf4fb8959d476fb6aff0b0", + "End": "11fc699ce8f8455f8b1aecb2ad2f87bb", + "Id": "ca6ac136e6894d52977f05a63b3c0efb", + "IsHidden": "False" + }, + { + "Start": "0ebcb9e30cbf4fb8959d476fb6aff0b0", + "End": "c7fb081e8ff14179ad6c599008fecb27", + "Id": "78c6424fe02b4e41871862c4de08f09e", + "IsHidden": "False" + }, + { + "Start": "0ebcb9e30cbf4fb8959d476fb6aff0b0", + "End": "19bb47a87fc8497bb7e802407ef8348e", + "Id": "533c50d7f54344bcb05f12e379f7ded7", + "IsHidden": "False" + }, + { + "Start": "0ebcb9e30cbf4fb8959d476fb6aff0b0", + "End": "9f21fff4b16b4e6d8dac7c8ae6a45ac0", + "Id": "db0c3aaef3d64f3bb7f2ca7217fea98d", + "IsHidden": "False" + }, + { + "Start": "f19c7cdf5ec749bd86d02477e817ecb4", + "End": "3ea4654985f64e3f9fc9260bb18c2a98", + "Id": "ed246728c07e49bc98d2cce8940f6026", + "IsHidden": "False" + }, + { + "Start": "c6abfc2d858e44269c96387d169deb77", + "End": "36701f033be549a5aa893c62760a51e4", + "Id": "940fae37738d4098826ff9de32fee925", + "IsHidden": "False" + }, + { + "Start": "b026d6b11c404f0cb5bab3df4b3b5f6e", + "End": "29853194c1ac417394c8bb3437b00c79", + "Id": "9774176e2dce4f91ba5a2d0dbc390ff8", + "IsHidden": "False" + }, + { + "Start": "40d7a094c08f4da09797006cc92b5f3a", + "End": "db7e040eeb2d457f930a4d780f84aa92", + "Id": "6fd92e6f579a4bac8e52585d930efc0b", + "IsHidden": "False" + }, + { + "Start": "53376034b2374b84baea64c33c779f58", + "End": "b01b2f492c454351a7172fc8d526725b", + "Id": "44f5d31771e34f15a33330da9283e5b6", + "IsHidden": "False" + }, + { + "Start": "3cdb5298462c46cdaab608d2c66b788c", + "End": "80aad24fdf43487080a0d8c08dee2510", + "Id": "c4cf353372c246639da9c1c4c3b5b3a5", + "IsHidden": "False" + }, + { + "Start": "4bbd9b5aedc84f7080b5199cfff59327", + "End": "d60e28d368b446eaa1da4560099bbf9f", + "Id": "36e13c336ac9453e877018bed1399c06", + "IsHidden": "False" + }, + { + "Start": "deaeb29dff6e46e3a8b81b1e7a9b792d", + "End": "5be2ea2cd876451dbf396b7c45cfe0e1", + "Id": "bf13a9e90c2c462aa5236c5d1189e686", + "IsHidden": "False" + }, + { + "Start": "80c4925068d24ede85bd3b4d8e842942", + "End": "0212e10e67e54d80906c696225a5cdfb", + "Id": "6356c91afe2243a78e16e16bf0fb6bf3", + "IsHidden": "False" + }, + { + "Start": "f5407de54e3f4c7cb8acee8ad285b98b", + "End": "508279f93a0240328ad0b0ef1a2a2b6c", + "Id": "5057f0b680a94db380e42fb178e920f4", + "IsHidden": "False" + }, + { + "Start": "b6eab5624e90445e801e391886881e68", + "End": "13e63dbbbe2c4773b28632d8cd68d026", + "Id": "c964fdeb6c994df1bd43b67a76210b64", + "IsHidden": "False" + }, + { + "Start": "4a1bdbd9b3914d5aac70657a7bf07712", + "End": "66669e1b67d24708a6ab7bb1fa179cf6", + "Id": "d49e635ddaf34256b53323c878bf80fd", + "IsHidden": "False" + }, + { + "Start": "0dd578546ee5429fb7831a861e466e9f", + "End": "a841f07b24904f74ae1681fde86a7ef2", + "Id": "5cc8a41245b247f69e2edd32974b997b", + "IsHidden": "False" + }, + { + "Start": "0dd578546ee5429fb7831a861e466e9f", + "End": "0f8e3caae88b4424ac0ad86e2e25cb6b", + "Id": "f4f4d72706034a698bbef0aed7179186", + "IsHidden": "False" + }, + { + "Start": "0dd578546ee5429fb7831a861e466e9f", + "End": "0f03147075434884aca235b2135cc560", + "Id": "29863df8a1284c389956bcc4270bfbb2", + "IsHidden": "False" + }, + { + "Start": "0dd578546ee5429fb7831a861e466e9f", + "End": "090bbc200e4844f8b49460ab0d2cc7f8", + "Id": "5f30011325d249268d9dd235ffe48986", + "IsHidden": "False" + }, + { + "Start": "0dd578546ee5429fb7831a861e466e9f", + "End": "a3823b7ba52446a1b8d58016a9dbd8ba", + "Id": "ed56531a4c1d40908f493d2e2b463d8d", + "IsHidden": "False" + }, + { + "Start": "0dd578546ee5429fb7831a861e466e9f", + "End": "ae416cb4cdee437ba25e2cf9113119c3", + "Id": "a4dff85c898c49dd9ff46aaf6bfaf837", + "IsHidden": "False" + }, + { + "Start": "0dd578546ee5429fb7831a861e466e9f", + "End": "10d48b62c4344e12a551cc2ca53b0055", + "Id": "c3d1b53190bf47d39db582c82059c6eb", + "IsHidden": "False" + }, + { + "Start": "ff18b08a9f274e2aa2dac250b0b3484a", + "End": "906c3335ca2946b6a0a5d8f30088c608", + "Id": "7245af7863b24f2c8d761c5f64a88e3b", + "IsHidden": "False" + }, + { + "Start": "6057ddc2dc88424dbc1ac6c49b9dfaad", + "End": "e93f04e7e6974168b3d7b0bdbf8580c8", + "Id": "666e3b8c1f1b42aaa8ef34ec8a225081", + "IsHidden": "False" + }, + { + "Start": "bb8e9670fcf44517945224d4c4dc3b30", + "End": "e35567174bdb4ce0b505f5eacc77f7be", + "Id": "df8b8414e9774835a8ede672cb69cfcd", + "IsHidden": "False" + }, + { + "Start": "004ddb16a21f4b948894c2aa8f90724b", + "End": "49715ec2fe4e44eeb90095c55cc5fa91", + "Id": "e608b84f483743f6942a71e2a8614e88", + "IsHidden": "False" + }, + { + "Start": "acbbbccf0d304f0f994b0d1a7b80beb6", + "End": "1b7b9a14f6b448d3a959c467a1fb343d", + "Id": "5712eaeb460c46a58d9e2df4855dfbe7", + "IsHidden": "False" + }, + { + "Start": "fb6a666d16484d8d8891eca870f34efa", + "End": "4ba5aceab7194c44a933128df8818b97", + "Id": "f53c7a62e1d24966a0074741f2932786", + "IsHidden": "False" + }, + { + "Start": "8dbfaecde2a74addbf094dd0c7fcce84", + "End": "c92a11e45bf245f58e9d329421483a7e", + "Id": "0c52878cf52f41a59a1fee856c8187cd", + "IsHidden": "False" + }, + { + "Start": "0a3dd444bc694514868fc7d635326467", + "End": "053b2631634844b58dd778ee0761b27e", + "Id": "b3701222d10241029be9a8da0355fbff", + "IsHidden": "False" + }, + { + "Start": "260a9477fd3741b29b3210944d51f3ca", + "End": "defddd9b887c4f80831b59afede9744c", + "Id": "a85a2fb39682433a8a4711056a6d3dc1", + "IsHidden": "False" + }, + { + "Start": "9a7554fc2286432e8965222097a7ff95", + "End": "b5f98f0d72114ab2ae1f64b84c7b0f7d", + "Id": "9d62bc54593b4c3cbd88d8233c8bdd8e", + "IsHidden": "False" + }, + { + "Start": "4f9138b2c9ed4832858135573f2c7b52", + "End": "705a5abeffba45c09909824acc5b79a4", + "Id": "a3b74dcc48ee49628f5316e13b595be7", + "IsHidden": "False" + }, + { + "Start": "1e8926f4aee34cb0a874ecba573115e0", + "End": "44a927ef0d78451fb4b14472e9374315", + "Id": "05d347cff18c490585c1c73024940c35", + "IsHidden": "False" + }, + { + "Start": "6870303c71cb4d4db6b372317931525e", + "End": "9525a8d127994a37aa51a7df1883d956", + "Id": "ca2a148677a84379aca2e2755494c8b2", + "IsHidden": "False" + }, + { + "Start": "5bcef4625f174b279ea132833ade6ff7", + "End": "681498283dd24172a6da1c33eed37614", + "Id": "f8562029b19f46fc80f2ae289a56ba0f", + "IsHidden": "False" + }, + { + "Start": "e612ab997ba441baa4a4b7b3182a6428", + "End": "6fdf687afdab4336833df2eec7d29c62", + "Id": "1f3143025a26419a9ba15837c2e7bf0f", + "IsHidden": "False" + }, + { + "Start": "66b3ae5af5024e458061b99a247a816b", + "End": "659d6f927ab8484d9c13780baadc0338", + "Id": "e9cbfd476e0e4150876e83720143a78d", + "IsHidden": "False" + }, + { + "Start": "1f0ced2a99c34d96a32586106c50b077", + "End": "b44303fb5ac04e72996c4715c9ccae2a", + "Id": "287a5d9557ba40afbf61d00a45fc645b", + "IsHidden": "False" + }, + { + "Start": "2e28f3851e5348ecb71b0eb793af3d01", + "End": "daeccd09685f4dbb9b2c67850416474e", + "Id": "de4668e33c0a4f9dbd9c0748c6b35986", + "IsHidden": "False" + }, + { + "Start": "bec4781dcdb74a19ad62e389910dbbee", + "End": "8309569d51634772a02fde8f14628dbc", + "Id": "2c5c70c7dfe242d4b91422cd7ea95ebe", + "IsHidden": "False" + }, + { + "Start": "fc07267461bf48e09baff17b050695b7", + "End": "ab9fe6798ab545689b3a0ab9fa5efd44", + "Id": "2c3bc2c0340c4851a4eda98b4b10df46", + "IsHidden": "False" + }, + { + "Start": "dd765fe445244bfeb00bcc449abfabcf", + "End": "a273f17a46464c87806c045647060d6a", + "Id": "00aff322b9864b189654c7f7d2ae90a2", + "IsHidden": "False" + }, + { + "Start": "e380f9f10a7f45d7a30e59fd87d299ee", + "End": "6f77156c72644e408ace58a97a0e2841", + "Id": "1d77f67d2c294755ab5edc089f3e4bd9", + "IsHidden": "False" + }, + { + "Start": "20f74d8c02ff435496d260fc4fc1b291", + "End": "a3c92e74245e4a0aae0bb59e2b5409b9", + "Id": "2e7c6950c3e44af89db44034353a53fb", + "IsHidden": "False" + }, + { + "Start": "2fe625a0b8c941f3819ed3b9276c3888", + "End": "273b98deefcf4996b16a42c9586e20ac", + "Id": "8e0b2210086f47a49ef26e145faaccd1", + "IsHidden": "False" + }, + { + "Start": "bb9eb22619fc4b62a765e9e8dde43064", + "End": "2da74c9f49194d99bab6fae5d8eba8a5", + "Id": "8c8a604e3fd349d189acbce3db73652c", + "IsHidden": "False" + }, + { + "Start": "c0ded1e7fde947e89f88b3122978ff8e", + "End": "786d2e724f134ea2b72911aa8750118e", + "Id": "21e2bd3095a3497eabe189504a1adb8e", + "IsHidden": "False" + }, + { + "Start": "c0ded1e7fde947e89f88b3122978ff8e", + "End": "9ded0a989b85425ea1e19ef4a3207458", + "Id": "33e2996e18e4400fabfd6fbaa6f968cf", + "IsHidden": "False" + }, + { + "Start": "c0ded1e7fde947e89f88b3122978ff8e", + "End": "4dfb95c3e4774f09bea66c3edc8ab55b", + "Id": "0598faac28204559964d685ea3349d23", + "IsHidden": "False" + }, + { + "Start": "c0ded1e7fde947e89f88b3122978ff8e", + "End": "c12c62199013485d820dbf9346ed45c0", + "Id": "d95e620780854bf0aee5131519065918", + "IsHidden": "False" + }, + { + "Start": "c0ded1e7fde947e89f88b3122978ff8e", + "End": "521d3072a4674cc6ba1aff0e9cbabcf9", + "Id": "ac429d954d9346439490cd20e4b4f439", + "IsHidden": "False" + }, + { + "Start": "c0ded1e7fde947e89f88b3122978ff8e", + "End": "399656b3c65349f8a40b8cde4aff9012", + "Id": "f540acd1f3f84b6bb634ecc7371b9da8", + "IsHidden": "False" + }, + { + "Start": "c0ded1e7fde947e89f88b3122978ff8e", + "End": "9f8a21ab5f57475a8617a12f897a65f4", + "Id": "6948318a29234e64a357d4e12741b3d8", + "IsHidden": "False" + }, + { + "Start": "7b6c7fe8dcdb41ef99804b8fafae03fc", + "End": "d6451fd2b6274f45ab6fb78021f6ba7d", + "Id": "80f25d5a90274003916173b8ae9c9bdc", + "IsHidden": "False" + }, + { + "Start": "7b6c7fe8dcdb41ef99804b8fafae03fc", + "End": "9970e5107c694e85bd3692938e1cd5fb", + "Id": "0e88552a871e423b8ccc5c6b225c3e67", + "IsHidden": "False" + }, + { + "Start": "7b6c7fe8dcdb41ef99804b8fafae03fc", + "End": "e8f9d751ba404f6da8dca5f0186343a6", + "Id": "1452e4e991844f80b5dc136e5780a6dc", + "IsHidden": "False" + }, + { + "Start": "7b6c7fe8dcdb41ef99804b8fafae03fc", + "End": "967cb34427e74f70814379a9561ac34c", + "Id": "d4041eb3c02d46afb6fa8b42d193eb4f", + "IsHidden": "False" + }, + { + "Start": "7b6c7fe8dcdb41ef99804b8fafae03fc", + "End": "aa43c385fa5445f19f8921011b9ab2ba", + "Id": "50b353b2f2ad441096017bd38b939543", + "IsHidden": "False" + }, + { + "Start": "7b6c7fe8dcdb41ef99804b8fafae03fc", + "End": "5b96e579118a4b26970044a83066e0af", + "Id": "dd4f12a9d6c240ed83df38ac020c8626", + "IsHidden": "False" + }, + { + "Start": "7b6c7fe8dcdb41ef99804b8fafae03fc", + "End": "c907616375c44fc6a80448daabaeee65", + "Id": "498b46b3ea1e4908834c82510418c0b6", + "IsHidden": "False" + }, + { + "Start": "42f48a91b3c14b9e902927913778eb71", + "End": "a91d419c112b4f83888d9747c8ccc3e9", + "Id": "f91723d41c0748f38bb258fbb0d6a94f", + "IsHidden": "False" + }, + { + "Start": "3a14b51c437b407e875181459b0358b4", + "End": "20381616bbc34991b0f4ab831c97bdd1", + "Id": "8136bff46fb2477cb995f9a5e2cd2496", + "IsHidden": "False" + }, + { + "Start": "5614dfe687c848f487771956e513a7c1", + "End": "c3590f7d4d1140e28fde03acd5a1d609", + "Id": "ecf6aaad322847c6a34eadc011e8d1d5", + "IsHidden": "False" + }, + { + "Start": "4200cc0247a4402b8921ee5139821156", + "End": "a93f5cb50ff94bcdba84937fbcea985f", + "Id": "70001f7291e54066aa2e05aae9ddb8d2", + "IsHidden": "False" + }, + { + "Start": "f3558e04c85849d6bb66a213c69fdbf6", + "End": "386ab228ea8e417890ff864106012e28", + "Id": "d51f9041882a467993bb64eebe4a1c08", + "IsHidden": "False" + }, + { + "Start": "e86085b8bb2449679f1233745c00b552", + "End": "598fac63895040ff90d239bfeb8c8956", + "Id": "f97be65d7248477d9989dcb8fc6f5294", + "IsHidden": "False" + }, + { + "Start": "f3de2e9871d8440382662775138b275e", + "End": "b935c9214e384b588858dde55f065a69", + "Id": "de586bb62cc4451bb85a5e4adebcbe83", + "IsHidden": "False" + }, + { + "Start": "750c594ed20543d9aaa32c7f0882353e", + "End": "0d60b65aff8f480d970b84aea6d6f9af", + "Id": "4e9c838e08e14384a07b6dd60d57a76a", + "IsHidden": "False" + }, + { + "Start": "ad3a68306ff943f3991f67cf3f53ebac", + "End": "77071688e24b45c1955c1c7687ce1551", + "Id": "39c65d9524194c7ab91c93e8f38a1b9a", + "IsHidden": "False" + }, + { + "Start": "aaf5e44e7f484e79be9660a32486f883", + "End": "8fcb355c78bb4d3ab34bcf29e6f35ffe", + "Id": "95df94e115584fee827f49fb6a1e7d8e", + "IsHidden": "False" + }, + { + "Start": "8e2322850f2641369878508094db12f9", + "End": "80cd54c2eccc4aed8740421990524753", + "Id": "30ecaeb3467c4f4ba894d10c814ca448", + "IsHidden": "False" + }, + { + "Start": "f9d632948a2742bfac3a039ff08bcffe", + "End": "ac643431e1dd4ff3ac1c9d2deff8d030", + "Id": "7d28ca04616842faba3fe4dba8f1797b", + "IsHidden": "False" + }, + { + "Start": "a7d5b614ab564b8a8c58be617304e124", + "End": "1171f8be63644239a2333a8845038e3b", + "Id": "7fd8af93859042eba73f520a4cb7b732", + "IsHidden": "False" + }, + { + "Start": "ef33d1b366c246f78dcdc404abfe5b74", + "End": "d550230610f14d46a414d4fd8e14ff81", + "Id": "4376d36db30944fbbba1163486ec0643", + "IsHidden": "False" + }, + { + "Start": "34789e6bd6e840d38a7d0325ed72c271", + "End": "d419ccecc1cc458b86ac549913924094", + "Id": "9abcc62d64b14206b58cd82f514d849b", + "IsHidden": "False" + }, + { + "Start": "7a1b24cc3ed342729714c052fc2f3d1e", + "End": "2049dd974161403292b5fc9370bbc12e", + "Id": "811b4011f0bf4a4d819453efb1dc6a70", + "IsHidden": "False" + }, + { + "Start": "28fb57a7c1e74ccc8941865666802379", + "End": "9d74c52e5b304dae80ce660e689409a8", + "Id": "da5113cd94f8454fb1fc31d61cb7762c", + "IsHidden": "False" + }, + { + "Start": "f9daac13e0574ccebcd024526d075aa7", + "End": "8b75e746298a417bb5155eddbf4859db", + "Id": "954c3b6d3fe34bfa8c5719a2f78105d9", + "IsHidden": "False" + } + ], + "Dependencies": [], + "NodeLibraryDependencies": [], + "Thumbnail": "", + "GraphDocumentationURL": null, + "ExtensionWorkspaceData": [ + { + "ExtensionGuid": "28992e1d-abb9-417f-8b1b-05e053bee670", + "Name": "Properties", + "Version": "3.0", + "Data": {} + } + ], + "Author": "None provided", + "Linting": { + "activeLinter": "None", + "activeLinterId": "7b75fb44-43fd-4631-a878-29f4d5d8399a", + "warningCount": 0, + "errorCount": 0 + }, + "Bindings": [], + "View": { + "Dynamo": { + "ScaleFactor": 1.0, + "HasRunWithoutCrash": true, + "IsVisibleInDynamoLibrary": true, + "Version": "3.0.0.5795", + "RunType": "Automatic", + "RunPeriod": "1000" + }, + "Camera": { + "Name": "_Background Preview", + "EyeX": 3.9348859786987305, + "EyeY": 16.133285522460938, + "EyeZ": -14.816829681396484, + "LookX": 3.037425994873047, + "LookY": -14.537761688232422, + "LookZ": 7.6871795654296875, + "UpX": 0.27309176325798035, + "UpY": 0.6691304445266724, + "UpZ": 0.6911478638648987 + }, + "ConnectorPins": [], + "NodeViews": [ + { + "Id": "8d066dd6cc4b4e8ea8dc3581560b3c0f", + "Name": "Curve.Reverse", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 3051.896201860751, + "Y": 3850.530093145594 + }, + { + "Id": "f37cca417d17411188f6167addcc66f2", + "Name": "Data.StringifyJSON", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 3466.2689299148533, + "Y": 1320.4971240710397 + }, + { + "Id": "828b68c83d8f4510a0bbe62ecb75ccc1", + "Name": "Data.StringifyJSON", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 3506.6369683276644, + "Y": 4070.1065584674925 + }, + { + "Id": "699356af163a46089ddc3b068dec67c4", + "Name": "Data.ParseJSON", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 3776.2550437469067, + "Y": 1321.5627076266323 + }, + { + "Id": "701f4d77dcaa4e829a99f3e572dcfd94", + "Name": "Geometry.IsAlmostEqualTo", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 4194.018852445935, + "Y": 1090.107895499953 + }, + { + "Id": "03764e6e1e914792a3919df9eb174e74", + "Name": "Data.ParseJSON", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 3831.6159770919303, + "Y": 4070.5862999649908 + }, + { + "Id": "f1d69076c8834b589e2ccf4d09755c69", + "Name": "Geometry.IsAlmostEqualTo", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 4214.221921443553, + "Y": 3719.4514162105525 + }, + { + "Id": "159dbed1f78342fda432521494ad2be3", + "Name": "Geometry.Mirror", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 3096.229248589898, + "Y": 8866.74271233158 + }, + { + "Id": "a75376bd94aa436b9248c771143aff5f", + "Name": "Data.ParseJSON", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 3829.5581793223355, + "Y": 9176.87481576432 + }, + { + "Id": "8e4762573c69400482c6d0b3add079c7", + "Name": "Geometry.IsAlmostEqualTo", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 4183.044865376148, + "Y": 9009.689473062537 + }, + { + "Id": "addffa1b58634b1494ae454aeccd88b8", + "Name": "Data.StringifyJSON", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 3537.8343123196064, + "Y": 9176.735800400493 + }, + { + "Id": "1ec8a5b068b64bbf82b52f9174172823", + "Name": "Plane.XZ", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2855.681300671741, + "Y": 8951.492444048865 + }, + { + "Id": "e7bccf12d86e4cafae8bdcbef8ce3fcc", + "Name": "CoordinateSystem.ByOrigin", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1452.8633748649277, + "Y": 1654.697235747441 + }, + { + "Id": "5e2455a2cf384d2386c37655a5fb8986", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1198.8633748649277, + "Y": 1689.8347357474418 + }, + { + "Id": "2e003ad9926545ee8d7f8f528128bf6d", + "Name": "Number", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2512.5539299339707, + "Y": 10214.879608234205 + }, + { + "Id": "563db764863d4e0f8456bec0be91e51d", + "Name": "Geometry.Transform", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 3149.5264268259734, + "Y": 9896.970648553672 + }, + { + "Id": "8861ce7f91624cc685d5e77f6846daf3", + "Name": "CoordinateSystem.ByOrigin", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2782.051353613303, + "Y": 9932.388951057963 + }, + { + "Id": "a9d3831fda544d828c96166dd6496e4d", + "Name": "Geometry.IsAlmostEqualTo", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 4180.971029527161, + "Y": 9971.428521641126 + }, + { + "Id": "5207e08dc89441399926207237e2114a", + "Name": "Point.ByCoordinates", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1452.8633748649277, + "Y": 1866.697235747441 + }, + { + "Id": "2d99d87f0e414a79b063d8c707cb7a77", + "Name": "CoordinateSystem.Scale", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2725.947038938373, + "Y": 10124.547200553998 + }, + { + "Id": "497ff1404efc4ccc8b9470d18933512d", + "Name": "Data.ParseJSON", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 3849.2944217214326, + "Y": 10154.607921724835 + }, + { + "Id": "c8b052c3f7ff41c699224fad46d60d6c", + "Name": "Data.StringifyJSON", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 3557.5705547187026, + "Y": 10154.46890636101 + }, + { + "Id": "48c70fae9a334375b39ecab1258a9b1d", + "Name": "CoordinateSystem.Rotate", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1831.3633748649277, + "Y": 1921.697235747441 + }, + { + "Id": "4d263f66316f4354b60efbbed880c736", + "Name": "Vector.ByCoordinates", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1452.8633748649277, + "Y": 2078.697235747441 + }, + { + "Id": "09ffbb6c715e4b7db22fb0d409875ecc", + "Name": "Number", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1452.8633748649277, + "Y": 2290.697235747441 + }, + { + "Id": "a29aa179c7ae4069a6d9c6d2055ab845", + "Name": "List.AllTrue Final", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 10364.829015993053, + "Y": 8406.482243167524 + }, + { + "Id": "843b3eff62b54f40aa92b44527783938", + "Name": "List Create", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 9848.648242894973, + "Y": 8433.637761476675 + }, + { + "Id": "d0cf8ef91da047aa8ef9cf09a02b8b8c", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2366.691881245393, + "Y": 1807.576697772316 + }, + { + "Id": "b32960df47ee4ed7a81be7be4828751a", + "Name": "List.Join", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 3261.421055232727, + "Y": 1805.5284359122059 + }, + { + "Id": "1d9f05f749c34102a42b07422810041b", + "Name": "List.Flatten", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 10073.41901239672, + "Y": 8406.134665316273 + }, + { + "Id": "6c1a320bcd89467ebd7d3012aeec509e", + "Name": "EllipseArc.ByPlaneRadiiAngles", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2826.229782410566, + "Y": 1865.1710357541756 + }, + { + "Id": "55bf402f19e542c986d4914c1075a9ad", + "Name": "CoordinateSystem.XYPlane", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2167.718767887604, + "Y": 1652.363460088343 + }, + { + "Id": "6ef2f4fb29c7403a890cefd122aaa184", + "Name": "EllipseArc.ByPlaneRadiiAngles", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2817.8168416144467, + "Y": 1596.2267466204817 + }, + { + "Id": "5ce6da9a5d044956848d63d8fc3e7080", + "Name": "Data.StringifyJSON", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 3525.970224323962, + "Y": 2343.5952343888293 + }, + { + "Id": "9f622e9a33a9446eabde6ca4ff301d55", + "Name": "Data.ParseJSON", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 3835.956338156016, + "Y": 2344.660817944422 + }, + { + "Id": "09e8782df6e741b983af491ba6b73261", + "Name": "Geometry.IsAlmostEqualTo", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 4253.720146855044, + "Y": 2113.206005817742 + }, + { + "Id": "b096d14188dd40bbb49cc9d02f0bde20", + "Name": "Data.ParseJSON", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 3736.780262923886, + "Y": 6318.428121664828 + }, + { + "Id": "f922dab6d5a74234860e435d3ccaff33", + "Name": "Data.StringifyJSON", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 3411.80125415962, + "Y": 6317.94838016733 + }, + { + "Id": "2b9fc65d09234d2289ad650874a69856", + "Name": "Geometry.IsAlmostEqualTo", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 4119.386207275508, + "Y": 5967.293237910389 + }, + { + "Id": "04f3ead9381142bf9afe1962e3e8f4dd", + "Name": "Curve.Reverse", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2915.961786766841, + "Y": 6193.971066999073 + }, + { + "Id": "992a2c06f3ee45eea76007b624ecf9fc", + "Name": "List.Join", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 7327.4066048848445, + "Y": 1914.5317984255685 + }, + { + "Id": "9da15c3e62594147bd62b462cdbf4aa5", + "Name": "EllipseArc.MinorAxis", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 6953.95772885646, + "Y": 3132.537369987057 + }, + { + "Id": "a5c34ff37de345509ee4daa145e87e19", + "Name": "EllipseArc.MajorAxis", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 6948.69829489541, + "Y": 2954.908225927258 + }, + { + "Id": "494ce10abae343279ddae6b0bbba5f50", + "Name": "EllipseArc.SweepAngle", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 6941.063122143637, + "Y": 2801.2629885551614 + }, + { + "Id": "78aead17842f4c668611226d67c330c5", + "Name": "EllipseArc.StartAngle", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 6941.08360600758, + "Y": 2659.6353745076262 + }, + { + "Id": "ef2ea86c01a641a59d4b7500c39bdbb8", + "Name": "EllipseArc.MinorAxis", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 6985.331442145524, + "Y": 1980.222919939602 + }, + { + "Id": "f7fe03c5ceb24dd0b7b36a396f728c1f", + "Name": "EllipseArc.MajorAxis", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 6988.054944252979, + "Y": 1847.8304136013203 + }, + { + "Id": "2073480ce5804a56bddb0f1a24acd69a", + "Name": "EllipseArc.StartAngle", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 6998.464940951847, + "Y": 1548.5258714451102 + }, + { + "Id": "696013a3085846b8b794bac4dab62a13", + "Name": "EllipseArc.SweepAngle", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 6993.72466494871, + "Y": 1691.5241975397223 + }, + { + "Id": "032a5f5c6a69415aa3016d270bbc534c", + "Name": "==", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 7769.210854775815, + "Y": 2819.4650151267433 + }, + { + "Id": "f7ebbfba6c1140869e031366ea777364", + "Name": "Watch", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 6370.10777849156, + "Y": 2526.3893456073624 + }, + { + "Id": "2c0c071c800c4fd7a0f57ade01a9d306", + "Name": "Watch", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 6391.468802433984, + "Y": 1551.828134342452 + }, + { + "Id": "6152e81e7b0a485aa86a64d39c79adbd", + "Name": "List.AllTrue", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 8307.6370393263, + "Y": 1645.514728259413 + }, + { + "Id": "e9ed2457c2654f66a6befab35c5d9eec", + "Name": "List.Join", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 8083.00002591177, + "Y": 1645.6252949772183 + }, + { + "Id": "3b099612e2484cf1aa6b2abb9924895c", + "Name": "Vector.IsAlmostEqualTo", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 7642.80680437021, + "Y": 2063.1787255898817 + }, + { + "Id": "63ba465577864b89ab824a1a3988f2ec", + "Name": "==", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 7646.508597393781, + "Y": 1679.4604804451114 + }, + { + "Id": "f4591f5d41d64b87a545cb5d1c24a0db", + "Name": "Geometry.IsAlmostEqualTo", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 7619.207099693829, + "Y": 1340.1137729347433 + }, + { + "Id": "e40758455ac94353b048327dafa50eae", + "Name": "Curve.StartPoint", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 6979.014256512466, + "Y": 2337.124151456102 + }, + { + "Id": "10535f3cbb164760a7d746438a125a8c", + "Name": "List.Join", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 7313.132804648944, + "Y": 2387.237304596268 + }, + { + "Id": "78f03c5b17f64c138a60d425621e5e43", + "Name": "Curve.EndPoint", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 6978.668811596084, + "Y": 2484.088949688187 + }, + { + "Id": "c8225366add848909844f4217905ae72", + "Name": "Curve.Normal", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 6948.721335273946, + "Y": 3301.0176496116787 + }, + { + "Id": "8b9ebca2ac3d40539d6fe1f7e1236dd0", + "Name": "List.Join", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 7327.010568833473, + "Y": 1311.5148202847226 + }, + { + "Id": "957a223a5af64e08a26a07a69ca290fe", + "Name": "Curve.Normal", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 6984.921928727267, + "Y": 2111.819313093121 + }, + { + "Id": "e4d106cd36bc4b28960445edb986d255", + "Name": "Curve.EndPoint", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 6992.546575780614, + "Y": 1408.3664653766405 + }, + { + "Id": "18ebfdaf7f6047d6b6e7bf61c4a1b33d", + "Name": "Curve.StartPoint", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 6992.892020696994, + "Y": 1261.4016671445556 + }, + { + "Id": "cb0f1185810d4fc190278708fc569ed1", + "Name": "List.Join", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 7305.950446651926, + "Y": 3031.06427224807 + }, + { + "Id": "23cf931405174b989b27a73120b22053", + "Name": "Watch", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 6406.047688258391, + "Y": 3988.0681682918303 + }, + { + "Id": "9a44eaede3c446cf9af7431e8c20835a", + "Name": "EllipseArc.MinorAxis", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 6999.910327969931, + "Y": 4416.46295388898 + }, + { + "Id": "3ced2b548c2e44dc8a67f7d477db74d7", + "Name": "EllipseArc.MajorAxis", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 7002.633830077386, + "Y": 4284.070447550699 + }, + { + "Id": "dc29fbf60c1e4f0aa37ef74a19605176", + "Name": "EllipseArc.StartAngle", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 7013.043826776254, + "Y": 3984.7659053944885 + }, + { + "Id": "53cc5f58c97643f7a3214696835d89cd", + "Name": "Curve.EndPoint", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 7007.125461605021, + "Y": 3844.606499326019 + }, + { + "Id": "38d5e8bb90244cc09befb5611ed0750d", + "Name": "Curve.StartPoint", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 7007.470906521401, + "Y": 3697.641701093934 + }, + { + "Id": "e111936fc9864137a97bca3d3559746b", + "Name": "List.Join", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 7341.985490709251, + "Y": 4350.771832374947 + }, + { + "Id": "6e9e1c5ad87540ff8b70751403328e14", + "Name": "EllipseArc.MinorAxis", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 6968.5366146808665, + "Y": 5568.777403936436 + }, + { + "Id": "061a601e48e64715bf00e17c4b801729", + "Name": "EllipseArc.MajorAxis", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 6963.277180719817, + "Y": 5391.148259876636 + }, + { + "Id": "0736c2e6e0234deebc2e3c357e7a863d", + "Name": "EllipseArc.SweepAngle", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 6955.642007968044, + "Y": 5237.503022504539 + }, + { + "Id": "f41f740083054098b437f506277f0548", + "Name": "EllipseArc.StartAngle", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 6955.662491831987, + "Y": 5095.875408457005 + }, + { + "Id": "c2c32450f71b430aa5a0d597b535ad9f", + "Name": "EllipseArc.SweepAngle", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 7008.3035507731165, + "Y": 4127.7642314891 + }, + { + "Id": "b4bbc256b877481aaf5c85fffcdff36a", + "Name": "==", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 7783.789740600221, + "Y": 5255.705049076121 + }, + { + "Id": "ed4c8ac3cdd347e7b030f0bf94cf83e3", + "Name": "Watch", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 6384.6866643159665, + "Y": 4962.62937955674 + }, + { + "Id": "8a61342503154be98114725e1a035fd9", + "Name": "Vector.IsAlmostEqualTo", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 7657.3856901946165, + "Y": 4499.41875953926 + }, + { + "Id": "f6bc06277ace450dbfb951d8cc466bad", + "Name": "==", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 7661.087483218188, + "Y": 4115.70051439449 + }, + { + "Id": "c4675648d2ac49669ab7e3ce3ef33fcf", + "Name": "Geometry.IsAlmostEqualTo", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 7633.785985518236, + "Y": 3776.3538068841217 + }, + { + "Id": "3f0d6842fe8441dfb67e53245aad1c62", + "Name": "Curve.StartPoint", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 6993.593142336873, + "Y": 4773.36418540548 + }, + { + "Id": "f7f96f0fc4e34e9485cd6706fb71b155", + "Name": "List.Join", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 7327.711690473351, + "Y": 4823.4773385456465 + }, + { + "Id": "b2e941a4e18c41aa86233986ab6e1b51", + "Name": "Curve.EndPoint", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 6993.247697420491, + "Y": 4920.328983637564 + }, + { + "Id": "8ae9a2a41a314c18a69caba0d0950cdb", + "Name": "List.Join", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 7341.58945465788, + "Y": 3747.754854234101 + }, + { + "Id": "6823f55202564264ae278373763a8bf6", + "Name": "Curve.Normal", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 6999.500814551674, + "Y": 4548.059347042499 + }, + { + "Id": "49bc586f66854b83affee259c02b0296", + "Name": "List.Join", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 7320.5293324763325, + "Y": 5467.3043061974495 + }, + { + "Id": "c046ed4937414b84b3d1ffde8144b0bd", + "Name": "Curve.Normal", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 6963.300221098353, + "Y": 5737.257683561058 + }, + { + "Id": "d774eea9887d4ba59ff652de77a59f36", + "Name": "List.Join", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 8097.578911736176, + "Y": 4081.8653289265967 + }, + { + "Id": "7093d0bcddcb4ca79452fc5ce60a7d91", + "Name": "List.AllTrue", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 8322.215925150707, + "Y": 4081.7547622087914 + }, + { + "Id": "1c6a90dcd1a54e898067e595fdeae51e", + "Name": "Curve.StartPoint", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 6957.6653487492285, + "Y": 6170.475599210877 + }, + { + "Id": "35103a70298a48ec963975233308a7c9", + "Name": "Curve.EndPoint", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 6957.3199038328485, + "Y": 6317.440397442962 + }, + { + "Id": "14f4e1966aaa44e88ab701a5eeea5f7a", + "Name": "Curve.Normal", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 6949.6952567795015, + "Y": 7020.893245159443 + }, + { + "Id": "5a4a18a39f0841309b9159e07464e45b", + "Name": "List.Join", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 7291.783896885708, + "Y": 6220.588752351045 + }, + { + "Id": "4016dbb6bcb84d57a106c84592c6c85d", + "Name": "Curve.Normal", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 6913.494663326181, + "Y": 8210.091581678 + }, + { + "Id": "676cea3e30a04ded9a09192a8cdb9559", + "Name": "Curve.EndPoint", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 6943.4421396483185, + "Y": 7393.162881754508 + }, + { + "Id": "3f657d66b6744ed995c75029d6399faa", + "Name": "List.Join", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 7277.906132701179, + "Y": 7296.31123666259 + }, + { + "Id": "94e964fda36348d39cfc5c81b3e4e854", + "Name": "Curve.StartPoint", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 6943.7875845647, + "Y": 7246.198083522424 + }, + { + "Id": "31793908340e4b81848ad117749f842a", + "Name": "Geometry.IsAlmostEqualTo", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 7583.9804277460635, + "Y": 6249.187705001064 + }, + { + "Id": "ef0d4b5b97e64e63a7edeb9ad47745f7", + "Name": "==", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 7611.2819254460155, + "Y": 6588.534412511433 + }, + { + "Id": "b37c27e413b547d2aae79de2623cdf0d", + "Name": "Vector.IsAlmostEqualTo", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 7607.580132422444, + "Y": 6972.252657656203 + }, + { + "Id": "1f1b32ffae3b46afaf440cf5c28928dd", + "Name": "List.Join", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 8047.773353964003, + "Y": 6554.69922704354 + }, + { + "Id": "b9f4f9f432df402187936de0d8104d29", + "Name": "List.AllTrue", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 8272.410367378536, + "Y": 6554.588660325735 + }, + { + "Id": "42b645200ecc4c8fb9ab3a0dc2874fb7", + "Name": "Watch", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 6356.242130486218, + "Y": 6460.902066408773 + }, + { + "Id": "1345ef3306a24666813a1683c2b62c21", + "Name": "Watch", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 6334.881106543794, + "Y": 7435.4632776736835 + }, + { + "Id": "a42354e080e04da888492285ab0bfc90", + "Name": "==", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 7733.984182828048, + "Y": 7728.538947193065 + }, + { + "Id": "95750af0f940439fae33513eb957fc61", + "Name": "EllipseArc.SweepAngle", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 6958.497993000944, + "Y": 6600.598129606044 + }, + { + "Id": "9d1247a67c254d8fba848237558fd210", + "Name": "EllipseArc.StartAngle", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 6963.238269004081, + "Y": 6457.599803511432 + }, + { + "Id": "99a1a943bd4b4370a0697e7ac5da21e1", + "Name": "EllipseArc.MajorAxis", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 6952.828272305213, + "Y": 6756.904345667641 + }, + { + "Id": "2d8a1dc80b5f4b938d58cdfc18d526e6", + "Name": "EllipseArc.MinorAxis", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 6950.104770197759, + "Y": 6889.296852005924 + }, + { + "Id": "825e9698699445c3953211195aad81b5", + "Name": "EllipseArc.StartAngle", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 6905.856934059814, + "Y": 7568.709306573948 + }, + { + "Id": "4587eeb48728469f88f173d2d254ff2b", + "Name": "EllipseArc.SweepAngle", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 6905.836450195871, + "Y": 7710.336920621483 + }, + { + "Id": "4d33d83e82de4568b8e030eece9d8306", + "Name": "EllipseArc.MajorAxis", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 6913.471622947644, + "Y": 7863.98215799358 + }, + { + "Id": "7c599993283c4bf787f3486da95351e8", + "Name": "EllipseArc.MinorAxis", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 6918.731056908694, + "Y": 8041.611302053378 + }, + { + "Id": "1308b9604658466e89db9544d1740da2", + "Name": "List.Join", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 7292.179932937079, + "Y": 6823.60573049189 + }, + { + "Id": "689b89397bfc4421968bb8d5f189fbea", + "Name": "List.Join", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 7270.72377470416, + "Y": 7940.138204314391 + }, + { + "Id": "01ba04b6974c463c8e961b21e7f8cc03", + "Name": "List Create", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 8897.331835163313, + "Y": 9071.588141319075 + }, + { + "Id": "aeb58fc01bbc4e3b8e3a6bb674595fbd", + "Name": "List.Flatten", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 9152.698749178358, + "Y": 9079.780547090852 + }, + { + "Id": "a73925f57d2c44d7994a2c4d77bf8581", + "Name": "List.AllFalse", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 9484.976389688025, + "Y": 9085.725619127508 + }, + { + "Id": "fdab29719ed447a89f8a0c6d158f6306", + "Name": "==", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 4383.556994469564, + "Y": 1488.1635647693256 + }, + { + "Id": "5998b47b8b30432baa88d94ab6f8f0c0", + "Name": "Object.Type", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 4075.5053561880495, + "Y": 1570.0559296931283 + }, + { + "Id": "a3281447bc764bb0851d0aa9db6fe2f6", + "Name": "Object.Type", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 4079.0846778658843, + "Y": 1424.8051776850762 + }, + { + "Id": "6e569bdedbc34772898c7e7a3f67911b", + "Name": "List Create", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 5673.729036085928, + "Y": 8434.436353823632 + }, + { + "Id": "77c1651772ec46ae952d2d45f8ea6f05", + "Name": "List Create", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 5683.094318278314, + "Y": 9056.516332747327 + } + ], + "Annotations": [ + { + "Id": "1eaf6aca2f3d4a6cad135009fc4de5c4", + "Title": "All True", + "DescriptionText": "", + "IsExpanded": true, + "WidthAdjustment": 0.0, + "HeightAdjustment": 0.0, + "Nodes": [ + "a29aa179c7ae4069a6d9c6d2055ab845" + ], + "HasNestedGroups": false, + "Left": 10354.829015993053, + "Top": 8333.482243167524, + "Width": 216.5, + "Height": 205.0, + "FontSize": 36.0, + "GroupStyleId": "00000000-0000-0000-0000-000000000000", + "InitialTop": 8406.482243167524, + "InitialHeight": 145.0, + "TextblockHeight": 63.0, + "Background": "#FFC1D676" + }, + { + "Id": "39f6c6ca1c994b9da7da8c9a0c2fff5b", + "Title": "Check Props", + "DescriptionText": "", + "IsExpanded": true, + "WidthAdjustment": 0.0, + "HeightAdjustment": 0.0, + "Nodes": [ + "18ebfdaf7f6047d6b6e7bf61c4a1b33d", + "e4d106cd36bc4b28960445edb986d255", + "957a223a5af64e08a26a07a69ca290fe", + "8b9ebca2ac3d40539d6fe1f7e1236dd0", + "c8225366add848909844f4217905ae72", + "78f03c5b17f64c138a60d425621e5e43", + "10535f3cbb164760a7d746438a125a8c", + "e40758455ac94353b048327dafa50eae", + "f4591f5d41d64b87a545cb5d1c24a0db", + "63ba465577864b89ab824a1a3988f2ec", + "3b099612e2484cf1aa6b2abb9924895c", + "e9ed2457c2654f66a6befab35c5d9eec", + "6152e81e7b0a485aa86a64d39c79adbd", + "2c0c071c800c4fd7a0f57ade01a9d306", + "f7ebbfba6c1140869e031366ea777364", + "032a5f5c6a69415aa3016d270bbc534c", + "696013a3085846b8b794bac4dab62a13", + "2073480ce5804a56bddb0f1a24acd69a", + "f7fe03c5ceb24dd0b7b36a396f728c1f", + "ef2ea86c01a641a59d4b7500c39bdbb8", + "78aead17842f4c668611226d67c330c5", + "494ce10abae343279ddae6b0bbba5f50", + "a5c34ff37de345509ee4daa145e87e19", + "9da15c3e62594147bd62b462cdbf4aa5", + "992a2c06f3ee45eea76007b624ecf9fc", + "cb0f1185810d4fc190278708fc569ed1" + ], + "HasNestedGroups": false, + "Left": 6360.10777849156, + "Top": 1188.4016671445556, + "Width": 2133.529260834741, + "Height": 2244.615982467123, + "FontSize": 36.0, + "GroupStyleId": "00000000-0000-0000-0000-000000000000", + "InitialTop": 1261.4016671445556, + "InitialHeight": 2184.615982467123, + "TextblockHeight": 63.0, + "Background": "#FFC1D676" + }, + { + "Id": "cb7eba3b8df940a3b920847c61de6c9a", + "Title": "Check Props", + "DescriptionText": "", + "IsExpanded": true, + "WidthAdjustment": 0.0, + "HeightAdjustment": 0.0, + "Nodes": [ + "38d5e8bb90244cc09befb5611ed0750d", + "53cc5f58c97643f7a3214696835d89cd", + "6823f55202564264ae278373763a8bf6", + "8ae9a2a41a314c18a69caba0d0950cdb", + "c046ed4937414b84b3d1ffde8144b0bd", + "b2e941a4e18c41aa86233986ab6e1b51", + "f7f96f0fc4e34e9485cd6706fb71b155", + "3f0d6842fe8441dfb67e53245aad1c62", + "c4675648d2ac49669ab7e3ce3ef33fcf", + "f6bc06277ace450dbfb951d8cc466bad", + "8a61342503154be98114725e1a035fd9", + "d774eea9887d4ba59ff652de77a59f36", + "7093d0bcddcb4ca79452fc5ce60a7d91", + "23cf931405174b989b27a73120b22053", + "ed4c8ac3cdd347e7b030f0bf94cf83e3", + "b4bbc256b877481aaf5c85fffcdff36a", + "c2c32450f71b430aa5a0d597b535ad9f", + "dc29fbf60c1e4f0aa37ef74a19605176", + "3ced2b548c2e44dc8a67f7d477db74d7", + "9a44eaede3c446cf9af7431e8c20835a", + "f41f740083054098b437f506277f0548", + "0736c2e6e0234deebc2e3c357e7a863d", + "061a601e48e64715bf00e17c4b801729", + "6e9e1c5ad87540ff8b70751403328e14", + "e111936fc9864137a97bca3d3559746b", + "49bc586f66854b83affee259c02b0296" + ], + "HasNestedGroups": false, + "Left": 6374.6866643159665, + "Top": 3624.641701093934, + "Width": 2133.529260834741, + "Height": 2244.615982467124, + "FontSize": 36.0, + "GroupStyleId": "00000000-0000-0000-0000-000000000000", + "InitialTop": 3697.641701093934, + "InitialHeight": 2184.615982467124, + "TextblockHeight": 63.0, + "Background": "#FFC1D676" + }, + { + "Id": "15934ba3af4c4d9cbc878031ed4fda86", + "Title": "Check Props", + "DescriptionText": "", + "IsExpanded": true, + "WidthAdjustment": 0.0, + "HeightAdjustment": 0.0, + "Nodes": [ + "1c6a90dcd1a54e898067e595fdeae51e", + "35103a70298a48ec963975233308a7c9", + "14f4e1966aaa44e88ab701a5eeea5f7a", + "5a4a18a39f0841309b9159e07464e45b", + "4016dbb6bcb84d57a106c84592c6c85d", + "676cea3e30a04ded9a09192a8cdb9559", + "3f657d66b6744ed995c75029d6399faa", + "94e964fda36348d39cfc5c81b3e4e854", + "31793908340e4b81848ad117749f842a", + "ef0d4b5b97e64e63a7edeb9ad47745f7", + "b37c27e413b547d2aae79de2623cdf0d", + "1f1b32ffae3b46afaf440cf5c28928dd", + "b9f4f9f432df402187936de0d8104d29", + "42b645200ecc4c8fb9ab3a0dc2874fb7", + "1345ef3306a24666813a1683c2b62c21", + "a42354e080e04da888492285ab0bfc90", + "95750af0f940439fae33513eb957fc61", + "9d1247a67c254d8fba848237558fd210", + "99a1a943bd4b4370a0697e7ac5da21e1", + "2d8a1dc80b5f4b938d58cdfc18d526e6", + "825e9698699445c3953211195aad81b5", + "4587eeb48728469f88f173d2d254ff2b", + "4d33d83e82de4568b8e030eece9d8306", + "7c599993283c4bf787f3486da95351e8", + "1308b9604658466e89db9544d1740da2", + "689b89397bfc4421968bb8d5f189fbea" + ], + "HasNestedGroups": false, + "Left": 6324.881106543794, + "Top": 6097.475599210877, + "Width": 2133.5292608347418, + "Height": 2244.615982467123, + "FontSize": 36.0, + "GroupStyleId": "00000000-0000-0000-0000-000000000000", + "InitialTop": 6170.475599210877, + "InitialHeight": 2184.615982467123, + "TextblockHeight": 63.0, + "Background": "#FFC1D676" + }, + { + "Id": "e1f3f0e8c91c4bdc947133585f107f46", + "Title": "All False", + "DescriptionText": "", + "IsExpanded": true, + "WidthAdjustment": 0.0, + "HeightAdjustment": 0.0, + "Nodes": [ + "a73925f57d2c44d7994a2c4d77bf8581" + ], + "HasNestedGroups": false, + "Left": 9474.976389688025, + "Top": 9012.725619127508, + "Width": 196.0, + "Height": 205.0, + "FontSize": 36.0, + "GroupStyleId": "00000000-0000-0000-0000-000000000000", + "InitialTop": 9085.725619127508, + "InitialHeight": 145.0, + "TextblockHeight": 63.0, + "Background": "#FFC1D676" + } + ], + "X": -11045.362703274532, + "Y": -8537.135589565973, + "Zoom": 1.1005264291762271 + } +} \ No newline at end of file diff --git a/test/core/json/Curve_Ellipse_JSONParsing.dyn b/test/core/json/Curve_Ellipse_JSONParsing.dyn new file mode 100644 index 00000000000..f4d958f0990 --- /dev/null +++ b/test/core/json/Curve_Ellipse_JSONParsing.dyn @@ -0,0 +1,2069 @@ +{ + "Uuid": "a1c557d8-cab7-436c-9d6e-0408d11defdf", + "IsCustomNode": false, + "Description": null, + "Name": "Curve_Ellipse_JSONParsing", + "ElementResolver": { + "ResolutionMap": { + "DSCore.Object": { + "Key": "DSCore.Object", + "Value": "DSCoreNodes.dll" + }, + "DSCore.Data": { + "Key": "DSCore.Data", + "Value": "DSCoreNodes.dll" + }, + "DesignScript.Builtin.Dictionary": { + "Key": "DesignScript.Builtin.Dictionary", + "Value": "DesignScriptBuiltin.dll" + }, + "Color": { + "Key": "DSCore.Color", + "Value": "DSCoreNodes.dll" + }, + "DSCore.DateTime.Now": { + "Key": "DSCore.DateTime", + "Value": "DSCoreNodes.dll" + }, + "DSCore.DateTime": { + "Key": "DSCore.DateTime", + "Value": "DSCoreNodes.dll" + }, + "Point": { + "Key": "Autodesk.DesignScript.Geometry.Point", + "Value": "ProtoGeometry.dll" + } + } + }, + "Inputs": [], + "Outputs": [], + "Nodes": [ + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "8d066dd6cc4b4e8ea8dc3581560b3c0f", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "4f9d2203be724ba3bbeffcda83d21985", + "Name": "curve", + "Description": "Autodesk.DesignScript.Geometry.Curve", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "3cdc499edc524603bf3829742519df2c", + "Name": "Curve", + "Description": "A new Curve with the opposite direction", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Curve.Reverse", + "Replication": "Auto", + "Description": "Reverse the direction of the curve\n\nCurve.Reverse ( ): Curve" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "f37cca417d17411188f6167addcc66f2", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "41923b126eea4e77903d3d2f1d9a01ae", + "Name": "values", + "Description": "A List of values\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "6f35afc341be469da46a9b7ff1e9aa7b", + "Name": "json", + "Description": "A JSON string where primitive types (e.g. double, int, boolean), Lists, and Dictionary's will be turned into the associated JSON type.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Data.StringifyJSON@var[]..[]", + "Replication": "Auto", + "Description": "Stringify converts an arbitrary value or a list of arbitrary values to JSON. Replication can be used to apply the operation over a list, producing a list of JSON strings.\n\nData.StringifyJSON (values: var[]..[]): string" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "828b68c83d8f4510a0bbe62ecb75ccc1", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "d5d96b1af10a49dcb2255cf95cfa4e20", + "Name": "values", + "Description": "A List of values\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "723818401a2f43a4bbf1048646e6f836", + "Name": "json", + "Description": "A JSON string where primitive types (e.g. double, int, boolean), Lists, and Dictionary's will be turned into the associated JSON type.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Data.StringifyJSON@var[]..[]", + "Replication": "Auto", + "Description": "Stringify converts an arbitrary value or a list of arbitrary values to JSON. Replication can be used to apply the operation over a list, producing a list of JSON strings.\n\nData.StringifyJSON (values: var[]..[]): string" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "699356af163a46089ddc3b068dec67c4", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "225bbe0ceaa94e82ad5f692cc59a1fa7", + "Name": "json", + "Description": "A JSON string\n\nstring", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "93e26e8d4e8247b09a708b225f0033fd", + "Name": "result", + "Description": "The result type depends on the content of the input string. The result type can be a primitive value (e.g. string, boolean, double), a List, or a Dictionary.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Data.ParseJSON@string", + "Replication": "Auto", + "Description": "Parse converts an arbitrary JSON string to a value. It is the opposite of JSON.Stringify.\n\nData.ParseJSON (json: string): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "701f4d77dcaa4e829a99f3e572dcfd94", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "5904b834e7584417ac1ea1a48e1843b5", + "Name": "geometry", + "Description": "Autodesk.DesignScript.Geometry.Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "4da8256fb0a043db9c38b41aa2439a40", + "Name": "other", + "Description": "Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "deaf3349d6044976b45cf0baaf8a321e", + "Name": "bool", + "Description": "bool", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Geometry.IsAlmostEqualTo@Autodesk.DesignScript.Geometry.Geometry", + "Replication": "Auto", + "Description": "Check if the two objects have the same representational geometry or numerical values\n\nGeometry.IsAlmostEqualTo (other: Geometry): bool" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "03764e6e1e914792a3919df9eb174e74", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "b85fbed4a9a84552879e7e03b114b2cb", + "Name": "json", + "Description": "A JSON string\n\nstring", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "6f1c34be8cb1444288cd8fab70297e30", + "Name": "result", + "Description": "The result type depends on the content of the input string. The result type can be a primitive value (e.g. string, boolean, double), a List, or a Dictionary.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Data.ParseJSON@string", + "Replication": "Auto", + "Description": "Parse converts an arbitrary JSON string to a value. It is the opposite of JSON.Stringify.\n\nData.ParseJSON (json: string): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "f1d69076c8834b589e2ccf4d09755c69", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "697ee7c557c041a7a158b3259dd00c2f", + "Name": "geometry", + "Description": "Autodesk.DesignScript.Geometry.Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "005acdcca81741e58b2af6d2c15d81ed", + "Name": "other", + "Description": "Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "43ab655529ca4ba3a9322ab25fbd701c", + "Name": "bool", + "Description": "bool", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Geometry.IsAlmostEqualTo@Autodesk.DesignScript.Geometry.Geometry", + "Replication": "Auto", + "Description": "Check if the two objects have the same representational geometry or numerical values\n\nGeometry.IsAlmostEqualTo (other: Geometry): bool" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "159dbed1f78342fda432521494ad2be3", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "c716658925b244cfa7cce179731bc2cd", + "Name": "geometry", + "Description": "Autodesk.DesignScript.Geometry.Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "d50136acf2734e8887e855adf6c189ee", + "Name": "mirrorPlane", + "Description": "Plane", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "61b9eeef3fc3451fb4d1804ab2d6ab17", + "Name": "Geometry", + "Description": "Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Geometry.Mirror@Autodesk.DesignScript.Geometry.Plane", + "Replication": "Auto", + "Description": "Mirror the object across the input Plane\n\nGeometry.Mirror (mirrorPlane: Plane): Geometry" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "a75376bd94aa436b9248c771143aff5f", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "515773696a9e4231827e27c5a15e9080", + "Name": "json", + "Description": "A JSON string\n\nstring", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "271a71ae930b4fe08c3c546a47cc92b0", + "Name": "result", + "Description": "The result type depends on the content of the input string. The result type can be a primitive value (e.g. string, boolean, double), a List, or a Dictionary.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Data.ParseJSON@string", + "Replication": "Auto", + "Description": "Parse converts an arbitrary JSON string to a value. It is the opposite of JSON.Stringify.\n\nData.ParseJSON (json: string): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "8e4762573c69400482c6d0b3add079c7", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "fee8adc7eba34895a646c66a1fb9561a", + "Name": "geometry", + "Description": "Autodesk.DesignScript.Geometry.Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "73e1cc53283841a68d894dda0a36ec59", + "Name": "other", + "Description": "Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "0ab149ab1c78473596784500cecfa545", + "Name": "bool", + "Description": "bool", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Geometry.IsAlmostEqualTo@Autodesk.DesignScript.Geometry.Geometry", + "Replication": "Auto", + "Description": "Check if the two objects have the same representational geometry or numerical values\n\nGeometry.IsAlmostEqualTo (other: Geometry): bool" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "addffa1b58634b1494ae454aeccd88b8", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "7d3f0c00e9f244f1aa542aa3404f08cb", + "Name": "values", + "Description": "A List of values\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "363fadbbc0514d57b485d4e2375cfc48", + "Name": "json", + "Description": "A JSON string where primitive types (e.g. double, int, boolean), Lists, and Dictionary's will be turned into the associated JSON type.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Data.StringifyJSON@var[]..[]", + "Replication": "Auto", + "Description": "Stringify converts an arbitrary value or a list of arbitrary values to JSON. Replication can be used to apply the operation over a list, producing a list of JSON strings.\n\nData.StringifyJSON (values: var[]..[]): string" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "1ec8a5b068b64bbf82b52f9174172823", + "NodeType": "FunctionNode", + "Inputs": [], + "Outputs": [ + { + "Id": "ffc42edaf24046ec9e84efad31bf7846", + "Name": "Plane", + "Description": "Plane at XZ plane of world", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Plane.XZ", + "Replication": "Auto", + "Description": "Creates a plane in the world XZ plane\n\nPlane.XZ ( ): Plane" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "e7bccf12d86e4cafae8bdcbef8ce3fcc", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "6974edece7414291a9dc676360b83788", + "Name": "x", + "Description": "double\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "1be2dbe103114acabffebb6d90db0f88", + "Name": "y", + "Description": "double\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "eb3001620aae4ebd9f5aa86cf1415edc", + "Name": "z", + "Description": "double\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "f9c4e1d3257c44f790d41f8a54300ac4", + "Name": "CoordinateSystem", + "Description": "CoordinateSystem", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.CoordinateSystem.ByOrigin@double,double,double", + "Replication": "Auto", + "Description": "Create a CoordinateSystem with origin at X, Y, and Z locations, with X and Y Axes set as WCS X and Y Axes.\n\nCoordinateSystem.ByOrigin (x: double = 0, y: double = 0, z: double = 0): CoordinateSystem" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "5e2455a2cf384d2386c37655a5fb8986", + "NodeType": "CodeBlockNode", + "Inputs": [], + "Outputs": [ + { + "Id": "a044fe0e1d164302917752ba151d6b1e", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "9598ef5f58c4496dabda0936b468da1d", + "Name": "", + "Description": "Value of expression at line 2", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "f222c4eac87a4b57a2b677be8a722860", + "Name": "", + "Description": "Value of expression at line 3", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "2;\n3;\n4;" + }, + { + "ConcreteType": "CoreNodeModels.Input.DoubleInput, CoreNodeModels", + "NumberType": "Double", + "Id": "2e003ad9926545ee8d7f8f528128bf6d", + "NodeType": "NumberInputNode", + "Inputs": [], + "Outputs": [ + { + "Id": "410e5034114c46e08cadfe297bd62821", + "Name": "", + "Description": "Double", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Creates a number", + "InputValue": 2.3 + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "563db764863d4e0f8456bec0be91e51d", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "177cad52a1114eaa97099c2e06a8ce0b", + "Name": "geometry", + "Description": "Autodesk.DesignScript.Geometry.Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "26b5f80162dc4d6f8f46baad0c488228", + "Name": "fromCoordinateSystem", + "Description": "CoordinateSystem", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "4b0045b39824427fa2dd2628b2afc88b", + "Name": "contextCoordinateSystem", + "Description": "CoordinateSystem", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "2d8ab2a7d3db4f3cbc19c690cdf9be37", + "Name": "Geometry", + "Description": "Transformed Geometry.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Geometry.Transform@Autodesk.DesignScript.Geometry.CoordinateSystem,Autodesk.DesignScript.Geometry.CoordinateSystem", + "Replication": "Auto", + "Description": "Transforms this geometry from source CoordinateSystem to a new context CoordinateSystem.\n\nGeometry.Transform (fromCoordinateSystem: CoordinateSystem, contextCoordinateSystem: CoordinateSystem): Geometry" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "8861ce7f91624cc685d5e77f6846daf3", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "bce7ef588dca4396ab0b708777d50096", + "Name": "x", + "Description": "double\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "e65b13a3f66d4d9ea82f427c9c1bef1f", + "Name": "y", + "Description": "double\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "902986ab5f31487292fa838bfb475379", + "Name": "CoordinateSystem", + "Description": "CoordinateSystem", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.CoordinateSystem.ByOrigin@double,double", + "Replication": "Auto", + "Description": "Create a CoordinateSystem with origin at X and Y locations, with X and Y Axes set as WCS X and Y Axes. Z defaults to 0.\n\nCoordinateSystem.ByOrigin (x: double = 0, y: double = 0): CoordinateSystem" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "a9d3831fda544d828c96166dd6496e4d", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "ba688765f31b4864a169fef6adf5d8c5", + "Name": "geometry", + "Description": "Autodesk.DesignScript.Geometry.Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "41e08a162f0a47aca60868ba697f9fe5", + "Name": "other", + "Description": "Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "5e1eb66c513a4cc3a3bed125fd15c798", + "Name": "bool", + "Description": "bool", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Geometry.IsAlmostEqualTo@Autodesk.DesignScript.Geometry.Geometry", + "Replication": "Auto", + "Description": "Check if the two objects have the same representational geometry or numerical values\n\nGeometry.IsAlmostEqualTo (other: Geometry): bool" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "5207e08dc89441399926207237e2114a", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "012fc210a84b4f9e907ef23ef0064c2e", + "Name": "x", + "Description": "X coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "c398df34aff247949dd8c50c3871b578", + "Name": "y", + "Description": "Y coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "d0e5d21623e84d848409f7c1a397f409", + "Name": "z", + "Description": "Z coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "d96029d0558e4d0c8700e4514e4c964c", + "Name": "Point", + "Description": "Point created by coordinates", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Point.ByCoordinates@double,double,double", + "Replication": "Auto", + "Description": "Form a Point given 3 cartesian coordinates\n\nPoint.ByCoordinates (x: double = 0, y: double = 0, z: double = 0): Point" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "2d99d87f0e414a79b063d8c707cb7a77", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "5fff48aab6e1420bb15dbbc7dda8b2de", + "Name": "coordinateSystem", + "Description": "Autodesk.DesignScript.Geometry.CoordinateSystem", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "3180e5e9cb2b45828cfe6f4b9668d835", + "Name": "amount", + "Description": "Amount to scale\n\ndouble\nDefault value : 1", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "6edbe84fd8b04ab6908f6c0763cf6eab", + "Name": "CoordinateSystem", + "Description": "Scaled coordinate system", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.CoordinateSystem.Scale@double", + "Replication": "Auto", + "Description": "Scale uniformly around the origin\n\nCoordinateSystem.Scale (amount: double = 1): CoordinateSystem" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "497ff1404efc4ccc8b9470d18933512d", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "7f0676c7525143af9b49365cf5c17a76", + "Name": "json", + "Description": "A JSON string\n\nstring", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "1fb3eaff5502465d8f4f9ae45c5d7311", + "Name": "result", + "Description": "The result type depends on the content of the input string. The result type can be a primitive value (e.g. string, boolean, double), a List, or a Dictionary.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Data.ParseJSON@string", + "Replication": "Auto", + "Description": "Parse converts an arbitrary JSON string to a value. It is the opposite of JSON.Stringify.\n\nData.ParseJSON (json: string): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "c8b052c3f7ff41c699224fad46d60d6c", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "0ad1b43457c14db0aca3d6a9eec8538b", + "Name": "values", + "Description": "A List of values\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "7b7bb652f8cf4e03afeab1881a301fa3", + "Name": "json", + "Description": "A JSON string where primitive types (e.g. double, int, boolean), Lists, and Dictionary's will be turned into the associated JSON type.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Data.StringifyJSON@var[]..[]", + "Replication": "Auto", + "Description": "Stringify converts an arbitrary value or a list of arbitrary values to JSON. Replication can be used to apply the operation over a list, producing a list of JSON strings.\n\nData.StringifyJSON (values: var[]..[]): string" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "48c70fae9a334375b39ecab1258a9b1d", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "35c6f07190ea489a94d006707ea0b3b8", + "Name": "coordinateSystem", + "Description": "Autodesk.DesignScript.Geometry.CoordinateSystem", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "92ea43ae8c3f46eb876b9c7b16b17aec", + "Name": "origin", + "Description": "Origin point\n\nPoint", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "3a856fd0a98d4de38cd4339d223aa0b2", + "Name": "axis", + "Description": "Vector axis for rotation\n\nVector", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "bcdc65b33e1f47478bb92534f351b02e", + "Name": "degrees", + "Description": "Degrees to rotate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "3c33ce0c3ebb4ddf9e9d901c4621dc11", + "Name": "CoordinateSystem", + "Description": "Rotated coordinate system", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.CoordinateSystem.Rotate@Autodesk.DesignScript.Geometry.Point,Autodesk.DesignScript.Geometry.Vector,double", + "Replication": "Auto", + "Description": "Rotates an object around an origin and an axis by a specified degree\n\nCoordinateSystem.Rotate (origin: Point, axis: Vector, degrees: double = 0): CoordinateSystem" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "4d263f66316f4354b60efbbed880c736", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "f663e4efdc604fc9b91a2fae86cf34d2", + "Name": "x", + "Description": "X coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "6cf6a53e6bc94155a40d39cde362f4c0", + "Name": "y", + "Description": "Y coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "6d559107072e4a63a7af3eadd756e5f7", + "Name": "z", + "Description": "Z coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "7c546033af2345beaa6a96631b9363eb", + "Name": "Vector", + "Description": "Vector created by coordinates", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Vector.ByCoordinates@double,double,double", + "Replication": "Auto", + "Description": "Form a Vector by 3 Euclidean coordinates\n\nVector.ByCoordinates (x: double = 0, y: double = 0, z: double = 0): Vector" + }, + { + "ConcreteType": "CoreNodeModels.Input.DoubleInput, CoreNodeModels", + "NumberType": "Double", + "Id": "09ffbb6c715e4b7db22fb0d409875ecc", + "NodeType": "NumberInputNode", + "Inputs": [], + "Outputs": [ + { + "Id": "017239f951534bc69d5f10a6065bcf0f", + "Name": "", + "Description": "Double", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Creates a number", + "InputValue": 24.0 + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "a29aa179c7ae4069a6d9c6d2055ab845", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "455a06e21ba34f86968b6c000c2db38b", + "Name": "list", + "Description": "List to be checked on whether all items are true.\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "8404fe02121d49459533aa46524cb8d3", + "Name": "bool", + "Description": "True if all items from list are true, false if one or more items is not true", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.List.AllTrue@var[]..[]", + "Replication": "Auto", + "Description": "Determines if all items in the given list is a boolean and has a true value.\n\nList.AllTrue (list: var[]..[]): bool" + }, + { + "ConcreteType": "CoreNodeModels.CreateList, CoreNodeModels", + "VariableInputPorts": true, + "Id": "843b3eff62b54f40aa92b44527783938", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "9d74c52e5b304dae80ce660e689409a8", + "Name": "item0", + "Description": "Item Index #0", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "1f92e4bda35b4c9e9dc533295a8a43b1", + "Name": "item1", + "Description": "Item Index #1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "13db1d82b54042ff87ab1691292e97a0", + "Name": "item2", + "Description": "Item Index #2", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "b8ae8b0a7718453d8e42acbb8d92ff89", + "Name": "item3", + "Description": "Item Index #3", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "77a71865328e41dca11301bef97799b8", + "Name": "item4", + "Description": "Item Index #4", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "f758d1f18b554c8092d2c2029c53f321", + "Name": "list", + "Description": "A list (type: var[]..[])", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Makes a new list from the given inputs" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "12db7a99039b48119cfc4118a160c53b", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "862f674e8f144ba2be556e1e68f2e4f5", + "Name": "origin", + "Description": "Origin coordinate system of ellipse\n\nCoordinateSystem\nDefault value : Autodesk.DesignScript.Geometry.CoordinateSystem.ByOrigin(0, 0, 0)", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "e8b962f2c1294938a2b55a2cffac0e99", + "Name": "xAxisRadius", + "Description": "X axis radius\n\ndouble\nDefault value : 1", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "2301a11cf423432d8e810b9a7461a548", + "Name": "yAxisRadius", + "Description": "Y axis radius\n\ndouble\nDefault value : 1", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "20dec56391894488a82fabe13574bee3", + "Name": "Ellipse", + "Description": "Ellipse created by coordinate system and radii", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Ellipse.ByCoordinateSystemRadii@Autodesk.DesignScript.Geometry.CoordinateSystem,double,double", + "Replication": "Auto", + "Description": "Create an Ellipse centered and aligned with input CoordinateSystem, with a x_radius radius in the CS X direction, and y_radius radius in the CS Y direction.\n\nEllipse.ByCoordinateSystemRadii (origin: CoordinateSystem = Autodesk.DesignScript.Geometry.CoordinateSystem.ByOrigin(0, 0, 0), xAxisRadius: double = 1, yAxisRadius: double = 1): Ellipse" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "f89a3e2def604b45b44656aa7d6b7331", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "cc7e9cda31014d89a314fac380fc7c0a", + "Name": "origin", + "Description": "Origin coordinate system of ellipse\n\nCoordinateSystem\nDefault value : Autodesk.DesignScript.Geometry.CoordinateSystem.ByOrigin(0, 0, 0)", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "5ac64e8b2222428b8b9c71679ebd88f5", + "Name": "xAxisRadius", + "Description": "X axis radius\n\ndouble\nDefault value : 1", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "ec6d3dd7b11c4e46b7798e29c27eb19d", + "Name": "yAxisRadius", + "Description": "Y axis radius\n\ndouble\nDefault value : 1", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "61ee92c9010948b68a3fbb0b91684d9d", + "Name": "Ellipse", + "Description": "Ellipse created by coordinate system and radii", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Ellipse.ByCoordinateSystemRadii@Autodesk.DesignScript.Geometry.CoordinateSystem,double,double", + "Replication": "Auto", + "Description": "Create an Ellipse centered and aligned with input CoordinateSystem, with a x_radius radius in the CS X direction, and y_radius radius in the CS Y direction.\n\nEllipse.ByCoordinateSystemRadii (origin: CoordinateSystem = Autodesk.DesignScript.Geometry.CoordinateSystem.ByOrigin(0, 0, 0), xAxisRadius: double = 1, yAxisRadius: double = 1): Ellipse" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "d0cf8ef91da047aa8ef9cf09a02b8b8c", + "NodeType": "CodeBlockNode", + "Inputs": [], + "Outputs": [ + { + "Id": "a2c2af6a9abb414cb110b3e327732ea7", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "f14e1250b06f47c3ab60b197839eeae1", + "Name": "", + "Description": "Value of expression at line 2", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "2.4;\n4;" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSVarArgFunction, DynamoCore", + "FunctionSignature": "DSCore.List.Join@var[]..[]", + "FunctionType": "VariableArgument", + "Id": "b32960df47ee4ed7a81be7be4828751a", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "b9ac99f2346c4a41b2ce182913c61aa0", + "Name": "list0", + "Description": "Lists to join into one.\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "b3ba205aacc9401e8cf5d9ca0bd8489d", + "Name": "list1", + "Description": "var[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "e3de989b43594037a009dcaeee5f1028", + "Name": "list", + "Description": "Joined list.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Concatenates all given lists into a single list.\n\nList.Join (lists: var[]..[]): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "1d9f05f749c34102a42b07422810041b", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "75c66ca6c41d4714a10b3da4bd939cc9", + "Name": "list", + "Description": "List to flatten.\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "08ee4aa829a44f51878af3e666e23c89", + "Name": "amount", + "Description": "Layers of list nesting to remove (-1 will remove all list nestings)\n\nint\nDefault value : -1", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "3e4997bc247644aa9eb21c1a3bd75a18", + "Name": "list", + "Description": "Flattened list by amount", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.List.Flatten@var[]..[],int", + "Replication": "Auto", + "Description": "Flattens a nested list of lists by a certain amount.\n\nList.Flatten (list: var[]..[], amount: int = -1): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "8bc662f7cc6441a6bc115e098ebeea7b", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "200f257d260d4afc8d80b834a3ab86c2", + "Name": "object", + "Description": "Object to query type\n\nvar", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "7d19acce01934f508d6ff08ad27d88bc", + "Name": "string", + "Description": "Type of object.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Object.Type@var", + "Replication": "Auto", + "Description": "Returns the type of object represented as string.\n\nObject.Type (object: var): string" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "cb2fa0709db94c93a84b340842830c38", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "0c6f9226724c413888932859e7a92b09", + "Name": "x", + "Description": "Basic type object to compare (e.g. bool, int, double, string, etc.)\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "a772adaeb3584d67b22fb2ac86b0f86c", + "Name": "y", + "Description": "Basic type object to compare (e.g. bool, int, double, string, etc.)\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "bc20e8625402446596347f60d42881a7", + "Name": "bool", + "Description": "Result of equality check", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "==@var[]..[],var[]..[]", + "Replication": "Auto", + "Description": "Compares if x and y are equal\n\n== (x: var[]..[], y: var[]..[]): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "2a5e3cb9724d4eff9c271289c4cf055b", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "d7a9d97d01324ab6af7726e9289459f7", + "Name": "object", + "Description": "Object to query type\n\nvar", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "6ad2b1ae8d1447b49ff8ffb81f577389", + "Name": "string", + "Description": "Type of object.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Object.Type@var", + "Replication": "Auto", + "Description": "Returns the type of object represented as string.\n\nObject.Type (object: var): string" + } + ], + "Connectors": [ + { + "Start": "3cdc499edc524603bf3829742519df2c", + "End": "d5d96b1af10a49dcb2255cf95cfa4e20", + "Id": "885dfdce8f994700b687b14721db108e", + "IsHidden": "False" + }, + { + "Start": "3cdc499edc524603bf3829742519df2c", + "End": "697ee7c557c041a7a158b3259dd00c2f", + "Id": "2185d73195ee4285b1ffab433caf5db2", + "IsHidden": "False" + }, + { + "Start": "6f35afc341be469da46a9b7ff1e9aa7b", + "End": "225bbe0ceaa94e82ad5f692cc59a1fa7", + "Id": "0da05e0d98ad4be5a4b5b0d1a922352c", + "IsHidden": "False" + }, + { + "Start": "723818401a2f43a4bbf1048646e6f836", + "End": "b85fbed4a9a84552879e7e03b114b2cb", + "Id": "355da5fb55994ad8ae352160ca3cb3a1", + "IsHidden": "False" + }, + { + "Start": "93e26e8d4e8247b09a708b225f0033fd", + "End": "4da8256fb0a043db9c38b41aa2439a40", + "Id": "5a0e51c138fa40dc84238340500893cc", + "IsHidden": "False" + }, + { + "Start": "93e26e8d4e8247b09a708b225f0033fd", + "End": "200f257d260d4afc8d80b834a3ab86c2", + "Id": "c0ff4dbbfb7c401690a4bca4449fab82", + "IsHidden": "False" + }, + { + "Start": "deaf3349d6044976b45cf0baaf8a321e", + "End": "9d74c52e5b304dae80ce660e689409a8", + "Id": "df4868ac75a945a1a635cf3abbc3d9a2", + "IsHidden": "False" + }, + { + "Start": "6f1c34be8cb1444288cd8fab70297e30", + "End": "005acdcca81741e58b2af6d2c15d81ed", + "Id": "933571552d11412c9a6f2852fa203f82", + "IsHidden": "False" + }, + { + "Start": "43ab655529ca4ba3a9322ab25fbd701c", + "End": "1f92e4bda35b4c9e9dc533295a8a43b1", + "Id": "6724568c363a4d78b2c5075fd33799e6", + "IsHidden": "False" + }, + { + "Start": "61b9eeef3fc3451fb4d1804ab2d6ab17", + "End": "7d3f0c00e9f244f1aa542aa3404f08cb", + "Id": "fdb6449b483f4111b0c1aaded36ccc9c", + "IsHidden": "False" + }, + { + "Start": "61b9eeef3fc3451fb4d1804ab2d6ab17", + "End": "fee8adc7eba34895a646c66a1fb9561a", + "Id": "108e4d4b6f89462c9e5a999550581a60", + "IsHidden": "False" + }, + { + "Start": "271a71ae930b4fe08c3c546a47cc92b0", + "End": "73e1cc53283841a68d894dda0a36ec59", + "Id": "9ec01679f67c4035a78d63609563b721", + "IsHidden": "False" + }, + { + "Start": "0ab149ab1c78473596784500cecfa545", + "End": "13db1d82b54042ff87ab1691292e97a0", + "Id": "fa21f6d27f9f40ef96391856924b50eb", + "IsHidden": "False" + }, + { + "Start": "363fadbbc0514d57b485d4e2375cfc48", + "End": "515773696a9e4231827e27c5a15e9080", + "Id": "af0da864b7cc4240aedc97269404344a", + "IsHidden": "False" + }, + { + "Start": "ffc42edaf24046ec9e84efad31bf7846", + "End": "d50136acf2734e8887e855adf6c189ee", + "Id": "f6412f5918984ae9bba7051021c906fb", + "IsHidden": "False" + }, + { + "Start": "f9c4e1d3257c44f790d41f8a54300ac4", + "End": "35c6f07190ea489a94d006707ea0b3b8", + "Id": "a872f8e90231462d9561ec4de009e02e", + "IsHidden": "False" + }, + { + "Start": "a044fe0e1d164302917752ba151d6b1e", + "End": "6974edece7414291a9dc676360b83788", + "Id": "c3be8c2e60434dce92cea9e9decd0770", + "IsHidden": "False" + }, + { + "Start": "a044fe0e1d164302917752ba151d6b1e", + "End": "f663e4efdc604fc9b91a2fae86cf34d2", + "Id": "00386e40cdb54d778267eeaefe1c4c31", + "IsHidden": "False" + }, + { + "Start": "9598ef5f58c4496dabda0936b468da1d", + "End": "1be2dbe103114acabffebb6d90db0f88", + "Id": "96cddd3475964a2ea7091db15640f597", + "IsHidden": "False" + }, + { + "Start": "f222c4eac87a4b57a2b677be8a722860", + "End": "eb3001620aae4ebd9f5aa86cf1415edc", + "Id": "a6f11fea992149c8837ede29f9e36731", + "IsHidden": "False" + }, + { + "Start": "f222c4eac87a4b57a2b677be8a722860", + "End": "6cf6a53e6bc94155a40d39cde362f4c0", + "Id": "ef37f9fef45a4a8582efc7e172f90c33", + "IsHidden": "False" + }, + { + "Start": "410e5034114c46e08cadfe297bd62821", + "End": "3180e5e9cb2b45828cfe6f4b9668d835", + "Id": "6094d55d4516411e92cb246d979f9816", + "IsHidden": "False" + }, + { + "Start": "2d8ab2a7d3db4f3cbc19c690cdf9be37", + "End": "0ad1b43457c14db0aca3d6a9eec8538b", + "Id": "e74b439e4d9441718f2bef5e6557c15e", + "IsHidden": "False" + }, + { + "Start": "2d8ab2a7d3db4f3cbc19c690cdf9be37", + "End": "ba688765f31b4864a169fef6adf5d8c5", + "Id": "168bf8d8b2904e65bb215a3a05c79521", + "IsHidden": "False" + }, + { + "Start": "902986ab5f31487292fa838bfb475379", + "End": "26b5f80162dc4d6f8f46baad0c488228", + "Id": "615c8f4a5646425a841492a8c96c8d90", + "IsHidden": "False" + }, + { + "Start": "5e1eb66c513a4cc3a3bed125fd15c798", + "End": "b8ae8b0a7718453d8e42acbb8d92ff89", + "Id": "643b81b7e53f499eaf0e79cc9d9681af", + "IsHidden": "False" + }, + { + "Start": "d96029d0558e4d0c8700e4514e4c964c", + "End": "92ea43ae8c3f46eb876b9c7b16b17aec", + "Id": "2e60d56bfc464a8691ccb343f0ec87e5", + "IsHidden": "False" + }, + { + "Start": "6edbe84fd8b04ab6908f6c0763cf6eab", + "End": "4b0045b39824427fa2dd2628b2afc88b", + "Id": "926b7ec9a6a648b28f5670301a9b2592", + "IsHidden": "False" + }, + { + "Start": "1fb3eaff5502465d8f4f9ae45c5d7311", + "End": "41e08a162f0a47aca60868ba697f9fe5", + "Id": "e09dfc6d78f94e59b0a6d91f096dc4e9", + "IsHidden": "False" + }, + { + "Start": "7b7bb652f8cf4e03afeab1881a301fa3", + "End": "7f0676c7525143af9b49365cf5c17a76", + "Id": "f7eb5074780944758b1bf2446d9750cb", + "IsHidden": "False" + }, + { + "Start": "3c33ce0c3ebb4ddf9e9d901c4621dc11", + "End": "5fff48aab6e1420bb15dbbc7dda8b2de", + "Id": "4a48dd55d5c74e41a50ca1c70ed56153", + "IsHidden": "False" + }, + { + "Start": "3c33ce0c3ebb4ddf9e9d901c4621dc11", + "End": "862f674e8f144ba2be556e1e68f2e4f5", + "Id": "bca52a7365cd4d89803086b8d98ec31c", + "IsHidden": "False" + }, + { + "Start": "3c33ce0c3ebb4ddf9e9d901c4621dc11", + "End": "cc7e9cda31014d89a314fac380fc7c0a", + "Id": "829bf4ef4a4a4c3d953131a02681266b", + "IsHidden": "False" + }, + { + "Start": "7c546033af2345beaa6a96631b9363eb", + "End": "3a856fd0a98d4de38cd4339d223aa0b2", + "Id": "bb3bad1de71a4323b6460cd11ab8692f", + "IsHidden": "False" + }, + { + "Start": "017239f951534bc69d5f10a6065bcf0f", + "End": "bcdc65b33e1f47478bb92534f351b02e", + "Id": "16919ae006234de899b6be37acd51c5c", + "IsHidden": "False" + }, + { + "Start": "f758d1f18b554c8092d2c2029c53f321", + "End": "75c66ca6c41d4714a10b3da4bd939cc9", + "Id": "0f792bb508bf4ad9963040823264893e", + "IsHidden": "False" + }, + { + "Start": "20dec56391894488a82fabe13574bee3", + "End": "b9ac99f2346c4a41b2ce182913c61aa0", + "Id": "d1f5e0ca13224e8db9284c59d6db148f", + "IsHidden": "False" + }, + { + "Start": "61ee92c9010948b68a3fbb0b91684d9d", + "End": "b3ba205aacc9401e8cf5d9ca0bd8489d", + "Id": "ce745a6f85a040c59a7e04407e27bdf8", + "IsHidden": "False" + }, + { + "Start": "a2c2af6a9abb414cb110b3e327732ea7", + "End": "e8b962f2c1294938a2b55a2cffac0e99", + "Id": "34d7d6f8c6744de9a5bc63c4f56656c4", + "IsHidden": "False" + }, + { + "Start": "a2c2af6a9abb414cb110b3e327732ea7", + "End": "ec6d3dd7b11c4e46b7798e29c27eb19d", + "Id": "aa9fb6dec9514e50805a2bdbfa68536f", + "IsHidden": "False" + }, + { + "Start": "f14e1250b06f47c3ab60b197839eeae1", + "End": "2301a11cf423432d8e810b9a7461a548", + "Id": "b72146bd500048a79b75725f188a330c", + "IsHidden": "False" + }, + { + "Start": "f14e1250b06f47c3ab60b197839eeae1", + "End": "5ac64e8b2222428b8b9c71679ebd88f5", + "Id": "9a9bbc761a3c46b7a60ef7e3c1948d2f", + "IsHidden": "False" + }, + { + "Start": "e3de989b43594037a009dcaeee5f1028", + "End": "4f9d2203be724ba3bbeffcda83d21985", + "Id": "4e21f33358b34acc9a559a516e0283e9", + "IsHidden": "False" + }, + { + "Start": "e3de989b43594037a009dcaeee5f1028", + "End": "41923b126eea4e77903d3d2f1d9a01ae", + "Id": "eb0d68d2d08b4c3f9d10dc61ffc71857", + "IsHidden": "False" + }, + { + "Start": "e3de989b43594037a009dcaeee5f1028", + "End": "5904b834e7584417ac1ea1a48e1843b5", + "Id": "2b6744b8ecbd4620977103f641fc7a56", + "IsHidden": "False" + }, + { + "Start": "e3de989b43594037a009dcaeee5f1028", + "End": "c716658925b244cfa7cce179731bc2cd", + "Id": "d6ca34d7ea5142908ca53d6d83f80df6", + "IsHidden": "False" + }, + { + "Start": "e3de989b43594037a009dcaeee5f1028", + "End": "177cad52a1114eaa97099c2e06a8ce0b", + "Id": "70874157c7504387b41270ae8e837ab5", + "IsHidden": "False" + }, + { + "Start": "e3de989b43594037a009dcaeee5f1028", + "End": "d7a9d97d01324ab6af7726e9289459f7", + "Id": "efbe4a7b4f36490b990ffc3c159b86b4", + "IsHidden": "False" + }, + { + "Start": "3e4997bc247644aa9eb21c1a3bd75a18", + "End": "455a06e21ba34f86968b6c000c2db38b", + "Id": "23a8ec252a174d4c830a1ba65b5b6115", + "IsHidden": "False" + }, + { + "Start": "7d19acce01934f508d6ff08ad27d88bc", + "End": "a772adaeb3584d67b22fb2ac86b0f86c", + "Id": "111ce15ca97d4840ae86978f97d22de2", + "IsHidden": "False" + }, + { + "Start": "bc20e8625402446596347f60d42881a7", + "End": "77a71865328e41dca11301bef97799b8", + "Id": "cd8a3b32ded44e8b944bb0e8b2af1e73", + "IsHidden": "False" + }, + { + "Start": "6ad2b1ae8d1447b49ff8ffb81f577389", + "End": "0c6f9226724c413888932859e7a92b09", + "Id": "9b1a769e0d444a91bd856e5041d2fcfd", + "IsHidden": "False" + } + ], + "Dependencies": [], + "NodeLibraryDependencies": [], + "Thumbnail": "", + "GraphDocumentationURL": null, + "ExtensionWorkspaceData": [ + { + "ExtensionGuid": "28992e1d-abb9-417f-8b1b-05e053bee670", + "Name": "Properties", + "Version": "3.0", + "Data": {} + } + ], + "Author": "None provided", + "Linting": { + "activeLinter": "None", + "activeLinterId": "7b75fb44-43fd-4631-a878-29f4d5d8399a", + "warningCount": 0, + "errorCount": 0 + }, + "Bindings": [], + "View": { + "Dynamo": { + "ScaleFactor": 1.0, + "HasRunWithoutCrash": true, + "IsVisibleInDynamoLibrary": true, + "Version": "3.0.0.5795", + "RunType": "Automatic", + "RunPeriod": "1000" + }, + "Camera": { + "Name": "_Background Preview", + "EyeX": 3.9348859786987305, + "EyeY": 16.133285522460938, + "EyeZ": -14.816829681396484, + "LookX": 3.037425994873047, + "LookY": -14.537761688232422, + "LookZ": 7.6871795654296875, + "UpX": 0.27309176325798035, + "UpY": 0.6691304445266724, + "UpZ": 0.6911478638648987 + }, + "ConnectorPins": [], + "NodeViews": [ + { + "Id": "8d066dd6cc4b4e8ea8dc3581560b3c0f", + "Name": "Curve.Reverse", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 3117.1059134986226, + "Y": 3111.4866945830336 + }, + { + "Id": "f37cca417d17411188f6167addcc66f2", + "Name": "Data.StringifyJSON", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 3566.243286515026, + "Y": 2526.2231520439414 + }, + { + "Id": "828b68c83d8f4510a0bbe62ecb75ccc1", + "Name": "Data.StringifyJSON", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 3571.846679965536, + "Y": 3331.063159904932 + }, + { + "Id": "699356af163a46089ddc3b068dec67c4", + "Name": "Data.ParseJSON", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 3864.925869881163, + "Y": 2527.2887355995344 + }, + { + "Id": "701f4d77dcaa4e829a99f3e572dcfd94", + "Name": "Geometry.IsAlmostEqualTo", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 4264.192992363238, + "Y": 2355.4343568385952 + }, + { + "Id": "03764e6e1e914792a3919df9eb174e74", + "Name": "Data.ParseJSON", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 3896.825688729802, + "Y": 3331.5429014024303 + }, + { + "Id": "f1d69076c8834b589e2ccf4d09755c69", + "Name": "Geometry.IsAlmostEqualTo", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 4279.4316330814245, + "Y": 2980.408017647992 + }, + { + "Id": "159dbed1f78342fda432521494ad2be3", + "Name": "Geometry.Mirror", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 3197.882558109642, + "Y": 3833.3328009382003 + }, + { + "Id": "a75376bd94aa436b9248c771143aff5f", + "Name": "Data.ParseJSON", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 3931.2114888420797, + "Y": 4143.464904370941 + }, + { + "Id": "8e4762573c69400482c6d0b3add079c7", + "Name": "Geometry.IsAlmostEqualTo", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 4284.6981748958915, + "Y": 3976.2795616691583 + }, + { + "Id": "addffa1b58634b1494ae454aeccd88b8", + "Name": "Data.StringifyJSON", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 3639.48762183935, + "Y": 4143.325889007114 + }, + { + "Id": "1ec8a5b068b64bbf82b52f9174172823", + "Name": "Plane.XZ", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2957.334610191485, + "Y": 3918.082532655486 + }, + { + "Id": "e7bccf12d86e4cafae8bdcbef8ce3fcc", + "Name": "CoordinateSystem.ByOrigin", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1452.8633748649277, + "Y": 1654.697235747441 + }, + { + "Id": "5e2455a2cf384d2386c37655a5fb8986", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1198.8633748649277, + "Y": 1689.8347357474418 + }, + { + "Id": "2e003ad9926545ee8d7f8f528128bf6d", + "Name": "Number", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2627.8226812207286, + "Y": 5085.899711217159 + }, + { + "Id": "563db764863d4e0f8456bec0be91e51d", + "Name": "Geometry.Transform", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 3264.795178112731, + "Y": 4767.990751536625 + }, + { + "Id": "8861ce7f91624cc685d5e77f6846daf3", + "Name": "CoordinateSystem.ByOrigin", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2897.320104900061, + "Y": 4803.409054040916 + }, + { + "Id": "a9d3831fda544d828c96166dd6496e4d", + "Name": "Geometry.IsAlmostEqualTo", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 4296.2397808139185, + "Y": 4842.44862462408 + }, + { + "Id": "5207e08dc89441399926207237e2114a", + "Name": "Point.ByCoordinates", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1452.8633748649277, + "Y": 1866.697235747441 + }, + { + "Id": "2d99d87f0e414a79b063d8c707cb7a77", + "Name": "CoordinateSystem.Scale", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2841.215790225131, + "Y": 4995.567303536951 + }, + { + "Id": "497ff1404efc4ccc8b9470d18933512d", + "Name": "Data.ParseJSON", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 3964.56317300819, + "Y": 5025.628024707788 + }, + { + "Id": "c8b052c3f7ff41c699224fad46d60d6c", + "Name": "Data.StringifyJSON", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 3672.8393060054605, + "Y": 5025.489009343963 + }, + { + "Id": "48c70fae9a334375b39ecab1258a9b1d", + "Name": "CoordinateSystem.Rotate", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1831.3633748649277, + "Y": 1921.697235747441 + }, + { + "Id": "4d263f66316f4354b60efbbed880c736", + "Name": "Vector.ByCoordinates", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1452.8633748649277, + "Y": 2078.697235747441 + }, + { + "Id": "09ffbb6c715e4b7db22fb0d409875ecc", + "Name": "Number", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1452.8633748649277, + "Y": 2290.697235747441 + }, + { + "Id": "a29aa179c7ae4069a6d9c6d2055ab845", + "Name": "List.AllTrue", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 5983.897233997666, + "Y": 3371.545531767233 + }, + { + "Id": "843b3eff62b54f40aa92b44527783938", + "Name": "List Create", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 5437.120316386292, + "Y": 3363.005548144205 + }, + { + "Id": "12db7a99039b48119cfc4118a160c53b", + "Name": "Ellipse.ByCoordinateSystemRadii", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2872.2299826376816, + "Y": 1687.4731146341683 + }, + { + "Id": "f89a3e2def604b45b44656aa7d6b7331", + "Name": "Ellipse.ByCoordinateSystemRadii", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2871.3380230668554, + "Y": 1928.299126643713 + }, + { + "Id": "d0cf8ef91da047aa8ef9cf09a02b8b8c", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2543.9524377304315, + "Y": 1736.5385810346293 + }, + { + "Id": "b32960df47ee4ed7a81be7be4828751a", + "Name": "List.Join", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 3281.496826176533, + "Y": 1819.5814755728702 + }, + { + "Id": "1d9f05f749c34102a42b07422810041b", + "Name": "List.Flatten", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 5692.487230401334, + "Y": 3371.197953915982 + }, + { + "Id": "8bc662f7cc6441a6bc115e098ebeea7b", + "Name": "Object.Type", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 4139.52971225546, + "Y": 2744.133960134844 + }, + { + "Id": "cb2fa0709db94c93a84b340842830c38", + "Name": "==", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 4447.581350536975, + "Y": 2662.2415952110414 + }, + { + "Id": "2a5e3cb9724d4eff9c271289c4cf055b", + "Name": "Object.Type", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 4143.109033933295, + "Y": 2598.883208126792 + } + ], + "Annotations": [ + { + "Id": "1eaf6aca2f3d4a6cad135009fc4de5c4", + "Title": "All True", + "DescriptionText": "", + "IsExpanded": true, + "WidthAdjustment": 0.0, + "HeightAdjustment": 0.0, + "Nodes": [ + "a29aa179c7ae4069a6d9c6d2055ab845" + ], + "HasNestedGroups": false, + "Left": 5973.897233997666, + "Top": 3298.545531767233, + "Width": 196.0, + "Height": 205.0, + "FontSize": 36.0, + "GroupStyleId": "00000000-0000-0000-0000-000000000000", + "InitialTop": 3371.545531767233, + "InitialHeight": 145.0, + "TextblockHeight": 63.0, + "Background": "#FFC1D676" + } + ], + "X": 88.5299368369063, + "Y": 228.93819240545673, + "Zoom": 0.09759182732613061 + } +} \ No newline at end of file diff --git a/test/core/json/Curve_Helix_JSONParsing.dyn b/test/core/json/Curve_Helix_JSONParsing.dyn new file mode 100644 index 00000000000..a2b836cba15 --- /dev/null +++ b/test/core/json/Curve_Helix_JSONParsing.dyn @@ -0,0 +1,2020 @@ +{ + "Uuid": "146a7468-ec4e-4c65-a842-e1fcd42de29d", + "IsCustomNode": false, + "Description": null, + "Name": "Curve_Helix_JSONParsing", + "ElementResolver": { + "ResolutionMap": { + "DSCore.Object": { + "Key": "DSCore.Object", + "Value": "DSCoreNodes.dll" + }, + "DSCore.Data": { + "Key": "DSCore.Data", + "Value": "DSCoreNodes.dll" + }, + "DesignScript.Builtin.Dictionary": { + "Key": "DesignScript.Builtin.Dictionary", + "Value": "DesignScriptBuiltin.dll" + }, + "Color": { + "Key": "DSCore.Color", + "Value": "DSCoreNodes.dll" + }, + "DSCore.DateTime.Now": { + "Key": "DSCore.DateTime", + "Value": "DSCoreNodes.dll" + }, + "DSCore.DateTime": { + "Key": "DSCore.DateTime", + "Value": "DSCoreNodes.dll" + }, + "Point": { + "Key": "Autodesk.DesignScript.Geometry.Point", + "Value": "ProtoGeometry.dll" + } + } + }, + "Inputs": [], + "Outputs": [], + "Nodes": [ + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "3427c770c99e4fddabd0ed33fe4953e6", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "07752ef9e5c44d47b3f618afc1736c3f", + "Name": "x", + "Description": "X coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "7f790911b3b645a1bf4023e3cfd83d25", + "Name": "y", + "Description": "Y coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "12d4b0c7e4e5471ba831ebf2bf585f57", + "Name": "z", + "Description": "Z coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "413dafc868154b68bc3ab72273e9a77f", + "Name": "Vector", + "Description": "Vector created by coordinates", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Vector.ByCoordinates@double,double,double", + "Replication": "Auto", + "Description": "Form a Vector by 3 Euclidean coordinates\n\nVector.ByCoordinates (x: double = 0, y: double = 0, z: double = 0): Vector" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "103c168af6dc44acadad7c8b330a3e9a", + "NodeType": "CodeBlockNode", + "Inputs": [], + "Outputs": [ + { + "Id": "975ce85ae78548ada856b10d18376f98", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "ef652120f2ac43e7a749f79a39a8ec08", + "Name": "", + "Description": "Value of expression at line 2", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "34715631308b44d48098149e6943f1f4", + "Name": "", + "Description": "Value of expression at line 3", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "1;\n2;\n3;" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "79799cbad16a485ca066e625df68bbd6", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "6d08c2a910c04d83af8f0e3f8e5c1d9b", + "Name": "curve", + "Description": "Autodesk.DesignScript.Geometry.Curve", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "956b29b3f25644dcbdaf63fa91f134d5", + "Name": "Curve", + "Description": "A new Curve with the opposite direction", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Curve.Reverse", + "Replication": "Auto", + "Description": "Reverse the direction of the curve\n\nCurve.Reverse ( ): Curve" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "6a61c53f214e45d29e3c00784d6edaa0", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "d6e3da16aee140a6863cf025969f6cbe", + "Name": "values", + "Description": "A List of values\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "6f163a8dab7745a59c613cb26a7b9720", + "Name": "json", + "Description": "A JSON string where primitive types (e.g. double, int, boolean), Lists, and Dictionary's will be turned into the associated JSON type.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Data.StringifyJSON@var[]..[]", + "Replication": "Auto", + "Description": "Stringify converts an arbitrary value or a list of arbitrary values to JSON. Replication can be used to apply the operation over a list, producing a list of JSON strings.\n\nData.StringifyJSON (values: var[]..[]): string" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "d901e2383f764f68bb6c39d4515537a4", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "0d5fa133ec6c4126bf271c4b5c869dbf", + "Name": "values", + "Description": "A List of values\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "9ecd0ae7aeb44c50b10b925d0cad1d03", + "Name": "json", + "Description": "A JSON string where primitive types (e.g. double, int, boolean), Lists, and Dictionary's will be turned into the associated JSON type.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Data.StringifyJSON@var[]..[]", + "Replication": "Auto", + "Description": "Stringify converts an arbitrary value or a list of arbitrary values to JSON. Replication can be used to apply the operation over a list, producing a list of JSON strings.\n\nData.StringifyJSON (values: var[]..[]): string" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "aee78c66b92644c6a8d44b2567559c2a", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "f76e2c39c9114ee39f96b6031cd79ec4", + "Name": "json", + "Description": "A JSON string\n\nstring", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "f6faaa8170fe44c8b55e78f931da9f16", + "Name": "result", + "Description": "The result type depends on the content of the input string. The result type can be a primitive value (e.g. string, boolean, double), a List, or a Dictionary.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Data.ParseJSON@string", + "Replication": "Auto", + "Description": "Parse converts an arbitrary JSON string to a value. It is the opposite of JSON.Stringify.\n\nData.ParseJSON (json: string): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "8ba7c170b97a4a20b7e2c7b80c117a7c", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "7dc7ae3716564cdf8fdec06d96212325", + "Name": "geometry", + "Description": "Autodesk.DesignScript.Geometry.Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "764e92c592c74b89b3a69a4cc37e8fae", + "Name": "other", + "Description": "Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "2cf2bd1c6c4d46ba8baca0e1dac1d801", + "Name": "bool", + "Description": "bool", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Geometry.IsAlmostEqualTo@Autodesk.DesignScript.Geometry.Geometry", + "Replication": "Auto", + "Description": "Check if the two objects have the same representational geometry or numerical values\n\nGeometry.IsAlmostEqualTo (other: Geometry): bool" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "64bea9ed5c14464ebbe7c180f353eb3e", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "aec4fc95f2a14d0fbb0efbf0000a2109", + "Name": "json", + "Description": "A JSON string\n\nstring", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "4d23a4e68ab348338c94b97e973b3df9", + "Name": "result", + "Description": "The result type depends on the content of the input string. The result type can be a primitive value (e.g. string, boolean, double), a List, or a Dictionary.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Data.ParseJSON@string", + "Replication": "Auto", + "Description": "Parse converts an arbitrary JSON string to a value. It is the opposite of JSON.Stringify.\n\nData.ParseJSON (json: string): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "76b48c283ee1422ba1b94074361de726", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "af3f7b3e227f422997d5d2dc69ed81e9", + "Name": "geometry", + "Description": "Autodesk.DesignScript.Geometry.Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "be060714cfc04ab1bfa4ccf4d8dd920b", + "Name": "other", + "Description": "Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "5b1dc05e1cea472da40c3c2eb18e35b5", + "Name": "bool", + "Description": "bool", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Geometry.IsAlmostEqualTo@Autodesk.DesignScript.Geometry.Geometry", + "Replication": "Auto", + "Description": "Check if the two objects have the same representational geometry or numerical values\n\nGeometry.IsAlmostEqualTo (other: Geometry): bool" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "8534baf828b44ffa81cdc62329342684", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "e2711c52b08c4fab9cef44ca20930aff", + "Name": "geometry", + "Description": "Autodesk.DesignScript.Geometry.Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "e23035370928433bbbb52ab7e76bae94", + "Name": "mirrorPlane", + "Description": "Plane", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "78f187c0c2604596b085baa70028d13d", + "Name": "Geometry", + "Description": "Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Geometry.Mirror@Autodesk.DesignScript.Geometry.Plane", + "Replication": "Auto", + "Description": "Mirror the object across the input Plane\n\nGeometry.Mirror (mirrorPlane: Plane): Geometry" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "767bdec7453b4fdcaf2ebb01522ea09f", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "67a928ef2140465ead0d4ea92e9c39a1", + "Name": "json", + "Description": "A JSON string\n\nstring", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "6975d9dbcd3a4e32a63694b0ae3d43f2", + "Name": "result", + "Description": "The result type depends on the content of the input string. The result type can be a primitive value (e.g. string, boolean, double), a List, or a Dictionary.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Data.ParseJSON@string", + "Replication": "Auto", + "Description": "Parse converts an arbitrary JSON string to a value. It is the opposite of JSON.Stringify.\n\nData.ParseJSON (json: string): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "29705674a3e94b6b81cbe6956e32ee0c", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "7afcdfbf95664d4cbf009312af61f9f0", + "Name": "geometry", + "Description": "Autodesk.DesignScript.Geometry.Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "3b54b30f69dc433e902cad9e470c7d6e", + "Name": "other", + "Description": "Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "bb8e5cd723bd45bc997635669c38267f", + "Name": "bool", + "Description": "bool", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Geometry.IsAlmostEqualTo@Autodesk.DesignScript.Geometry.Geometry", + "Replication": "Auto", + "Description": "Check if the two objects have the same representational geometry or numerical values\n\nGeometry.IsAlmostEqualTo (other: Geometry): bool" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "a57d442ff84e489db97745c75d23cd12", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "ab2a3944a6e94e168b9d69d6ade54d58", + "Name": "values", + "Description": "A List of values\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "dc51adbd19d74d7ba466018e90559b54", + "Name": "json", + "Description": "A JSON string where primitive types (e.g. double, int, boolean), Lists, and Dictionary's will be turned into the associated JSON type.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Data.StringifyJSON@var[]..[]", + "Replication": "Auto", + "Description": "Stringify converts an arbitrary value or a list of arbitrary values to JSON. Replication can be used to apply the operation over a list, producing a list of JSON strings.\n\nData.StringifyJSON (values: var[]..[]): string" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "6f19bea033444d629a6d48e408151150", + "NodeType": "FunctionNode", + "Inputs": [], + "Outputs": [ + { + "Id": "10d8e8277be64cc785f7e4d7d05c9bdc", + "Name": "Plane", + "Description": "Plane at XZ plane of world", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Plane.XZ", + "Replication": "Auto", + "Description": "Creates a plane in the world XZ plane\n\nPlane.XZ ( ): Plane" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "1243848a1f4e4aae8be1493099f1b362", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "bb45d20118db487bad17bea9a8279f8e", + "Name": "x", + "Description": "double\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "0ec5e737b63245799b8a01cecfa369a9", + "Name": "y", + "Description": "double\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "8dce5d1a7fb6440e9bb55e10a41719eb", + "Name": "z", + "Description": "double\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "002fe80835914262b2c232908bd46f83", + "Name": "CoordinateSystem", + "Description": "CoordinateSystem", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.CoordinateSystem.ByOrigin@double,double,double", + "Replication": "Auto", + "Description": "Create a CoordinateSystem with origin at X, Y, and Z locations, with X and Y Axes set as WCS X and Y Axes.\n\nCoordinateSystem.ByOrigin (x: double = 0, y: double = 0, z: double = 0): CoordinateSystem" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "3ee1ab4d1bc6477db1f68f13049adb6c", + "NodeType": "CodeBlockNode", + "Inputs": [], + "Outputs": [ + { + "Id": "50044d3fa4c64b1a809f864dae692a83", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "f76ebe9b3d40440daf123485571b20a1", + "Name": "", + "Description": "Value of expression at line 2", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "44c9b74bd2fb4e81bca60df8467c5637", + "Name": "", + "Description": "Value of expression at line 3", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "2;\n3;\n4;" + }, + { + "ConcreteType": "CoreNodeModels.Input.DoubleInput, CoreNodeModels", + "NumberType": "Double", + "Id": "38dec0d95d7645e2ad00d2874f6d9ae5", + "NodeType": "NumberInputNode", + "Inputs": [], + "Outputs": [ + { + "Id": "8fcdbb6c25864f1d809e222834b739ba", + "Name": "", + "Description": "Double", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Creates a number", + "InputValue": 2.3 + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "8fca71f16aca4bffb5587d18820fd9f9", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "2bd8e7f9b99d4365a943508f12334643", + "Name": "geometry", + "Description": "Autodesk.DesignScript.Geometry.Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "4a190bf910c34e52aec243f3e1137a4e", + "Name": "fromCoordinateSystem", + "Description": "CoordinateSystem", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "de3ce6ab8add4441a30f691bf2ac1957", + "Name": "contextCoordinateSystem", + "Description": "CoordinateSystem", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "5eab4afbacc546ec997960115fd51691", + "Name": "Geometry", + "Description": "Transformed Geometry.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Geometry.Transform@Autodesk.DesignScript.Geometry.CoordinateSystem,Autodesk.DesignScript.Geometry.CoordinateSystem", + "Replication": "Auto", + "Description": "Transforms this geometry from source CoordinateSystem to a new context CoordinateSystem.\n\nGeometry.Transform (fromCoordinateSystem: CoordinateSystem, contextCoordinateSystem: CoordinateSystem): Geometry" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "fb0b3f985363442abcbde658647911ac", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "1ff1d15b859d4ee29115cd1c0ead588d", + "Name": "x", + "Description": "double\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "21820f93ceec4c3ca4562a746e21968a", + "Name": "y", + "Description": "double\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "81595a7058714c79a1a88298ff6b0c65", + "Name": "CoordinateSystem", + "Description": "CoordinateSystem", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.CoordinateSystem.ByOrigin@double,double", + "Replication": "Auto", + "Description": "Create a CoordinateSystem with origin at X and Y locations, with X and Y Axes set as WCS X and Y Axes. Z defaults to 0.\n\nCoordinateSystem.ByOrigin (x: double = 0, y: double = 0): CoordinateSystem" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "e5ca8a80910a4f5e836ba0d27e110c69", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "9056ddab7b564630a25f3623a049d8ca", + "Name": "geometry", + "Description": "Autodesk.DesignScript.Geometry.Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "1bb3e90a856c43f89a87782eea8f4542", + "Name": "other", + "Description": "Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "5f8253fd721243cb909a8dcf2527c003", + "Name": "bool", + "Description": "bool", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Geometry.IsAlmostEqualTo@Autodesk.DesignScript.Geometry.Geometry", + "Replication": "Auto", + "Description": "Check if the two objects have the same representational geometry or numerical values\n\nGeometry.IsAlmostEqualTo (other: Geometry): bool" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "4ddd0e12be3645d89f063ce580974b37", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "eed7aef14f734e6cbc8c7bdb4b41f3b5", + "Name": "x", + "Description": "X coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "9c4fd5bf505747d6b193aa3852c71f71", + "Name": "y", + "Description": "Y coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "b537839e703248079513bb1ec04d496d", + "Name": "z", + "Description": "Z coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "8dcba9b9130540bfae1e85772b1b7aa6", + "Name": "Point", + "Description": "Point created by coordinates", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Point.ByCoordinates@double,double,double", + "Replication": "Auto", + "Description": "Form a Point given 3 cartesian coordinates\n\nPoint.ByCoordinates (x: double = 0, y: double = 0, z: double = 0): Point" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "d2b5bf6881c64b3397107a8b6052d42b", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "d21639983e824f15903438387a63878e", + "Name": "coordinateSystem", + "Description": "Autodesk.DesignScript.Geometry.CoordinateSystem", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "9af7e08dd22947938a602069e4fecd08", + "Name": "amount", + "Description": "Amount to scale\n\ndouble\nDefault value : 1", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "b296f66fb10e467bb80fc215ce4d2a1c", + "Name": "CoordinateSystem", + "Description": "Scaled coordinate system", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.CoordinateSystem.Scale@double", + "Replication": "Auto", + "Description": "Scale uniformly around the origin\n\nCoordinateSystem.Scale (amount: double = 1): CoordinateSystem" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "8a8295f4ae7a4612a96731e899f58d23", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "055e66b2b96e42d5986ab7d92cfd41a9", + "Name": "json", + "Description": "A JSON string\n\nstring", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "4daea39667094d8aaa9f378edd2a1a49", + "Name": "result", + "Description": "The result type depends on the content of the input string. The result type can be a primitive value (e.g. string, boolean, double), a List, or a Dictionary.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Data.ParseJSON@string", + "Replication": "Auto", + "Description": "Parse converts an arbitrary JSON string to a value. It is the opposite of JSON.Stringify.\n\nData.ParseJSON (json: string): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "f25d256075c443ec8c63348c13e96ba0", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "c3be03ef72a44d3f9e8bf825d12fb502", + "Name": "values", + "Description": "A List of values\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "f583df15cf4e412d8bb3745e8b819159", + "Name": "json", + "Description": "A JSON string where primitive types (e.g. double, int, boolean), Lists, and Dictionary's will be turned into the associated JSON type.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Data.StringifyJSON@var[]..[]", + "Replication": "Auto", + "Description": "Stringify converts an arbitrary value or a list of arbitrary values to JSON. Replication can be used to apply the operation over a list, producing a list of JSON strings.\n\nData.StringifyJSON (values: var[]..[]): string" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "776cdf0b90a84df49ff4c664b2547581", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "7d40986c10344dd29d7d1b2720486a10", + "Name": "coordinateSystem", + "Description": "Autodesk.DesignScript.Geometry.CoordinateSystem", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "0ae605b13f8341ccb1b140a7da709448", + "Name": "origin", + "Description": "Origin point\n\nPoint", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "8f23d00433104b1d8c0a9d5de2a2ac63", + "Name": "axis", + "Description": "Vector axis for rotation\n\nVector", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "e69d3bf01dd6431087f3dfa459d511cd", + "Name": "degrees", + "Description": "Degrees to rotate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "836f913ff43e4e57b2eeb373d895e91d", + "Name": "CoordinateSystem", + "Description": "Rotated coordinate system", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.CoordinateSystem.Rotate@Autodesk.DesignScript.Geometry.Point,Autodesk.DesignScript.Geometry.Vector,double", + "Replication": "Auto", + "Description": "Rotates an object around an origin and an axis by a specified degree\n\nCoordinateSystem.Rotate (origin: Point, axis: Vector, degrees: double = 0): CoordinateSystem" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "55338b19f15a4716a84e05be164ecede", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "5cf2655db2e44a1aac590205f840a63a", + "Name": "x", + "Description": "X coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "75eaf4831784469cb121124f0667cd00", + "Name": "y", + "Description": "Y coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "3d8dd3d89cf0485195bd48a7afcb3690", + "Name": "z", + "Description": "Z coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "3dc5ec5f4d634ba1bbd92eec239350cb", + "Name": "Vector", + "Description": "Vector created by coordinates", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Vector.ByCoordinates@double,double,double", + "Replication": "Auto", + "Description": "Form a Vector by 3 Euclidean coordinates\n\nVector.ByCoordinates (x: double = 0, y: double = 0, z: double = 0): Vector" + }, + { + "ConcreteType": "CoreNodeModels.Input.DoubleInput, CoreNodeModels", + "NumberType": "Double", + "Id": "7520ba92aba848029833ce73c41c5e7a", + "NodeType": "NumberInputNode", + "Inputs": [], + "Outputs": [ + { + "Id": "d5a555936d0c43f4aa80dcdd2af958fb", + "Name": "", + "Description": "Double", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Creates a number", + "InputValue": 24.0 + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "b6a4919b3dd94eb79a7f0435d941d235", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "44ac9e25c9e143aba0a0d6296c4a833f", + "Name": "list", + "Description": "List to be checked on whether all items are true.\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "0c070ca465574aa4a4fd56cff34d3117", + "Name": "bool", + "Description": "True if all items from list are true, false if one or more items is not true", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.List.AllTrue@var[]..[]", + "Replication": "Auto", + "Description": "Determines if all items in the given list is a boolean and has a true value.\n\nList.AllTrue (list: var[]..[]): bool" + }, + { + "ConcreteType": "CoreNodeModels.CreateList, CoreNodeModels", + "VariableInputPorts": true, + "Id": "bb5b5913361845cea59f8581e4f21359", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "3013bdfe41fa48b9b00cc6a593a9cc70", + "Name": "item0", + "Description": "Item Index #0", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "fd52af84b8444a91870068867c88661e", + "Name": "item1", + "Description": "Item Index #1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "4601fe868b4b4f919280b2221434a0b4", + "Name": "item2", + "Description": "Item Index #2", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "2b386790ba6c41a9a9a1e3691abb8eac", + "Name": "item3", + "Description": "Item Index #3", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "2cd80e8eeb6b4d299bc66d9dfc3fce8a", + "Name": "list", + "Description": "A list (type: var[]..[])", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Makes a new list from the given inputs" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "8318d7b09bc24c0e80458ffe8d885952", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "027359f1416a435e90b73dc845fb78ce", + "Name": "axisPoint", + "Description": "Axis point\n\nPoint\nDefault value : Autodesk.DesignScript.Geometry.Point.ByCoordinates(0, 0, 0)", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "f708c9c3f700454e9ea031f4ec165f15", + "Name": "axisDirection", + "Description": "Axis direction vector\n\nVector\nDefault value : Autodesk.DesignScript.Geometry.Vector.ByCoordinates(0, 0, 1)", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "dbd02603b73b49d0b7711188461d3e7a", + "Name": "startPoint", + "Description": "Helix start point\n\nPoint\nDefault value : Autodesk.DesignScript.Geometry.Point.ByCoordinates(1, 0, 0)", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "d9dd46253f704f94837f5da4f2849ad9", + "Name": "pitch", + "Description": "Distance of the helix per each 360 degrees in the direction of the axis\n\ndouble\nDefault value : 1", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "b1c935a2142e40fbb0a7d0f283f8ad81", + "Name": "angleTurns", + "Description": "How many turns in degrees\n\ndouble\nDefault value : 360", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "0ff92dc1000f4be59da24fbf1ab62c48", + "Name": "Helix", + "Description": "Helix created by axis", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Helix.ByAxis@Autodesk.DesignScript.Geometry.Point,Autodesk.DesignScript.Geometry.Vector,Autodesk.DesignScript.Geometry.Point,double,double", + "Replication": "Auto", + "Description": "Create a Helix. The helix always rotates clockwise about the supplied axis direction. If viewing along the axis direction, the viewer will see the point turning clockwise around the axis as it moves along the curve in the direction of increasing parameter. Pitch is Distance the helix moves in the axis direction per turn. This can be positive or negative.\n\nHelix.ByAxis (axisPoint: Point = Autodesk.DesignScript.Geometry.Point.ByCoordinates(0, 0, 0), axisDirection: Vector = Autodesk.DesignScript.Geometry.Vector.ByCoordinates(0, 0, 1), startPoint: Point = Autodesk.DesignScript.Geometry.Point.ByCoordinates(1, 0, 0), pitch: double = 1, angleTurns: double = 360): Helix" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "5702c4d59d87445d954eaec6a8449c6a", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "43f2f67f275b48b2bc35deec10a6bcfb", + "Name": "object", + "Description": "Object to query type\n\nvar", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "d40c84e624394d09a98578b8210b4aa8", + "Name": "string", + "Description": "Type of object.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Object.Type@var", + "Replication": "Auto", + "Description": "Returns the type of object represented as string.\n\nObject.Type (object: var): string" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "7f3cf3ebdd824a5fa3a8d7986b418ae1", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "5e49dd51568a405484916e2456bcb199", + "Name": "object", + "Description": "Object to query type\n\nvar", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "75f6febc1cd7404c8160c4b546d75a58", + "Name": "string", + "Description": "Type of object.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Object.Type@var", + "Replication": "Auto", + "Description": "Returns the type of object represented as string.\n\nObject.Type (object: var): string" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "a52e525a8f21462694f0e5be688ef5c1", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "a508c8ee979f4b0fbf884ac68a74df1e", + "Name": "x", + "Description": "Basic type object to compare (e.g. bool, int, double, string, etc.)\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "24db0c3ed90b4c42a742d382d8753a14", + "Name": "y", + "Description": "Basic type object to compare (e.g. bool, int, double, string, etc.)\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "75e20800a4964795968442041153a006", + "Name": "bool", + "Description": "Result of equality check", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "==@var[]..[],var[]..[]", + "Replication": "Auto", + "Description": "Compares if x and y are equal\n\n== (x: var[]..[], y: var[]..[]): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "1bbd147b429c43ab8fe46a00d691a024", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "94bbc3e2c65c4bdcb48d80ec34536a6a", + "Name": "list", + "Description": "List to be checked on whether all items are false.\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "3911759a898b4bc5bb6e3228570128fe", + "Name": "bool", + "Description": "True if all items from list are false, false if one or more items is not false", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.List.AllFalse@var[]..[]", + "Replication": "Auto", + "Description": "Determines if all items in the given list is a boolean and has a false value.\n\nList.AllFalse (list: var[]..[]): bool" + } + ], + "Connectors": [ + { + "Start": "413dafc868154b68bc3ab72273e9a77f", + "End": "f708c9c3f700454e9ea031f4ec165f15", + "Id": "a6ecb1f6d0934aa2aaca3ac5d13dce06", + "IsHidden": "False" + }, + { + "Start": "975ce85ae78548ada856b10d18376f98", + "End": "07752ef9e5c44d47b3f618afc1736c3f", + "Id": "4b84d7f011af4f81a538a930bc372d79", + "IsHidden": "False" + }, + { + "Start": "ef652120f2ac43e7a749f79a39a8ec08", + "End": "7f790911b3b645a1bf4023e3cfd83d25", + "Id": "101efb091d104e40a91311e1014cda8f", + "IsHidden": "False" + }, + { + "Start": "34715631308b44d48098149e6943f1f4", + "End": "12d4b0c7e4e5471ba831ebf2bf585f57", + "Id": "0978411b7ba0426caf522526495b9302", + "IsHidden": "False" + }, + { + "Start": "956b29b3f25644dcbdaf63fa91f134d5", + "End": "0d5fa133ec6c4126bf271c4b5c869dbf", + "Id": "5a2a17d68630422cbc283020818197e7", + "IsHidden": "False" + }, + { + "Start": "956b29b3f25644dcbdaf63fa91f134d5", + "End": "af3f7b3e227f422997d5d2dc69ed81e9", + "Id": "a859e58c8ca9488abb95e48a215e2572", + "IsHidden": "False" + }, + { + "Start": "6f163a8dab7745a59c613cb26a7b9720", + "End": "f76e2c39c9114ee39f96b6031cd79ec4", + "Id": "5f2b89f5cf6f44b1906ca83b75142b67", + "IsHidden": "False" + }, + { + "Start": "9ecd0ae7aeb44c50b10b925d0cad1d03", + "End": "aec4fc95f2a14d0fbb0efbf0000a2109", + "Id": "4704e490cc85487fa2c833c6ff7475ce", + "IsHidden": "False" + }, + { + "Start": "f6faaa8170fe44c8b55e78f931da9f16", + "End": "764e92c592c74b89b3a69a4cc37e8fae", + "Id": "8c5f325c7e994330aa8b7e79e24ff4e5", + "IsHidden": "False" + }, + { + "Start": "f6faaa8170fe44c8b55e78f931da9f16", + "End": "5e49dd51568a405484916e2456bcb199", + "Id": "2aa8e64a99744912ad3052a5131e7534", + "IsHidden": "False" + }, + { + "Start": "2cf2bd1c6c4d46ba8baca0e1dac1d801", + "End": "3013bdfe41fa48b9b00cc6a593a9cc70", + "Id": "3483769ac44945e783cc9a7f58211a78", + "IsHidden": "False" + }, + { + "Start": "4d23a4e68ab348338c94b97e973b3df9", + "End": "be060714cfc04ab1bfa4ccf4d8dd920b", + "Id": "7a7c04b43a684927845e8f84acb7e7b1", + "IsHidden": "False" + }, + { + "Start": "5b1dc05e1cea472da40c3c2eb18e35b5", + "End": "fd52af84b8444a91870068867c88661e", + "Id": "2e1c63b020464bda9b82ac2efda0e022", + "IsHidden": "False" + }, + { + "Start": "78f187c0c2604596b085baa70028d13d", + "End": "ab2a3944a6e94e168b9d69d6ade54d58", + "Id": "8a32359b1b87441daf76acc08e0180a7", + "IsHidden": "False" + }, + { + "Start": "78f187c0c2604596b085baa70028d13d", + "End": "7afcdfbf95664d4cbf009312af61f9f0", + "Id": "ce077d625f82469c8e787429d554fed6", + "IsHidden": "False" + }, + { + "Start": "6975d9dbcd3a4e32a63694b0ae3d43f2", + "End": "3b54b30f69dc433e902cad9e470c7d6e", + "Id": "9f08d1a03fdb4f219f26eec33d746b57", + "IsHidden": "False" + }, + { + "Start": "bb8e5cd723bd45bc997635669c38267f", + "End": "4601fe868b4b4f919280b2221434a0b4", + "Id": "f48f33f6feba449d86b25d212e134708", + "IsHidden": "False" + }, + { + "Start": "dc51adbd19d74d7ba466018e90559b54", + "End": "67a928ef2140465ead0d4ea92e9c39a1", + "Id": "f5b63597d085401fa32ab749a643be8d", + "IsHidden": "False" + }, + { + "Start": "10d8e8277be64cc785f7e4d7d05c9bdc", + "End": "e23035370928433bbbb52ab7e76bae94", + "Id": "65e33dcc011b414095241ae6ee10335b", + "IsHidden": "False" + }, + { + "Start": "002fe80835914262b2c232908bd46f83", + "End": "7d40986c10344dd29d7d1b2720486a10", + "Id": "67609777fcc240dbb64353f557695a5e", + "IsHidden": "False" + }, + { + "Start": "50044d3fa4c64b1a809f864dae692a83", + "End": "bb45d20118db487bad17bea9a8279f8e", + "Id": "06670b6ab408425197dbddc2e4aea5b7", + "IsHidden": "False" + }, + { + "Start": "50044d3fa4c64b1a809f864dae692a83", + "End": "5cf2655db2e44a1aac590205f840a63a", + "Id": "dea05e68796f4ee7b678cd0faf37627a", + "IsHidden": "False" + }, + { + "Start": "f76ebe9b3d40440daf123485571b20a1", + "End": "0ec5e737b63245799b8a01cecfa369a9", + "Id": "dcfec460549645ec9cb51f65947e9493", + "IsHidden": "False" + }, + { + "Start": "44c9b74bd2fb4e81bca60df8467c5637", + "End": "8dce5d1a7fb6440e9bb55e10a41719eb", + "Id": "ab6391c5902e4ed789ffbf54ff35584e", + "IsHidden": "False" + }, + { + "Start": "44c9b74bd2fb4e81bca60df8467c5637", + "End": "75eaf4831784469cb121124f0667cd00", + "Id": "19474c040d904b95be4bbc7e8bc8be53", + "IsHidden": "False" + }, + { + "Start": "8fcdbb6c25864f1d809e222834b739ba", + "End": "9af7e08dd22947938a602069e4fecd08", + "Id": "4ad7d6783e6f479b8b44d8ad9b30f474", + "IsHidden": "False" + }, + { + "Start": "5eab4afbacc546ec997960115fd51691", + "End": "c3be03ef72a44d3f9e8bf825d12fb502", + "Id": "ec3e1479508348a19d2a47497dccf040", + "IsHidden": "False" + }, + { + "Start": "5eab4afbacc546ec997960115fd51691", + "End": "9056ddab7b564630a25f3623a049d8ca", + "Id": "d03ed67236f743798284a2801ab9613e", + "IsHidden": "False" + }, + { + "Start": "81595a7058714c79a1a88298ff6b0c65", + "End": "4a190bf910c34e52aec243f3e1137a4e", + "Id": "bd502a2fb30243428d91019ad6539433", + "IsHidden": "False" + }, + { + "Start": "5f8253fd721243cb909a8dcf2527c003", + "End": "2b386790ba6c41a9a9a1e3691abb8eac", + "Id": "7e2ce722e34c48ff9c0bbec4d88247b0", + "IsHidden": "False" + }, + { + "Start": "8dcba9b9130540bfae1e85772b1b7aa6", + "End": "0ae605b13f8341ccb1b140a7da709448", + "Id": "a94db2868f0e45e28383fc035b82318c", + "IsHidden": "False" + }, + { + "Start": "b296f66fb10e467bb80fc215ce4d2a1c", + "End": "de3ce6ab8add4441a30f691bf2ac1957", + "Id": "4408c5cdeee645dfbfa1eb1a70833991", + "IsHidden": "False" + }, + { + "Start": "4daea39667094d8aaa9f378edd2a1a49", + "End": "1bb3e90a856c43f89a87782eea8f4542", + "Id": "40cdd293102c4d52b2541e3f0a70623f", + "IsHidden": "False" + }, + { + "Start": "f583df15cf4e412d8bb3745e8b819159", + "End": "055e66b2b96e42d5986ab7d92cfd41a9", + "Id": "349b44b98d72425b833901b94d65a66f", + "IsHidden": "False" + }, + { + "Start": "836f913ff43e4e57b2eeb373d895e91d", + "End": "d21639983e824f15903438387a63878e", + "Id": "a9f1a77b60a045fc8ca427c7527cf97d", + "IsHidden": "False" + }, + { + "Start": "3dc5ec5f4d634ba1bbd92eec239350cb", + "End": "8f23d00433104b1d8c0a9d5de2a2ac63", + "Id": "b2d5f604db4b46e7ad368a3915cdffb5", + "IsHidden": "False" + }, + { + "Start": "d5a555936d0c43f4aa80dcdd2af958fb", + "End": "e69d3bf01dd6431087f3dfa459d511cd", + "Id": "1be3d938e47a4f71bda2d9723aa7caab", + "IsHidden": "False" + }, + { + "Start": "2cd80e8eeb6b4d299bc66d9dfc3fce8a", + "End": "44ac9e25c9e143aba0a0d6296c4a833f", + "Id": "ccb55d8886024200b39226d7d24882c8", + "IsHidden": "False" + }, + { + "Start": "0ff92dc1000f4be59da24fbf1ab62c48", + "End": "6d08c2a910c04d83af8f0e3f8e5c1d9b", + "Id": "1e5e272273894b86807a7664b3e3b9e8", + "IsHidden": "False" + }, + { + "Start": "0ff92dc1000f4be59da24fbf1ab62c48", + "End": "7dc7ae3716564cdf8fdec06d96212325", + "Id": "491b3f6602bd41a3ac745d6c9708a6f7", + "IsHidden": "False" + }, + { + "Start": "0ff92dc1000f4be59da24fbf1ab62c48", + "End": "e2711c52b08c4fab9cef44ca20930aff", + "Id": "d2d96251971b43ac9ff6380300b4ac4b", + "IsHidden": "False" + }, + { + "Start": "0ff92dc1000f4be59da24fbf1ab62c48", + "End": "2bd8e7f9b99d4365a943508f12334643", + "Id": "5302bf39a36b4ce7aade7a8c2f95b923", + "IsHidden": "False" + }, + { + "Start": "0ff92dc1000f4be59da24fbf1ab62c48", + "End": "d6e3da16aee140a6863cf025969f6cbe", + "Id": "c3f7d8ec78c748fd986f608d31a6c42e", + "IsHidden": "False" + }, + { + "Start": "0ff92dc1000f4be59da24fbf1ab62c48", + "End": "43f2f67f275b48b2bc35deec10a6bcfb", + "Id": "eb21b4a52aff4e79a6ba8d0f71052ce9", + "IsHidden": "False" + }, + { + "Start": "d40c84e624394d09a98578b8210b4aa8", + "End": "a508c8ee979f4b0fbf884ac68a74df1e", + "Id": "d0e751f85ac04def9ddebaaec9547895", + "IsHidden": "False" + }, + { + "Start": "75f6febc1cd7404c8160c4b546d75a58", + "End": "24db0c3ed90b4c42a742d382d8753a14", + "Id": "7158847fbf72442caf7455aa04c1414c", + "IsHidden": "False" + }, + { + "Start": "75e20800a4964795968442041153a006", + "End": "94bbc3e2c65c4bdcb48d80ec34536a6a", + "Id": "bb2c9fcb5a024dae91ebb19b7d7871ed", + "IsHidden": "False" + } + ], + "Dependencies": [], + "NodeLibraryDependencies": [], + "Thumbnail": "", + "GraphDocumentationURL": null, + "ExtensionWorkspaceData": [ + { + "ExtensionGuid": "28992e1d-abb9-417f-8b1b-05e053bee670", + "Name": "Properties", + "Version": "3.0", + "Data": {} + } + ], + "Author": "None provided", + "Linting": { + "activeLinter": "None", + "activeLinterId": "7b75fb44-43fd-4631-a878-29f4d5d8399a", + "warningCount": 0, + "errorCount": 0 + }, + "Bindings": [], + "View": { + "Dynamo": { + "ScaleFactor": 1.0, + "HasRunWithoutCrash": true, + "IsVisibleInDynamoLibrary": true, + "Version": "3.0.0.5795", + "RunType": "Automatic", + "RunPeriod": "1000" + }, + "Camera": { + "Name": "_Background Preview", + "EyeX": -15.315930607896423, + "EyeY": 5.3010078979170085, + "EyeZ": -1.435435072853578, + "LookX": 19.249624493699645, + "LookY": -1.3078819823896652, + "LookZ": -1.197717888877379, + "UpX": -0.14752399921417236, + "UpY": 0.9890159368515015, + "UpZ": 0.009179282002151012 + }, + "ConnectorPins": [], + "NodeViews": [ + { + "Id": "3427c770c99e4fddabd0ed33fe4953e6", + "Name": "Vector.ByCoordinates", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2540.2035347906785, + "Y": 2502.585223634172 + }, + { + "Id": "103c168af6dc44acadad7c8b330a3e9a", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2286.2035347906785, + "Y": 2511.240223634172 + }, + { + "Id": "79799cbad16a485ca066e625df68bbd6", + "Name": "Curve.Reverse", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 3007.5683636520444, + "Y": 3226.789378632063 + }, + { + "Id": "6a61c53f214e45d29e3c00784d6edaa0", + "Name": "Data.StringifyJSON", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 3536.4430698321557, + "Y": 2585.823585409682 + }, + { + "Id": "d901e2383f764f68bb6c39d4515537a4", + "Name": "Data.StringifyJSON", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 3462.309130118958, + "Y": 3446.3658439539613 + }, + { + "Id": "aee78c66b92644c6a8d44b2567559c2a", + "Name": "Data.ParseJSON", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 3846.429183664209, + "Y": 2586.8891689652746 + }, + { + "Id": "8ba7c170b97a4a20b7e2c7b80c117a7c", + "Name": "Geometry.IsAlmostEqualTo", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 4116.622064250312, + "Y": 2273.3243969688365 + }, + { + "Id": "64bea9ed5c14464ebbe7c180f353eb3e", + "Name": "Data.ParseJSON", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 3787.288138883224, + "Y": 3446.8455854514596 + }, + { + "Id": "76b48c283ee1422ba1b94074361de726", + "Name": "Geometry.IsAlmostEqualTo", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 4169.894083234846, + "Y": 3095.7107016970212 + }, + { + "Id": "8534baf828b44ffa81cdc62329342684", + "Name": "Geometry.Mirror", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 3197.882558109642, + "Y": 3833.3328009382003 + }, + { + "Id": "767bdec7453b4fdcaf2ebb01522ea09f", + "Name": "Data.ParseJSON", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 3931.2114888420797, + "Y": 4143.464904370941 + }, + { + "Id": "29705674a3e94b6b81cbe6956e32ee0c", + "Name": "Geometry.IsAlmostEqualTo", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 4206.181893202794, + "Y": 4002.451655566858 + }, + { + "Id": "a57d442ff84e489db97745c75d23cd12", + "Name": "Data.StringifyJSON", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 3639.48762183935, + "Y": 4143.325889007114 + }, + { + "Id": "6f19bea033444d629a6d48e408151150", + "Name": "Plane.XZ", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2957.334610191485, + "Y": 3918.082532655486 + }, + { + "Id": "1243848a1f4e4aae8be1493099f1b362", + "Name": "CoordinateSystem.ByOrigin", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1929.447524424987, + "Y": 4491.615206588362 + }, + { + "Id": "3ee1ab4d1bc6477db1f68f13049adb6c", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1675.447524424987, + "Y": 4526.752706588362 + }, + { + "Id": "38dec0d95d7645e2ad00d2874f6d9ae5", + "Name": "Number", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2355.315829427469, + "Y": 4602.615206588362 + }, + { + "Id": "8fca71f16aca4bffb5587d18820fd9f9", + "Name": "Geometry.Transform", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 3258.814059248793, + "Y": 4436.038654588036 + }, + { + "Id": "fb0b3f985363442abcbde658647911ac", + "Name": "CoordinateSystem.ByOrigin", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2891.338986036123, + "Y": 4471.456957092327 + }, + { + "Id": "e5ca8a80910a4f5e836ba0d27e110c69", + "Name": "Geometry.IsAlmostEqualTo", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 4233.552458504966, + "Y": 4552.662678955117 + }, + { + "Id": "4ddd0e12be3645d89f063ce580974b37", + "Name": "Point.ByCoordinates", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1929.447524424987, + "Y": 4703.615206588362 + }, + { + "Id": "d2b5bf6881c64b3397107a8b6052d42b", + "Name": "CoordinateSystem.Scale", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2835.2346713611933, + "Y": 4663.615206588362 + }, + { + "Id": "8a8295f4ae7a4612a96731e899f58d23", + "Name": "Data.ParseJSON", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 3958.582054144252, + "Y": 4693.675927759199 + }, + { + "Id": "f25d256075c443ec8c63348c13e96ba0", + "Name": "Data.StringifyJSON", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 3666.8581871415226, + "Y": 4693.536912395373 + }, + { + "Id": "776cdf0b90a84df49ff4c664b2547581", + "Name": "CoordinateSystem.Rotate", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2307.947524424987, + "Y": 4758.615206588362 + }, + { + "Id": "55338b19f15a4716a84e05be164ecede", + "Name": "Vector.ByCoordinates", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1929.447524424987, + "Y": 4915.615206588362 + }, + { + "Id": "7520ba92aba848029833ce73c41c5e7a", + "Name": "Number", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1929.447524424987, + "Y": 5127.615206588362 + }, + { + "Id": "b6a4919b3dd94eb79a7f0435d941d235", + "Name": "List.AllTrue", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 5469.163233716118, + "Y": 3261.0188189354258 + }, + { + "Id": "bb5b5913361845cea59f8581e4f21359", + "Name": "List Create", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 5122.848007195213, + "Y": 3256.544925506534 + }, + { + "Id": "8318d7b09bc24c0e80458ffe8d885952", + "Name": "Helix.ByAxis", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2929.5258600548764, + "Y": 2472.9871005889213 + }, + { + "Id": "5702c4d59d87445d954eaec6a8449c6a", + "Name": "Object.Type", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 4218.054051736371, + "Y": 2691.763228141502 + }, + { + "Id": "7f3cf3ebdd824a5fa3a8d7986b418ae1", + "Name": "Object.Type", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 4214.474730058537, + "Y": 2837.0139801495543 + }, + { + "Id": "a52e525a8f21462694f0e5be688ef5c1", + "Name": "==", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 4522.526368340051, + "Y": 2755.1216152257516 + }, + { + "Id": "1bbd147b429c43ab8fe46a00d691a024", + "Name": "List.AllFalse", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 5464.389071444425, + "Y": 2762.1487900307984 + } + ], + "Annotations": [ + { + "Id": "ebe34cb0dc164b6eb7675e198459eb54", + "Title": "All True", + "DescriptionText": "", + "IsExpanded": true, + "WidthAdjustment": 0.0, + "HeightAdjustment": 0.0, + "Nodes": [ + "b6a4919b3dd94eb79a7f0435d941d235" + ], + "HasNestedGroups": false, + "Left": 5459.163233716118, + "Top": 3188.0188189354258, + "Width": 196.0, + "Height": 205.0, + "FontSize": 36.0, + "GroupStyleId": "00000000-0000-0000-0000-000000000000", + "InitialTop": 3261.0188189354258, + "InitialHeight": 145.0, + "TextblockHeight": 63.0, + "Background": "#FFC1D676" + }, + { + "Id": "6dbd67f951654677a6e546607068b6e7", + "Title": "All False", + "DescriptionText": "", + "IsExpanded": true, + "WidthAdjustment": 0.0, + "HeightAdjustment": 0.0, + "Nodes": [ + "1bbd147b429c43ab8fe46a00d691a024" + ], + "HasNestedGroups": false, + "Left": 5454.389071444425, + "Top": 2689.1487900307984, + "Width": 196.0, + "Height": 205.0, + "FontSize": 36.0, + "GroupStyleId": "00000000-0000-0000-0000-000000000000", + "InitialTop": 2762.1487900307984, + "InitialHeight": 145.0, + "TextblockHeight": 63.0, + "Background": "#FFC1D676" + } + ], + "X": -396.49211560527476, + "Y": -586.8404549530976, + "Zoom": 0.2891092940685943 + } +} \ No newline at end of file diff --git a/test/core/json/Curve_Line_JSONParsing.dyn b/test/core/json/Curve_Line_JSONParsing.dyn new file mode 100644 index 00000000000..444936c00c5 --- /dev/null +++ b/test/core/json/Curve_Line_JSONParsing.dyn @@ -0,0 +1,2041 @@ +{ + "Uuid": "6bdfb0fe-b31e-4c71-8f79-7fc29c53e3ac", + "IsCustomNode": false, + "Description": "", + "Name": "Curve_Line_JSONParsing", + "ElementResolver": { + "ResolutionMap": {} + }, + "Inputs": [], + "Outputs": [], + "Nodes": [ + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "186620d42cf04f3b8c8706a3723d35a5", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "bad565a11dc74d0b93316a47fffec75f", + "Name": "json", + "Description": "A JSON string\n\nstring", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "e01aa4a665764bf9981a48e4b12d042a", + "Name": "result", + "Description": "The result type depends on the content of the input string. The result type can be a primitive value (e.g. string, boolean, double), a List, or a Dictionary.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Data.ParseJSON@string", + "Replication": "Auto", + "Description": "Parse converts an arbitrary JSON string to a value. It is the opposite of JSON.Stringify.\n\nData.ParseJSON (json: string): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "f8f38e2638fb4f5690220969e9889012", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "b584618068164d398fe7dbffe593b0ef", + "Name": "values", + "Description": "A List of values\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "98f08663bdfc44e29970670879c98f81", + "Name": "json", + "Description": "A JSON string where primitive types (e.g. double, int, boolean), Lists, and Dictionary's will be turned into the associated JSON type.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Data.StringifyJSON@var[]..[]", + "Replication": "Auto", + "Description": "Stringify converts an arbitrary value or a list of arbitrary values to JSON. Replication can be used to apply the operation over a list, producing a list of JSON strings.\n\nData.StringifyJSON (values: var[]..[]): string" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "71efc8c5c0c74189901707c30e6d5903", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "64cad8271a2c4236a432b3f8cb9a965e", + "Name": "list", + "Description": "List to be checked on whether all items are true.\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "a90bff347c4e47db904a83067894db1f", + "Name": "bool", + "Description": "True if all items from list are true, false if one or more items is not true", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.List.AllTrue@var[]..[]", + "Replication": "Auto", + "Description": "Determines if all items in the given list is a boolean and has a true value.\n\nList.AllTrue (list: var[]..[]): bool" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "6478eb71263841ae88cc4db9254c8a03", + "NodeType": "CodeBlockNode", + "Inputs": [], + "Outputs": [ + { + "Id": "cc61945c36cc4069b7fee6b71ebde162", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "7a905987d9854e618f53cb5fe7af4a3e", + "Name": "", + "Description": "Value of expression at line 2", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "fcd1fdc26c564952bcc3c3689d23ccc8", + "Name": "", + "Description": "Value of expression at line 3", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "3.1;\n4.3;\n5.99;" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "e3913dd28c3d494296d47317256289db", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "664c62bccdb04df4b0a144a6447f5f9c", + "Name": "x", + "Description": "X coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "a61f578b8713432ca2705cf923acc619", + "Name": "y", + "Description": "Y coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "f04be8fa4c554ee78a5ec612a498c387", + "Name": "z", + "Description": "Z coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "a1f2fea9cf2a4bf8ba467dedc467a664", + "Name": "Point", + "Description": "Point created by coordinates", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Point.ByCoordinates@double,double,double", + "Replication": "Auto", + "Description": "Form a Point given 3 cartesian coordinates\n\nPoint.ByCoordinates (x: double = 0, y: double = 0, z: double = 0): Point" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "94bf9f7b3f69443ba2c3666b2f801437", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "d26bca4f5baa4d8a8342e95d19bc93e9", + "Name": "x", + "Description": "X coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "6e5b209d39d344b1a2c42e7cced72752", + "Name": "y", + "Description": "Y coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "6f63691e903f47dea2cd4f6ad7b569e8", + "Name": "z", + "Description": "Z coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "08329a479eee4776bd5fafbedfff1cda", + "Name": "Point", + "Description": "Point created by coordinates", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Point.ByCoordinates@double,double,double", + "Replication": "Auto", + "Description": "Form a Point given 3 cartesian coordinates\n\nPoint.ByCoordinates (x: double = 0, y: double = 0, z: double = 0): Point" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "2c3ac25b7c7147399f6e5802e8c1ada5", + "NodeType": "CodeBlockNode", + "Inputs": [], + "Outputs": [ + { + "Id": "333a3a8e603c4db6920817fb727003e8", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "0e4d4c325c5a469ead8c887e5218d15a", + "Name": "", + "Description": "Value of expression at line 2", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "2b07ea2652244c31af439b825bcb5e4e", + "Name": "", + "Description": "Value of expression at line 3", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "0.4;\n-1;\n1.1;" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "6d2f1fa5b94f4906bdf4d43b45c6205f", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "144e45989e7946b481196327eecf53c0", + "Name": "startPoint", + "Description": "Line start point\n\nPoint", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "8250e12491594f59a81d93f6749880ea", + "Name": "endPoint", + "Description": "Line end point\n\nPoint", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "cc05c0ec26f14b48ad704b6190695a71", + "Name": "Line", + "Description": "Line from start and end point", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Line.ByStartPointEndPoint@Autodesk.DesignScript.Geometry.Point,Autodesk.DesignScript.Geometry.Point", + "Replication": "Auto", + "Description": "Creates a straight Line between two input Points.\n\nLine.ByStartPointEndPoint (startPoint: Point, endPoint: Point): Line" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "35a16b3170884d98a5224874a835c47a", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "e5d6510a49094a7d87bda36a1cd47e42", + "Name": "geometry", + "Description": "Autodesk.DesignScript.Geometry.Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "2d9a75f696754c4e8cabf363ced3a2ae", + "Name": "other", + "Description": "Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "d7cfca1e73a24541a23664821064135d", + "Name": "bool", + "Description": "bool", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Geometry.IsAlmostEqualTo@Autodesk.DesignScript.Geometry.Geometry", + "Replication": "Auto", + "Description": "Check if the two objects have the same representational geometry or numerical values\n\nGeometry.IsAlmostEqualTo (other: Geometry): bool" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "81a8ad0cdddd4835af74bee1689398b0", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "870844dcf21f447ebb921d50d60e564c", + "Name": "json", + "Description": "A JSON string\n\nstring", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "5738257b415a4c81a2a9084865d1ad64", + "Name": "result", + "Description": "The result type depends on the content of the input string. The result type can be a primitive value (e.g. string, boolean, double), a List, or a Dictionary.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Data.ParseJSON@string", + "Replication": "Auto", + "Description": "Parse converts an arbitrary JSON string to a value. It is the opposite of JSON.Stringify.\n\nData.ParseJSON (json: string): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "8ad068dda8b44606b8be718057ce8c63", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "43f17c1051164aaf95fa489848fc10f6", + "Name": "values", + "Description": "A List of values\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "8dc2c0fc7cd448c99acd01c76a5f6c87", + "Name": "json", + "Description": "A JSON string where primitive types (e.g. double, int, boolean), Lists, and Dictionary's will be turned into the associated JSON type.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Data.StringifyJSON@var[]..[]", + "Replication": "Auto", + "Description": "Stringify converts an arbitrary value or a list of arbitrary values to JSON. Replication can be used to apply the operation over a list, producing a list of JSON strings.\n\nData.StringifyJSON (values: var[]..[]): string" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "f1b216eeadbe46fbaafe0350aac9b961", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "1e423d58dfd146bb90fb943d06016674", + "Name": "geometry", + "Description": "Autodesk.DesignScript.Geometry.Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "009d02b0692c4e56a8fb14e4eb28f9dd", + "Name": "other", + "Description": "Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "bcfbdf027dc64521a5a47619af9a283c", + "Name": "bool", + "Description": "bool", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Geometry.IsAlmostEqualTo@Autodesk.DesignScript.Geometry.Geometry", + "Replication": "Auto", + "Description": "Check if the two objects have the same representational geometry or numerical values\n\nGeometry.IsAlmostEqualTo (other: Geometry): bool" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "04dc2dae3ea94fc1a805f92dc54d37a7", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "287be88c44094bc395e82ae8a2f9ac0f", + "Name": "geometry", + "Description": "Autodesk.DesignScript.Geometry.Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "1d28c5172fb440ceb5de4cd4dde50c31", + "Name": "fromCoordinateSystem", + "Description": "CoordinateSystem", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "d35cfc1b007548f98e5a88e99cb9765a", + "Name": "contextCoordinateSystem", + "Description": "CoordinateSystem", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "f917eb6260814b16a91b3c2cd3dbc01b", + "Name": "Geometry", + "Description": "Transformed Geometry.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Geometry.Transform@Autodesk.DesignScript.Geometry.CoordinateSystem,Autodesk.DesignScript.Geometry.CoordinateSystem", + "Replication": "Auto", + "Description": "Transforms this geometry from source CoordinateSystem to a new context CoordinateSystem.\n\nGeometry.Transform (fromCoordinateSystem: CoordinateSystem, contextCoordinateSystem: CoordinateSystem): Geometry" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "ad38aac0364f4c56b6e892b43a1ab218", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "0b8d8159e4cd44329645a797d6ce432f", + "Name": "x", + "Description": "double\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "8429cfa821a3444cb7d06386ab55b524", + "Name": "y", + "Description": "double\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "9fdd64028d554996bb164bf81f5d0762", + "Name": "z", + "Description": "double\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "b4aef6af1e03408e895bfc01111e9bfc", + "Name": "CoordinateSystem", + "Description": "CoordinateSystem", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.CoordinateSystem.ByOrigin@double,double,double", + "Replication": "Auto", + "Description": "Create a CoordinateSystem with origin at X, Y, and Z locations, with X and Y Axes set as WCS X and Y Axes.\n\nCoordinateSystem.ByOrigin (x: double = 0, y: double = 0, z: double = 0): CoordinateSystem" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "3af2a2ef34e6446eafda867b81bb1aa9", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "3e38cd5356094f6685bca9accb7cfba2", + "Name": "coordinateSystem", + "Description": "Autodesk.DesignScript.Geometry.CoordinateSystem", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "652d4d1e1f2a437788ad9b1f117342e3", + "Name": "origin", + "Description": "Origin point\n\nPoint", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "5a232216d3654ecfb29d07de951d0b85", + "Name": "axis", + "Description": "Vector axis for rotation\n\nVector", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "11e2006def494611ab16d15a732c1ede", + "Name": "degrees", + "Description": "Degrees to rotate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "29e667e398414bf19415c51ec9e517aa", + "Name": "CoordinateSystem", + "Description": "Rotated coordinate system", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.CoordinateSystem.Rotate@Autodesk.DesignScript.Geometry.Point,Autodesk.DesignScript.Geometry.Vector,double", + "Replication": "Auto", + "Description": "Rotates an object around an origin and an axis by a specified degree\n\nCoordinateSystem.Rotate (origin: Point, axis: Vector, degrees: double = 0): CoordinateSystem" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "7dbd3e891f9645698ce02e0252664107", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "ffbd2d9e17bd4db6a73142db5bdf8597", + "Name": "x", + "Description": "X coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "d7f58f50267d4948932abf70e4eb6849", + "Name": "y", + "Description": "Y coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "ed317b62aea743e1aa13be840de2ef7c", + "Name": "z", + "Description": "Z coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "a8deea0a4b2d46a0968b467b0ae416c0", + "Name": "Point", + "Description": "Point created by coordinates", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Point.ByCoordinates@double,double,double", + "Replication": "Auto", + "Description": "Form a Point given 3 cartesian coordinates\n\nPoint.ByCoordinates (x: double = 0, y: double = 0, z: double = 0): Point" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "2b2820666ed645e3aefc03e9588b94b8", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "8884ddc9db034e6aac51186978d79127", + "Name": "x", + "Description": "X coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "b20aa7be44be40ef9361b6c4f6ccb893", + "Name": "y", + "Description": "Y coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "789232619c774db788051e54dc327e1c", + "Name": "z", + "Description": "Z coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "1eb88233d963430f9ac30b7d85840e02", + "Name": "Vector", + "Description": "Vector created by coordinates", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Vector.ByCoordinates@double,double,double", + "Replication": "Auto", + "Description": "Form a Vector by 3 Euclidean coordinates\n\nVector.ByCoordinates (x: double = 0, y: double = 0, z: double = 0): Vector" + }, + { + "ConcreteType": "CoreNodeModels.Input.DoubleInput, CoreNodeModels", + "NumberType": "Double", + "Id": "51eeaaa4ee7d4510a6239a46444b81a9", + "NodeType": "NumberInputNode", + "Inputs": [], + "Outputs": [ + { + "Id": "93f3d18210e848ca86ee98e247bb2c38", + "Name": "", + "Description": "Double", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Creates a number", + "InputValue": 24.0 + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "b223b230eccd466b82868141c2a84fea", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "f1ccaadc25a4420e879d8dc847c2ae82", + "Name": "coordinateSystem", + "Description": "Autodesk.DesignScript.Geometry.CoordinateSystem", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "94905dc89e614a829284161d9b29fbc4", + "Name": "amount", + "Description": "Amount to scale\n\ndouble\nDefault value : 1", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "64267ffcdf664454a8b336b08d7a8476", + "Name": "CoordinateSystem", + "Description": "Scaled coordinate system", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.CoordinateSystem.Scale@double", + "Replication": "Auto", + "Description": "Scale uniformly around the origin\n\nCoordinateSystem.Scale (amount: double = 1): CoordinateSystem" + }, + { + "ConcreteType": "CoreNodeModels.Input.DoubleInput, CoreNodeModels", + "NumberType": "Double", + "Id": "ec1585e9be4245da9b76d1bcfb4ddb84", + "NodeType": "NumberInputNode", + "Inputs": [], + "Outputs": [ + { + "Id": "1eef3400530c4f5faa7e6f7a81a82f55", + "Name": "", + "Description": "Double", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Creates a number", + "InputValue": 2.3 + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "bcd9676fcf214b029ed0ad78429f1990", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "160ab42b629141b3ac48ab0a2adea878", + "Name": "x", + "Description": "double\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "c4e16aaa6cd14aba9d7856f20ad707af", + "Name": "y", + "Description": "double\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "e4bae33d1925435abba726247f2a9eea", + "Name": "CoordinateSystem", + "Description": "CoordinateSystem", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.CoordinateSystem.ByOrigin@double,double", + "Replication": "Auto", + "Description": "Create a CoordinateSystem with origin at X and Y locations, with X and Y Axes set as WCS X and Y Axes. Z defaults to 0.\n\nCoordinateSystem.ByOrigin (x: double = 0, y: double = 0): CoordinateSystem" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "f8dec41b87814d9e8267405f8a7ea7cb", + "NodeType": "CodeBlockNode", + "Inputs": [], + "Outputs": [ + { + "Id": "ad5a8f35c4ed4d6da682665bc25451a5", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "1d21aeb4e1bd4197a6aa2644c4ba198c", + "Name": "", + "Description": "Value of expression at line 2", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "c50a7e7995bb44dd962210ac4d27c1b6", + "Name": "", + "Description": "Value of expression at line 3", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "2;\n3;\n4;" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "e697692f572146d9a5771d563cb25420", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "02a1d93e3b654106bf21e75b4f36c291", + "Name": "json", + "Description": "A JSON string\n\nstring", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "5c3fa4e97a084c16a2d6efd53c363387", + "Name": "result", + "Description": "The result type depends on the content of the input string. The result type can be a primitive value (e.g. string, boolean, double), a List, or a Dictionary.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Data.ParseJSON@string", + "Replication": "Auto", + "Description": "Parse converts an arbitrary JSON string to a value. It is the opposite of JSON.Stringify.\n\nData.ParseJSON (json: string): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "cd1627d74fc841399e2d60e28bb79629", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "f1a1a1fcc56344b39004332d849e9d81", + "Name": "values", + "Description": "A List of values\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "1400145881f84f5da8aea9c5c1822274", + "Name": "json", + "Description": "A JSON string where primitive types (e.g. double, int, boolean), Lists, and Dictionary's will be turned into the associated JSON type.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Data.StringifyJSON@var[]..[]", + "Replication": "Auto", + "Description": "Stringify converts an arbitrary value or a list of arbitrary values to JSON. Replication can be used to apply the operation over a list, producing a list of JSON strings.\n\nData.StringifyJSON (values: var[]..[]): string" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "8fb3365cc12d434c9fc311937868950d", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "b1ba44b9c8304244991dac3694465e88", + "Name": "geometry", + "Description": "Autodesk.DesignScript.Geometry.Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "72c96e98826042c0b988b18e21fe059a", + "Name": "other", + "Description": "Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "111a63e314b9458294fc56a7fb3161ad", + "Name": "bool", + "Description": "bool", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Geometry.IsAlmostEqualTo@Autodesk.DesignScript.Geometry.Geometry", + "Replication": "Auto", + "Description": "Check if the two objects have the same representational geometry or numerical values\n\nGeometry.IsAlmostEqualTo (other: Geometry): bool" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "e96da78991524facbeb924e2d4dab11d", + "NodeType": "FunctionNode", + "Inputs": [], + "Outputs": [ + { + "Id": "7352ba9a9532455f8d23312576cfc60e", + "Name": "Plane", + "Description": "Plane at XZ plane of world", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Plane.XZ", + "Replication": "Auto", + "Description": "Creates a plane in the world XZ plane\n\nPlane.XZ ( ): Plane" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "ccfddd7e588c415bb2f614fff795b8f6", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "06cdbace53b64888a64e3481a026357c", + "Name": "geometry", + "Description": "Autodesk.DesignScript.Geometry.Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "9169ea1032a644b886952c3e63abff9b", + "Name": "mirrorPlane", + "Description": "Plane", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "ab86f6ff13554983913f03a3c6fc6b47", + "Name": "Geometry", + "Description": "Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Geometry.Mirror@Autodesk.DesignScript.Geometry.Plane", + "Replication": "Auto", + "Description": "Mirror the object across the input Plane\n\nGeometry.Mirror (mirrorPlane: Plane): Geometry" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "e131d252188a4439894450f5dadb5f4d", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "371fe157b4e545fcba5417a65bba57f2", + "Name": "values", + "Description": "A List of values\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "5a425a0aa52d4d47bc4ccc8d28fb20e0", + "Name": "json", + "Description": "A JSON string where primitive types (e.g. double, int, boolean), Lists, and Dictionary's will be turned into the associated JSON type.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Data.StringifyJSON@var[]..[]", + "Replication": "Auto", + "Description": "Stringify converts an arbitrary value or a list of arbitrary values to JSON. Replication can be used to apply the operation over a list, producing a list of JSON strings.\n\nData.StringifyJSON (values: var[]..[]): string" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "1241bc6b0320417a89f9eea0298aa78f", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "71e0947bdb8e454c8289f04900b6646f", + "Name": "json", + "Description": "A JSON string\n\nstring", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "1fc852b4cb0b4dd899dbb01268d06c33", + "Name": "result", + "Description": "The result type depends on the content of the input string. The result type can be a primitive value (e.g. string, boolean, double), a List, or a Dictionary.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Data.ParseJSON@string", + "Replication": "Auto", + "Description": "Parse converts an arbitrary JSON string to a value. It is the opposite of JSON.Stringify.\n\nData.ParseJSON (json: string): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "0a8e54e07d2b41178a83edf1fdedf709", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "bd43fa7da3a347dcb7fb6076fda2f74b", + "Name": "curve", + "Description": "Autodesk.DesignScript.Geometry.Curve", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "d3cd78fcd76b407f87e0710a94ad4c0e", + "Name": "Curve", + "Description": "A new Curve with the opposite direction", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Curve.Reverse", + "Replication": "Auto", + "Description": "Reverse the direction of the curve\n\nCurve.Reverse ( ): Curve" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "b9b4b61324f44ec6b1bdc5deca7d2e89", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "fc63ee44ce504f9ebdd1ffe90ac13613", + "Name": "geometry", + "Description": "Autodesk.DesignScript.Geometry.Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "f92dee7abb2a4a8cbb08a521c9c9dd9f", + "Name": "other", + "Description": "Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "6404b68d79eb44409055bfccf83c1318", + "Name": "bool", + "Description": "bool", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Geometry.IsAlmostEqualTo@Autodesk.DesignScript.Geometry.Geometry", + "Replication": "Auto", + "Description": "Check if the two objects have the same representational geometry or numerical values\n\nGeometry.IsAlmostEqualTo (other: Geometry): bool" + }, + { + "ConcreteType": "CoreNodeModels.CreateList, CoreNodeModels", + "VariableInputPorts": true, + "Id": "853e1dab4a9c4ede99862dc121f8bd6f", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "5f60116b981b43739c2bdebfdd451b5a", + "Name": "item0", + "Description": "Item Index #0", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "b751551889b54b9aaf8e2df494e17a8d", + "Name": "item1", + "Description": "Item Index #1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "98b3818aa983499bb544ccf628980b32", + "Name": "item2", + "Description": "Item Index #2", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "586e0af6f34144cb917af4292edecce9", + "Name": "item3", + "Description": "Item Index #3", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "436aebf6f8a64552bcc6a48c4ba0d938", + "Name": "item4", + "Description": "Item Index #4", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "0c31352c6a2c4371ac593233f4701e3e", + "Name": "list", + "Description": "A list (type: var[]..[])", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Makes a new list from the given inputs" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "f249320fc8aa4d01ac251cb5e415d4cd", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "fdaa50b98aad4aaab45ae209f4722b36", + "Name": "x", + "Description": "Basic type object to compare (e.g. bool, int, double, string, etc.)\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "c680e3dd6e5448d7851c979fbf81afbf", + "Name": "y", + "Description": "Basic type object to compare (e.g. bool, int, double, string, etc.)\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "42c9839ce52c48b9b3a7083205278174", + "Name": "bool", + "Description": "Result of equality check", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "==@var[]..[],var[]..[]", + "Replication": "Auto", + "Description": "Compares if x and y are equal\n\n== (x: var[]..[], y: var[]..[]): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "12a02ae9398b463da4d2d0be0dbd7fd6", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "deffdf246c194020b096918a85714200", + "Name": "object", + "Description": "Object to query type\n\nvar", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "33ebcf2d61d6442fa37e4faf70e6fdab", + "Name": "string", + "Description": "Type of object.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Object.Type@var", + "Replication": "Auto", + "Description": "Returns the type of object represented as string.\n\nObject.Type (object: var): string" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "613b6800849146ac8e588cdffa0a6273", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "fa03ec43e5d041b99e5ce319f693f162", + "Name": "object", + "Description": "Object to query type\n\nvar", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "0eb5f7fee5e84a8986a2d6ce33f33365", + "Name": "string", + "Description": "Type of object.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Object.Type@var", + "Replication": "Auto", + "Description": "Returns the type of object represented as string.\n\nObject.Type (object: var): string" + } + ], + "Connectors": [ + { + "Start": "e01aa4a665764bf9981a48e4b12d042a", + "End": "2d9a75f696754c4e8cabf363ced3a2ae", + "Id": "368005113a3541bcb1299258ff13aaf4", + "IsHidden": "False" + }, + { + "Start": "e01aa4a665764bf9981a48e4b12d042a", + "End": "deffdf246c194020b096918a85714200", + "Id": "69cd641b633f4fcc8ff8ac0bf66f441d", + "IsHidden": "False" + }, + { + "Start": "98f08663bdfc44e29970670879c98f81", + "End": "bad565a11dc74d0b93316a47fffec75f", + "Id": "7772aed300174d1b814266749d9cc731", + "IsHidden": "False" + }, + { + "Start": "cc61945c36cc4069b7fee6b71ebde162", + "End": "664c62bccdb04df4b0a144a6447f5f9c", + "Id": "c15b3035b71e4502baf37e90610412ce", + "IsHidden": "False" + }, + { + "Start": "7a905987d9854e618f53cb5fe7af4a3e", + "End": "a61f578b8713432ca2705cf923acc619", + "Id": "c1e479bfc1274a5eae5355b84ccb411f", + "IsHidden": "False" + }, + { + "Start": "fcd1fdc26c564952bcc3c3689d23ccc8", + "End": "f04be8fa4c554ee78a5ec612a498c387", + "Id": "ad9591d2e8794c42ba4c7f366d29016d", + "IsHidden": "False" + }, + { + "Start": "a1f2fea9cf2a4bf8ba467dedc467a664", + "End": "144e45989e7946b481196327eecf53c0", + "Id": "8f473936bd6d43018a453f4f88077324", + "IsHidden": "False" + }, + { + "Start": "08329a479eee4776bd5fafbedfff1cda", + "End": "8250e12491594f59a81d93f6749880ea", + "Id": "87f34ab5c6d74854badc6f5191b3e5bd", + "IsHidden": "False" + }, + { + "Start": "333a3a8e603c4db6920817fb727003e8", + "End": "d26bca4f5baa4d8a8342e95d19bc93e9", + "Id": "ea7cdfa8ffe644aa8778bbc9007cab5d", + "IsHidden": "False" + }, + { + "Start": "0e4d4c325c5a469ead8c887e5218d15a", + "End": "6e5b209d39d344b1a2c42e7cced72752", + "Id": "4e4acc7926314be5b041b43923a4ec62", + "IsHidden": "False" + }, + { + "Start": "2b07ea2652244c31af439b825bcb5e4e", + "End": "6f63691e903f47dea2cd4f6ad7b569e8", + "Id": "dbf99bb3d53d4af7833d972886848c40", + "IsHidden": "False" + }, + { + "Start": "cc05c0ec26f14b48ad704b6190695a71", + "End": "b584618068164d398fe7dbffe593b0ef", + "Id": "0de5840fbbcf4f49aecab1169c97e9cc", + "IsHidden": "False" + }, + { + "Start": "cc05c0ec26f14b48ad704b6190695a71", + "End": "e5d6510a49094a7d87bda36a1cd47e42", + "Id": "b017f771ebbe44198e3c2199414a1571", + "IsHidden": "False" + }, + { + "Start": "cc05c0ec26f14b48ad704b6190695a71", + "End": "bd43fa7da3a347dcb7fb6076fda2f74b", + "Id": "bcfb69583e0341c8ace5cbe3998941fb", + "IsHidden": "False" + }, + { + "Start": "cc05c0ec26f14b48ad704b6190695a71", + "End": "06cdbace53b64888a64e3481a026357c", + "Id": "5141b63e59774f38a4ba3c58098ba56d", + "IsHidden": "False" + }, + { + "Start": "cc05c0ec26f14b48ad704b6190695a71", + "End": "287be88c44094bc395e82ae8a2f9ac0f", + "Id": "992ef796cc1e4c2399222d14d2a2ae47", + "IsHidden": "False" + }, + { + "Start": "cc05c0ec26f14b48ad704b6190695a71", + "End": "fa03ec43e5d041b99e5ce319f693f162", + "Id": "48543c7ebb5a4b0abedc61c087a5b442", + "IsHidden": "False" + }, + { + "Start": "d7cfca1e73a24541a23664821064135d", + "End": "5f60116b981b43739c2bdebfdd451b5a", + "Id": "c4f0ee2b61fc45b39454913bee91cf7c", + "IsHidden": "False" + }, + { + "Start": "5738257b415a4c81a2a9084865d1ad64", + "End": "009d02b0692c4e56a8fb14e4eb28f9dd", + "Id": "7a2aa8385dda49878c196d2f057ee2eb", + "IsHidden": "False" + }, + { + "Start": "8dc2c0fc7cd448c99acd01c76a5f6c87", + "End": "870844dcf21f447ebb921d50d60e564c", + "Id": "a808a7d7d41a4ecda014573658e60cba", + "IsHidden": "False" + }, + { + "Start": "bcfbdf027dc64521a5a47619af9a283c", + "End": "586e0af6f34144cb917af4292edecce9", + "Id": "0d074b6753d849afb3817f8919615373", + "IsHidden": "False" + }, + { + "Start": "f917eb6260814b16a91b3c2cd3dbc01b", + "End": "43f17c1051164aaf95fa489848fc10f6", + "Id": "27ddf70945784ce194ccb3f88e8e2e0c", + "IsHidden": "False" + }, + { + "Start": "f917eb6260814b16a91b3c2cd3dbc01b", + "End": "1e423d58dfd146bb90fb943d06016674", + "Id": "7a7a2898357d44d0bc3f5c70cc9f967a", + "IsHidden": "False" + }, + { + "Start": "b4aef6af1e03408e895bfc01111e9bfc", + "End": "3e38cd5356094f6685bca9accb7cfba2", + "Id": "c2be6cec671d4c4e9f92ed0eb3b1bf22", + "IsHidden": "False" + }, + { + "Start": "29e667e398414bf19415c51ec9e517aa", + "End": "f1ccaadc25a4420e879d8dc847c2ae82", + "Id": "557775d10651417699f944faad9cc320", + "IsHidden": "False" + }, + { + "Start": "a8deea0a4b2d46a0968b467b0ae416c0", + "End": "652d4d1e1f2a437788ad9b1f117342e3", + "Id": "94dd35105ae34f7ba63180cf1b4f8d09", + "IsHidden": "False" + }, + { + "Start": "1eb88233d963430f9ac30b7d85840e02", + "End": "5a232216d3654ecfb29d07de951d0b85", + "Id": "3c0c33ea5f85437dbe01b815449ecadd", + "IsHidden": "False" + }, + { + "Start": "93f3d18210e848ca86ee98e247bb2c38", + "End": "11e2006def494611ab16d15a732c1ede", + "Id": "958a131700454ebda6907cffc874f63f", + "IsHidden": "False" + }, + { + "Start": "64267ffcdf664454a8b336b08d7a8476", + "End": "d35cfc1b007548f98e5a88e99cb9765a", + "Id": "d1b310fc9d824589888a6f15db785556", + "IsHidden": "False" + }, + { + "Start": "1eef3400530c4f5faa7e6f7a81a82f55", + "End": "94905dc89e614a829284161d9b29fbc4", + "Id": "7413223135ea4ca397238e7ba155d9eb", + "IsHidden": "False" + }, + { + "Start": "e4bae33d1925435abba726247f2a9eea", + "End": "1d28c5172fb440ceb5de4cd4dde50c31", + "Id": "10e57ac5da0c4e6baf0956572bf0de2a", + "IsHidden": "False" + }, + { + "Start": "ad5a8f35c4ed4d6da682665bc25451a5", + "End": "0b8d8159e4cd44329645a797d6ce432f", + "Id": "6620b6f1f5bc42678bfb6725e5fc4579", + "IsHidden": "False" + }, + { + "Start": "ad5a8f35c4ed4d6da682665bc25451a5", + "End": "8884ddc9db034e6aac51186978d79127", + "Id": "d138012618c64c12b12f1abf0f65315a", + "IsHidden": "False" + }, + { + "Start": "1d21aeb4e1bd4197a6aa2644c4ba198c", + "End": "8429cfa821a3444cb7d06386ab55b524", + "Id": "0626324d85904541830e04a84c687ec0", + "IsHidden": "False" + }, + { + "Start": "c50a7e7995bb44dd962210ac4d27c1b6", + "End": "9fdd64028d554996bb164bf81f5d0762", + "Id": "b2dd26e550cf4fb681d714b511727e0a", + "IsHidden": "False" + }, + { + "Start": "c50a7e7995bb44dd962210ac4d27c1b6", + "End": "b20aa7be44be40ef9361b6c4f6ccb893", + "Id": "fdeaeaa148044e4bbc47e2f03bb7376d", + "IsHidden": "False" + }, + { + "Start": "5c3fa4e97a084c16a2d6efd53c363387", + "End": "72c96e98826042c0b988b18e21fe059a", + "Id": "502a5347ffb84c1da51cf0a572601350", + "IsHidden": "False" + }, + { + "Start": "1400145881f84f5da8aea9c5c1822274", + "End": "02a1d93e3b654106bf21e75b4f36c291", + "Id": "00d6c49c64984cbab8531e816c8700fc", + "IsHidden": "False" + }, + { + "Start": "111a63e314b9458294fc56a7fb3161ad", + "End": "98b3818aa983499bb544ccf628980b32", + "Id": "7a302b3d163442a18eaa222d6bcfc230", + "IsHidden": "False" + }, + { + "Start": "7352ba9a9532455f8d23312576cfc60e", + "End": "9169ea1032a644b886952c3e63abff9b", + "Id": "5a2ada54630c479995a472893403ea75", + "IsHidden": "False" + }, + { + "Start": "ab86f6ff13554983913f03a3c6fc6b47", + "End": "f1a1a1fcc56344b39004332d849e9d81", + "Id": "794fc5be31bd4c3aaf4548dbb3d1f5b5", + "IsHidden": "False" + }, + { + "Start": "ab86f6ff13554983913f03a3c6fc6b47", + "End": "b1ba44b9c8304244991dac3694465e88", + "Id": "cfc869b976a741d79a7f6e3d376f268a", + "IsHidden": "False" + }, + { + "Start": "5a425a0aa52d4d47bc4ccc8d28fb20e0", + "End": "71e0947bdb8e454c8289f04900b6646f", + "Id": "0a96658f479e4c808b3249a2bff6c8c6", + "IsHidden": "False" + }, + { + "Start": "1fc852b4cb0b4dd899dbb01268d06c33", + "End": "f92dee7abb2a4a8cbb08a521c9c9dd9f", + "Id": "75f461f05bff4532b1ed2accf9797e93", + "IsHidden": "False" + }, + { + "Start": "d3cd78fcd76b407f87e0710a94ad4c0e", + "End": "371fe157b4e545fcba5417a65bba57f2", + "Id": "c1d964f6a15d47889d22a65ba8022bd2", + "IsHidden": "False" + }, + { + "Start": "d3cd78fcd76b407f87e0710a94ad4c0e", + "End": "fc63ee44ce504f9ebdd1ffe90ac13613", + "Id": "fa8f94cde138405aa373c0fc787e8242", + "IsHidden": "False" + }, + { + "Start": "6404b68d79eb44409055bfccf83c1318", + "End": "b751551889b54b9aaf8e2df494e17a8d", + "Id": "8220a0f557f04254809c87ceaf654d58", + "IsHidden": "False" + }, + { + "Start": "0c31352c6a2c4371ac593233f4701e3e", + "End": "64cad8271a2c4236a432b3f8cb9a965e", + "Id": "4718a19f93674fb2bcea4a649607aa0a", + "IsHidden": "False" + }, + { + "Start": "42c9839ce52c48b9b3a7083205278174", + "End": "436aebf6f8a64552bcc6a48c4ba0d938", + "Id": "f108a11f949b489d947a4fc88645b4a3", + "IsHidden": "False" + }, + { + "Start": "33ebcf2d61d6442fa37e4faf70e6fdab", + "End": "c680e3dd6e5448d7851c979fbf81afbf", + "Id": "3722c63c0ae84e43bc0b14bb1c9efb9a", + "IsHidden": "False" + }, + { + "Start": "0eb5f7fee5e84a8986a2d6ce33f33365", + "End": "fdaa50b98aad4aaab45ae209f4722b36", + "Id": "3af2a484e60d4be8abdd830f109f7148", + "IsHidden": "False" + } + ], + "Dependencies": [], + "NodeLibraryDependencies": [], + "Thumbnail": "", + "GraphDocumentationURL": null, + "ExtensionWorkspaceData": [ + { + "ExtensionGuid": "28992e1d-abb9-417f-8b1b-05e053bee670", + "Name": "Properties", + "Version": "3.0", + "Data": {} + } + ], + "Author": "", + "Linting": { + "activeLinter": "None", + "activeLinterId": "7b75fb44-43fd-4631-a878-29f4d5d8399a", + "warningCount": 0, + "errorCount": 0 + }, + "Bindings": [], + "View": { + "Dynamo": { + "ScaleFactor": 1.0, + "HasRunWithoutCrash": true, + "IsVisibleInDynamoLibrary": true, + "Version": "3.0.0.5795", + "RunType": "Automatic", + "RunPeriod": "1000" + }, + "Camera": { + "Name": "_Background Preview", + "EyeX": -17.0, + "EyeY": 24.0, + "EyeZ": 50.0, + "LookX": 12.0, + "LookY": -13.0, + "LookZ": -58.0, + "UpX": 0.0, + "UpY": 1.0, + "UpZ": 0.0 + }, + "ConnectorPins": [], + "NodeViews": [ + { + "Id": "186620d42cf04f3b8c8706a3723d35a5", + "Name": "Data.ParseJSON", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1730.370240494011, + "Y": 422.9209805033919 + }, + { + "Id": "f8f38e2638fb4f5690220969e9889012", + "Name": "Data.StringifyJSON", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1420.3841266619577, + "Y": 421.855396947799 + }, + { + "Id": "71efc8c5c0c74189901707c30e6d5903", + "Name": "List.AllTrue", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 3338.252697425631, + "Y": 311.46879125093767 + }, + { + "Id": "6478eb71263841ae88cc4db9254c8a03", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 446.9831147891284, + "Y": 381.3389574900232 + }, + { + "Id": "e3913dd28c3d494296d47317256289db", + "Name": "Point.ByCoordinates", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 738.3824272065791, + "Y": 338.153157697957 + }, + { + "Id": "94bf9f7b3f69443ba2c3666b2f801437", + "Name": "Point.ByCoordinates", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 731.6207611276202, + "Y": 545.9973425620987 + }, + { + "Id": "2c3ac25b7c7147399f6e5802e8c1ada5", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 464.0017224244955, + "Y": 568.3513115045287 + }, + { + "Id": "6d2f1fa5b94f4906bdf4d43b45c6205f", + "Name": "Line.ByStartPointEndPoint", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1080.4812914283273, + "Y": 307.7821642775282 + }, + { + "Id": "35a16b3170884d98a5224874a835c47a", + "Name": "Geometry.IsAlmostEqualTo", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2019.568796171509, + "Y": 308.4079564917437 + }, + { + "Id": "81a8ad0cdddd4835af74bee1689398b0", + "Name": "Data.ParseJSON", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1819.646872554306, + "Y": 3593.1808943609985 + }, + { + "Id": "8ad068dda8b44606b8be718057ce8c63", + "Name": "Data.StringifyJSON", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1527.9230055515766, + "Y": 3593.041878997172 + }, + { + "Id": "f1b216eeadbe46fbaafe0350aac9b961", + "Name": "Geometry.IsAlmostEqualTo", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2094.6172769150203, + "Y": 3452.167645556916 + }, + { + "Id": "04dc2dae3ea94fc1a805f92dc54d37a7", + "Name": "Geometry.Transform", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1119.878877658847, + "Y": 3335.543621189834 + }, + { + "Id": "ad38aac0364f4c56b6e892b43a1ab218", + "Name": "CoordinateSystem.ByOrigin", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -209.48765716495905, + "Y": 3391.120173190161 + }, + { + "Id": "3af2a2ef34e6446eafda867b81bb1aa9", + "Name": "CoordinateSystem.Rotate", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 169.01234283504095, + "Y": 3658.120173190161 + }, + { + "Id": "7dbd3e891f9645698ce02e0252664107", + "Name": "Point.ByCoordinates", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -209.48765716495905, + "Y": 3603.120173190161 + }, + { + "Id": "2b2820666ed645e3aefc03e9588b94b8", + "Name": "Vector.ByCoordinates", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -209.48765716495905, + "Y": 3815.120173190161 + }, + { + "Id": "51eeaaa4ee7d4510a6239a46444b81a9", + "Name": "Number", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -209.48765716495905, + "Y": 4027.12017319016 + }, + { + "Id": "b223b230eccd466b82868141c2a84fea", + "Name": "CoordinateSystem.Scale", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 696.2994897712472, + "Y": 3563.120173190161 + }, + { + "Id": "ec1585e9be4245da9b76d1bcfb4ddb84", + "Name": "Number", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 216.38064783752293, + "Y": 3502.120173190161 + }, + { + "Id": "bcd9676fcf214b029ed0ad78429f1990", + "Name": "CoordinateSystem.ByOrigin", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 752.403804446177, + "Y": 3370.9619236941253 + }, + { + "Id": "f8dec41b87814d9e8267405f8a7ea7cb", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -463.48765716495905, + "Y": 3426.257673190161 + }, + { + "Id": "e697692f572146d9a5771d563cb25420", + "Name": "Data.ParseJSON", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1786.8256599249394, + "Y": 2345.287013092033 + }, + { + "Id": "cd1627d74fc841399e2d60e28bb79629", + "Name": "Data.StringifyJSON", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1495.10179292221, + "Y": 2345.147997728206 + }, + { + "Id": "8fb3365cc12d434c9fc311937868950d", + "Name": "Geometry.IsAlmostEqualTo", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2061.7960642856538, + "Y": 2204.27376428795 + }, + { + "Id": "e96da78991524facbeb924e2d4dab11d", + "Name": "Plane.XZ", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 812.9487812743448, + "Y": 2119.904641376578 + }, + { + "Id": "ccfddd7e588c415bb2f614fff795b8f6", + "Name": "Geometry.Mirror", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1053.496729192502, + "Y": 2035.154909659292 + }, + { + "Id": "e131d252188a4439894450f5dadb5f4d", + "Name": "Data.StringifyJSON", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1467.9533525447607, + "Y": 1257.2436870221904 + }, + { + "Id": "1241bc6b0320417a89f9eea0298aa78f", + "Name": "Data.ParseJSON", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1792.9323613090269, + "Y": 1257.7234285196887 + }, + { + "Id": "0a8e54e07d2b41178a83edf1fdedf709", + "Name": "Curve.Reverse", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1013.2125860778472, + "Y": 1037.667221700292 + }, + { + "Id": "b9b4b61324f44ec6b1bdc5deca7d2e89", + "Name": "Geometry.IsAlmostEqualTo", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2175.5383056606493, + "Y": 906.5885447652508 + }, + { + "Id": "853e1dab4a9c4ede99862dc121f8bd6f", + "Name": "List Create", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 3060.975194099152, + "Y": 313.45095497591126 + }, + { + "Id": "f249320fc8aa4d01ac251cb5e415d4cd", + "Name": "==", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2310.1285622039595, + "Y": 583.6225307630241 + }, + { + "Id": "12a02ae9398b463da4d2d0be0dbd7fd6", + "Name": "Object.Type", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2002.0769239224455, + "Y": 665.5148956868268 + }, + { + "Id": "613b6800849146ac8e588cdffa0a6273", + "Name": "Object.Type", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2005.6562456002794, + "Y": 520.2641436787746 + } + ], + "Annotations": [ + { + "Id": "299ea6c97b7040eeba5940b4ec204708", + "Title": "All True", + "DescriptionText": "", + "IsExpanded": true, + "WidthAdjustment": 0.0, + "HeightAdjustment": 0.0, + "Nodes": [ + "71efc8c5c0c74189901707c30e6d5903" + ], + "HasNestedGroups": false, + "Left": 3328.252697425631, + "Top": 238.46879125093767, + "Width": 196.0, + "Height": 205.0, + "FontSize": 36.0, + "GroupStyleId": "00000000-0000-0000-0000-000000000000", + "InitialTop": 311.46879125093767, + "InitialHeight": 145.0, + "TextblockHeight": 63.0, + "Background": "#FFC1D676" + } + ], + "X": 127.84688508722331, + "Y": 346.7210719675783, + "Zoom": 0.10693274557890708 + } +} \ No newline at end of file diff --git a/test/core/json/Curve_NurbsCurve_JSONParsing.dyn b/test/core/json/Curve_NurbsCurve_JSONParsing.dyn new file mode 100644 index 00000000000..e532390bf88 --- /dev/null +++ b/test/core/json/Curve_NurbsCurve_JSONParsing.dyn @@ -0,0 +1,3807 @@ +{ + "Uuid": "4b802105-0bd8-4d97-b885-450c0e387121", + "IsCustomNode": false, + "Description": null, + "Name": "Curve_NurbsCurve_JSONParsing", + "ElementResolver": { + "ResolutionMap": { + "DSCore.Object": { + "Key": "DSCore.Object", + "Value": "DSCoreNodes.dll" + }, + "DSCore.Data": { + "Key": "DSCore.Data", + "Value": "DSCoreNodes.dll" + }, + "DesignScript.Builtin.Dictionary": { + "Key": "DesignScript.Builtin.Dictionary", + "Value": "DesignScriptBuiltin.dll" + }, + "Color": { + "Key": "DSCore.Color", + "Value": "DSCoreNodes.dll" + }, + "DSCore.DateTime.Now": { + "Key": "DSCore.DateTime", + "Value": "DSCoreNodes.dll" + }, + "DSCore.DateTime": { + "Key": "DSCore.DateTime", + "Value": "DSCoreNodes.dll" + }, + "Point": { + "Key": "Autodesk.DesignScript.Geometry.Point", + "Value": "ProtoGeometry.dll" + } + } + }, + "Inputs": [ + { + "Id": "aade866649eb472cbd257dbb7c0faaad", + "Name": "Boolean", + "Type": "boolean", + "Type2": "boolean", + "Value": "true", + "Description": "Enables selection between True and False", + "SelectedIndex": 0 + } + ], + "Outputs": [], + "Nodes": [ + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "23e5b514a36249048745c167e4c33d47", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "62d0ddb075fd4fcc89fdd630354de5e3", + "Name": "points", + "Description": "Points for nurbs curve\n\nPoint[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "8f5273b9b44542d9aa2d8c86deed529e", + "Name": "NurbsCurve", + "Description": "Nurbscurve created from points", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.NurbsCurve.ByControlPoints@Autodesk.DesignScript.Geometry.Point[]", + "Replication": "Auto", + "Description": "Create a BSplineCurve by using explicit control points. NOTE 1: BSplineCurves with deg=1 have G1 discontinuities, which cause problems for extrusion, sweep, and other operations. They should be avoided. Use a PolyCurve instead. NOTE 2: If the curve is periodic (closed), then the first and last points MUST be the same.\n\nNurbsCurve.ByControlPoints (points: Point[]): NurbsCurve" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "07c42e8f746d40a58977b693183b62ba", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "f8d9b8e65dde4b6f98a9445844ab2ce4", + "Name": "points", + "Description": "Points for nurbs curve\n\nPoint[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "d361ec676f914ab18d2b2b83bc9fdbb3", + "Name": "NurbsCurve", + "Description": "Nurbscurve created from points", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.NurbsCurve.ByControlPoints@Autodesk.DesignScript.Geometry.Point[]", + "Replication": "Auto", + "Description": "Create a BSplineCurve by using explicit control points. NOTE 1: BSplineCurves with deg=1 have G1 discontinuities, which cause problems for extrusion, sweep, and other operations. They should be avoided. Use a PolyCurve instead. NOTE 2: If the curve is periodic (closed), then the first and last points MUST be the same.\n\nNurbsCurve.ByControlPoints (points: Point[]): NurbsCurve" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "fcead143b1b84ec9807726fb04256ccb", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "d59cc30375df455ea1bdd20d7e635a89", + "Name": "list", + "Description": "List of items to be sorted\n\nvar[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "51148ada42f94ccfaf403d0a04a040eb", + "Name": "int[]", + "Description": "The indices of the items in the sorted list", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.List.Sort@var[]", + "Replication": "Auto", + "Description": "Sorts a list by the items and return their indices.\n\nList.Sort (list: var[]): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "c35772f3680244fd93263ae615d35f73", + "NodeType": "CodeBlockNode", + "Inputs": [], + "Outputs": [ + { + "Id": "07d649accf914413bfe6e773eba2b541", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "865ff40842624b488658ecfbc6159ad3", + "Name": "", + "Description": "Value of expression at line 2", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "f956a685a11640a99fdffe766905a9e2", + "Name": "", + "Description": "Value of expression at line 3", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "a96e519d94fe4964a56557ddb627cbf1", + "Name": "", + "Description": "Value of expression at line 4", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "326632c753f34131a4c79f9d9985f52f", + "Name": "", + "Description": "Value of expression at line 5", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "9;\n0;\n1;\n3;\n5;" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "0bfd6bad96f4465fa5aec008434d8a41", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "320a49fc36b04d039e65c167a6ccfb96", + "Name": "list", + "Description": "List of items to be sorted\n\nvar[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "860bf267267848eabe69b46d7196729f", + "Name": "int[]", + "Description": "The indices of the items in the sorted list", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.List.Sort@var[]", + "Replication": "Auto", + "Description": "Sorts a list by the items and return their indices.\n\nList.Sort (list: var[]): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "599cf7949a95417d868599ab0dfccb39", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "0843edcec1714067b2af56821d308d3e", + "Name": "x", + "Description": "X coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "ca10816cb1014b89b1f9cd5195240c18", + "Name": "y", + "Description": "Y coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "b2f5499ea0e54d58adc5257da6908dcc", + "Name": "Point", + "Description": "Point created by coordinates", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Point.ByCoordinates@double,double", + "Replication": "Auto", + "Description": "Form a Point in the XY plane given two 2 cartesian coordinates. The Z component is 0.\n\nPoint.ByCoordinates (x: double = 0, y: double = 0): Point" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "83aee02d0dc142d38dabcc072c57c84e", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "8f636d90b60b45199c4c118ad709bc45", + "Name": "points", + "Description": "Points for nurbs curve\n\nPoint[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "1abf0134a9674e2698dc5e5d1e84c032", + "Name": "NurbsCurve", + "Description": "Nurbscurve created from points", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.NurbsCurve.ByPoints@Autodesk.DesignScript.Geometry.Point[]", + "Replication": "Auto", + "Description": "Create a BSplineCurve by interpolating between points.\n\nNurbsCurve.ByPoints (points: Point[]): NurbsCurve" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "d3461632a6f24893a3725f8a3e73c1ee", + "NodeType": "CodeBlockNode", + "Inputs": [ + { + "Id": "ebdd384c74a4471490b4d6b06848aeaf", + "Name": "x", + "Description": "x", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "79fd0911eba54bcd96ec27ec525a68fd", + "Name": "", + "Description": "temp_proc_var_", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Auto", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "temp_proc_var_ = x * 20;" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "6b18011e0520414085060eaedcf86d76", + "NodeType": "CodeBlockNode", + "Inputs": [ + { + "Id": "1a889ad045e64868a89bfb6dde988c85", + "Name": "y", + "Description": "y", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "f346fd19071e44509eb7ffe916f12522", + "Name": "", + "Description": "temp_proc_var_", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Auto", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "temp_proc_var_ = y * 20;" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "105dd5eeef1944bf952668c8600cdf49", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "e44d69b2c0854e54a251b4bd7f14fa95", + "Name": "points", + "Description": "Point[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "56a5ac4c2fe64c41bcbb61249f688774", + "Name": "weights", + "Description": "double[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "69bde306a3d64447b03c9860e38a6902", + "Name": "knots", + "Description": "double[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "d40f9ae4f6e94c37a9e934e83f4fd75a", + "Name": "degree", + "Description": "int\nDefault value : 3", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "8cee3acb532f47748fc36e084e4bf33b", + "Name": "NurbsCurve", + "Description": "NurbsCurve", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.NurbsCurve.ByControlPointsWeightsKnots@Autodesk.DesignScript.Geometry.Point[],double[],double[],int", + "Replication": "Auto", + "Description": "Create a BSplineCurve by from control vertices, weights, and knots. FROM ASM DOCS: Degree: Should be greater than 1 (piecewise-linear spline) and less than 26 (the maximum B-spline basis degree supported by ASM). Weights: All weight values (if supplied) should be strictly positive. Weights smaller than 1e-11 will be rejected and the function will fail. Knots: The knot vector should be a non-decreasing sequence. Interior knot multiplicity should be no larger than degree + 1 at the start/end knot and degree at an internal knot (this allows curves with G1 discontinuities to be represented). Note that non-clamped knot vectors are supported, but will be converted to clamped ones, with the corresponding changes applied to the control point/weight data. knot array: the array size must be num_control_points + degree + 1\n\nNurbsCurve.ByControlPointsWeightsKnots (points: Point[], weights: double[], knots: double[], degree: int = 3): NurbsCurve" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "32cfeb35cba546c79062867b23b505d9", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "e07169e0a7574889a18db67a1a2c3f37", + "Name": "nurbsCurve", + "Description": "Autodesk.DesignScript.Geometry.NurbsCurve", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "e08d34c0a2174a89b966226c1c95382b", + "Name": "double[]", + "Description": "Weights of nurbs curve", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.NurbsCurve.Weights", + "Replication": "Auto", + "Description": "Returns NurbsCurve control point weights. Weights determine the influence of each of the control points on the shape of the curve.\n\nNurbsCurve.Weights ( ): double[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "de2d3bb7b03f4f2782b602f895a01247", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "3d30545f5ae9458fb027b21287434a4a", + "Name": "nurbsCurve", + "Description": "Autodesk.DesignScript.Geometry.NurbsCurve", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "43120a6ca59c4b8f8f4121a34594116c", + "Name": "double[]", + "Description": "The knots of the nurbs curve", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.NurbsCurve.Knots", + "Replication": "Auto", + "Description": "The knots of the Curve. Knots is a series of parameter values (doubles) used to determine where and how the control points affect the curve.\n\nNurbsCurve.Knots ( ): double[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "62d1334cb7da46d2975091d620200f7e", + "NodeType": "CodeBlockNode", + "Inputs": [], + "Outputs": [ + { + "Id": "45644684b55542a7b9907f888c9a26e0", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "3;" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "bbe8fec901b64d149cb9156d0556e616", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "089f55816b4e478185c43290296721e8", + "Name": "list", + "Description": "List to replace an item in.\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "68e170e819f3471c80a111b3fbbeeed5", + "Name": "index", + "Description": "Index of the item to be replaced.\n\nint", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "7f577a4e565144b08e55b0cd19877387", + "Name": "item", + "Description": "The item to insert.\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "7700da00a0c84ff4ac929d6b6c0651d8", + "Name": "list", + "Description": "A new list with the item replaced.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.List.ReplaceItemAtIndex@var[]..[],int,var[]..[]", + "Replication": "Auto", + "Description": "Replace an item from the given list that's located at the specified index.\n\nList.ReplaceItemAtIndex (list: var[]..[], index: int, item: var[]..[]): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "3be12dbff3c941f98ac72023af28b146", + "NodeType": "CodeBlockNode", + "Inputs": [], + "Outputs": [ + { + "Id": "5dc7e104a4b645c382b252b9a736d7c4", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "30b54f8151534624ac8f1224948317ed", + "Name": "", + "Description": "Value of expression at line 2", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "2;\n10;" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "3dc22657ca0f4eeb9449cf9aec119b86", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "794a2ed90873441b8e9b2bb4dc977149", + "Name": "nurbsCurve", + "Description": "Autodesk.DesignScript.Geometry.NurbsCurve", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "db6b3fb25e514752885e96466bee4cc2", + "Name": "Point[]", + "Description": "An Array of Points", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.NurbsCurve.ControlPoints", + "Replication": "Auto", + "Description": "Get the control points of the NurbsCurve. These are the points that the curve interpolates.\n\nNurbsCurve.ControlPoints ( ): Point[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "a7e1829354ec4939a1cec95f4ab26d43", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "b819f6dd66ec46f098e2ea440f0f9c7e", + "Name": "amount", + "Description": "Amount of random numbers the result list will contain.\n\nint", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "2ed0161660e047f2ab5b1ca61ad05ed8", + "Name": "value1", + "Description": "Lower end of the range for the random number.\n\ndouble", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "9b5cc2cb76354ccfa256f0af126a10d5", + "Name": "value2", + "Description": "Higher end of the range for the random number.\n\ndouble", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "e5d4f0954fd04978a99729666ae32ed7", + "Name": "seed", + "Description": "Seed value for the random number generator.\n\nint", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "dc01d7dad148494eba7fd5d59845ad3f", + "Name": "number", + "Description": "List of random numbers in the range [lower_number, higher_number).", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Math.RandomList@int,double,double,int", + "Replication": "Auto", + "Description": "Produces a list containing the given amount of random doubles in the defined range of [lower_number, higher_number) based on an initial seed value.\n\nMath.RandomList (amount: int, value1: double, value2: double, seed: int): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "0409e0b7fbc14d3683d6cf5b6d9be8b8", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "9734a2e1d9e040fe9947bf9447191120", + "Name": "amount", + "Description": "Amount of random numbers the result list will contain.\n\nint", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "e7a2a8124c57414d8d8140ec221d3e5c", + "Name": "value1", + "Description": "Lower end of the range for the random number.\n\ndouble", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "86221ab241bf433a8914f953d0193e6b", + "Name": "value2", + "Description": "Higher end of the range for the random number.\n\ndouble", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "152156c82c5a4587bde9bdb57844f51f", + "Name": "seed", + "Description": "Seed value for the random number generator.\n\nint", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "35003946d77d482a9ea48aee0f431418", + "Name": "number", + "Description": "List of random numbers in the range [lower_number, higher_number).", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Math.RandomList@int,double,double,int", + "Replication": "Auto", + "Description": "Produces a list containing the given amount of random doubles in the defined range of [lower_number, higher_number) based on an initial seed value.\n\nMath.RandomList (amount: int, value1: double, value2: double, seed: int): var[]..[]" + }, + { + "ConcreteType": "CoreNodeModels.CreateList, CoreNodeModels", + "VariableInputPorts": true, + "Id": "e69bca493ad34998a347b0094b584c33", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "7a1f6d46863c489dab203a93bdd4d1bf", + "Name": "item0", + "Description": "Item Index #0", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "8c82556d42894d398da9650fad804272", + "Name": "item1", + "Description": "Item Index #1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "2979154d5b0e44ab8e8a079d4098b309", + "Name": "item2", + "Description": "Item Index #2", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "965d24f62ddc427f8a3a44a5926548f6", + "Name": "item3", + "Description": "Item Index #3", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "89d616eb608e458290232301c15c3a8d", + "Name": "item4", + "Description": "Item Index #4", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "e1af84cffc7f4d65b19e286b6cfbb516", + "Name": "list", + "Description": "A list (type: var[]..[])", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Makes a new list from the given inputs" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "335f21038af042dba249f5e6195a9d1a", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "3ce287c86747451ab0b6d48b1c99d9eb", + "Name": "values", + "Description": "A List of values\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "eeb96a01b2e34a17a501371ae3de96ae", + "Name": "json", + "Description": "A JSON string where primitive types (e.g. double, int, boolean), Lists, and Dictionary's will be turned into the associated JSON type.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Data.StringifyJSON@var[]..[]", + "Replication": "Auto", + "Description": "Stringify converts an arbitrary value or a list of arbitrary values to JSON. Replication can be used to apply the operation over a list, producing a list of JSON strings.\n\nData.StringifyJSON (values: var[]..[]): string" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "825ffe28516a4d5db19107b7fd01b243", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "045ae108a2af4f8ca27b2a5a5fc1ddfa", + "Name": "json", + "Description": "A JSON string\n\nstring", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "322b12dcf4a647beb3d3b744fba7d66e", + "Name": "result", + "Description": "The result type depends on the content of the input string. The result type can be a primitive value (e.g. string, boolean, double), a List, or a Dictionary.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Data.ParseJSON@string", + "Replication": "Auto", + "Description": "Parse converts an arbitrary JSON string to a value. It is the opposite of JSON.Stringify.\n\nData.ParseJSON (json: string): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "05f9754e77784c75b4e9322a5cb0456d", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "69270cf9d7f148c5805c7c5f17904245", + "Name": "geometry", + "Description": "Autodesk.DesignScript.Geometry.Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "a4290fc45aec4f8ab6e166ef4e3d16df", + "Name": "other", + "Description": "Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "fe676c5a63c1403faff0307bdeb9dd6f", + "Name": "bool", + "Description": "bool", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Geometry.IsAlmostEqualTo@Autodesk.DesignScript.Geometry.Geometry", + "Replication": "Auto", + "Description": "Check if the two objects have the same representational geometry or numerical values\n\nGeometry.IsAlmostEqualTo (other: Geometry): bool" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "ae53e03600a44d68994b48feb5c844d4", + "NodeType": "CodeBlockNode", + "Inputs": [], + "Outputs": [ + { + "Id": "c29590582afe4be59b526ad51c95f599", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "bfb8eb66fd7641ae9e440cc5fb6ae6d2", + "Name": "", + "Description": "Value of expression at line 2", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "f52c1422602840f4baece0343076c97c", + "Name": "", + "Description": "Value of expression at line 3", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "e37cc910981b43e499636148416f8736", + "Name": "", + "Description": "Value of expression at line 4", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "a81c3963d98741e4a846cd0e4c11de34", + "Name": "", + "Description": "Value of expression at line 5", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "6;\n0;\n1;\n3;\n5;" + }, + { + "ConcreteType": "CoreNodeModels.Input.BoolSelector, CoreNodeModels", + "Id": "aade866649eb472cbd257dbb7c0faaad", + "NodeType": "BooleanInputNode", + "Inputs": [], + "Outputs": [ + { + "Id": "d22e2e2bf720467eaf6835bff846c8ff", + "Name": "", + "Description": "Boolean", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Enables selection between True and False", + "InputValue": true + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "1e190401c51147488d2cdcf4c52925db", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "0c4107b87e274625bfe0330027ab58a7", + "Name": "x", + "Description": "X coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "7f1446d0547c4653bae82c0698f2fa87", + "Name": "y", + "Description": "Y coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "dabdc512ecfe49fba36c86799b67f2bd", + "Name": "Point", + "Description": "Point created by coordinates", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Point.ByCoordinates@double,double", + "Replication": "Auto", + "Description": "Form a Point in the XY plane given two 2 cartesian coordinates. The Z component is 0.\n\nPoint.ByCoordinates (x: double = 0, y: double = 0): Point" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "a05123974dd848a2989f9eb376325845", + "NodeType": "CodeBlockNode", + "Inputs": [], + "Outputs": [ + { + "Id": "e695cdd562654bcb8e28bc4c5e309f3e", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "3;" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "76f23cdfae5248daa633a8bfc64b5b5c", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "b7a5c8733db046fd871e0376dac8dbbd", + "Name": "list", + "Description": "List of items to be sorted\n\nvar[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "1893a9dddf434f72b0c320c0c757689a", + "Name": "int[]", + "Description": "The indices of the items in the sorted list", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.List.Sort@var[]", + "Replication": "Auto", + "Description": "Sorts a list by the items and return their indices.\n\nList.Sort (list: var[]): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "fde095a845754edcb4afe6ba25d3f667", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "d9e8fc57057a48fa88031c478343c30e", + "Name": "list", + "Description": "List of items to be sorted\n\nvar[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "b91d892ce0a944cd9444cd96a7baaea5", + "Name": "int[]", + "Description": "The indices of the items in the sorted list", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.List.Sort@var[]", + "Replication": "Auto", + "Description": "Sorts a list by the items and return their indices.\n\nList.Sort (list: var[]): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "4efe91329fcd4f7d99f00a3bd8f1a40d", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "0d98cb38eb7e40c68862022c795e4423", + "Name": "points", + "Description": "Points for nurbs curve\n\nPoint[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "fc2fd19ee0684915bb633458ae778672", + "Name": "degree", + "Description": "int\nDefault value : 3", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "b17c16966e0f486d82d570380da82ce7", + "Name": "closeCurve", + "Description": "bool\nDefault value : false", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "092a0a0376db4d679ca421be480fa687", + "Name": "NurbsCurve", + "Description": "Nurbscurve created from points", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.NurbsCurve.ByControlPoints@Autodesk.DesignScript.Geometry.Point[],int,bool", + "Replication": "Auto", + "Description": "Create a BSplineCurve by using explicit control points. NOTE 1: BSplineCurves with deg=1 have G1 discontinuities, which cause problems for extrusion, sweep, and other operations. They should be avoided. Use a PolyCurve instead. NOTE 2: If the curve is periodic (closed), then the first and last points MUST be the same.\n\nNurbsCurve.ByControlPoints (points: Point[], degree: int = 3, closeCurve: bool = false): NurbsCurve" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "81bb733acba9410c889f2ba2a4dd6c04", + "NodeType": "CodeBlockNode", + "Inputs": [ + { + "Id": "25864402c7334b308241d90ffcc8bc69", + "Name": "x", + "Description": "x", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "75bf252cdd1f4dbba4ff778211413bcf", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "x*15;" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "7069c47097b44fa5ab93f125ddec42c4", + "NodeType": "CodeBlockNode", + "Inputs": [ + { + "Id": "d6aefe289f5c490aab4785158708d9dd", + "Name": "x", + "Description": "x", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "0205f1fe57a740829d1824a5d7a8136c", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "x*15;" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "4252bb8edd9d4e718edc7b2792ef4505", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "c9312f46da25459ba1796435d093c28d", + "Name": "amount", + "Description": "Amount of random numbers the result list will contain.\n\nint", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "39c94243a9604b48abaa5c9150a05090", + "Name": "value1", + "Description": "Lower end of the range for the random number.\n\ndouble", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "12ca0d603a9b4017bfb0be1f114b4aee", + "Name": "value2", + "Description": "Higher end of the range for the random number.\n\ndouble", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "d8d875323099429bab96a1a3b0c0443c", + "Name": "seed", + "Description": "Seed value for the random number generator.\n\nint", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "82ed9504674d46d1b6cbfc25d7814f6a", + "Name": "number", + "Description": "List of random numbers in the range [lower_number, higher_number).", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Math.RandomList@int,double,double,int", + "Replication": "Auto", + "Description": "Produces a list containing the given amount of random doubles in the defined range of [lower_number, higher_number) based on an initial seed value.\n\nMath.RandomList (amount: int, value1: double, value2: double, seed: int): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "1c6ce174cc814058b2c5e038f7ba0a03", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "6a72c8641c414116980699062b098d0a", + "Name": "amount", + "Description": "Amount of random numbers the result list will contain.\n\nint", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "ded9498e47e14c4b8280ca56f42b6c41", + "Name": "value1", + "Description": "Lower end of the range for the random number.\n\ndouble", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "2c9fa7ba8a954a54a7bc8c3dc676c14d", + "Name": "value2", + "Description": "Higher end of the range for the random number.\n\ndouble", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "f44ab0d2289347ff831c92f566dfd8db", + "Name": "seed", + "Description": "Seed value for the random number generator.\n\nint", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "28cccb80713c4f2896266393439eeff0", + "Name": "number", + "Description": "List of random numbers in the range [lower_number, higher_number).", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Math.RandomList@int,double,double,int", + "Replication": "Auto", + "Description": "Produces a list containing the given amount of random doubles in the defined range of [lower_number, higher_number) based on an initial seed value.\n\nMath.RandomList (amount: int, value1: double, value2: double, seed: int): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "5f12fbe900c84ce6971b8ab3d5098a91", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "8ff42c146ce24856af6156d275d4722b", + "Name": "points", + "Description": "Points for nurbs curve\n\nPoint[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "37e5cc16d5784f8e89266ab8f1b7b6c0", + "Name": "degree", + "Description": "int\nDefault value : 3", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "f7d17dd934024b93932c72f8ca3124c3", + "Name": "closeCurve", + "Description": "bool\nDefault value : false", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "df94bfa350bb47d598d329bf5e522475", + "Name": "NurbsCurve", + "Description": "Nurbscurve created from points", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.NurbsCurve.ByControlPoints@Autodesk.DesignScript.Geometry.Point[],int,bool", + "Replication": "Auto", + "Description": "Create a BSplineCurve by using explicit control points. NOTE 1: BSplineCurves with deg=1 have G1 discontinuities, which cause problems for extrusion, sweep, and other operations. They should be avoided. Use a PolyCurve instead. NOTE 2: If the curve is periodic (closed), then the first and last points MUST be the same.\n\nNurbsCurve.ByControlPoints (points: Point[], degree: int = 3, closeCurve: bool = false): NurbsCurve" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "6e8e089b33154239bff6533905324e40", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "3ea5b61932504fe9a914dc474d805893", + "Name": "x", + "Description": "Basic type object to compare (e.g. bool, int, double, string, etc.)\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "ac7ed336a8ff4252818459e3db2069c3", + "Name": "y", + "Description": "Basic type object to compare (e.g. bool, int, double, string, etc.)\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "0d90b25141cc4e29b87199a507f51d52", + "Name": "bool", + "Description": "Result of equality check", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "==@var[]..[],var[]..[]", + "Replication": "Auto", + "Description": "Compares if x and y are equal\n\n== (x: var[]..[], y: var[]..[]): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "fcec1324535e4462b5b4ae1879b6bf22", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "295f50ddf2e74bb980bfbdbf9fbf7238", + "Name": "object", + "Description": "Object to query type\n\nvar", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "58e16ac7422c4f6ba3c5f102ab56a6fc", + "Name": "string", + "Description": "Type of object.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Object.Type@var", + "Replication": "Auto", + "Description": "Returns the type of object represented as string.\n\nObject.Type (object: var): string" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "a7c310ea86ef4bd0986bb48d43b8ae59", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "39d9c9de359942febd818fcc514cc642", + "Name": "object", + "Description": "Object to query type\n\nvar", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "2443dce540c34d2fa018bf3c67fd5ea4", + "Name": "string", + "Description": "Type of object.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Object.Type@var", + "Replication": "Auto", + "Description": "Returns the type of object represented as string.\n\nObject.Type (object: var): string" + }, + { + "ConcreteType": "CoreNodeModels.CreateList, CoreNodeModels", + "VariableInputPorts": true, + "Id": "5637fc5f491442929861b146a3bdd414", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "c815bff476c345d8b05ea6ad1cfbe418", + "Name": "item0", + "Description": "Item Index #0", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "13bcd82434f049f8a53ba98a48b5d4d4", + "Name": "item1", + "Description": "Item Index #1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "e32e4586726c4f8d95521ba430874fd8", + "Name": "list", + "Description": "A list (type: var[]..[])", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Makes a new list from the given inputs" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "3c44f22d1314423ab40dc1b654cdf0c4", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "faeb3b0b46af4a20ad680412d887f00e", + "Name": "list", + "Description": "List to flatten.\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "bf7ff9f02609487c940efc96538f69a0", + "Name": "amount", + "Description": "Layers of list nesting to remove (-1 will remove all list nestings)\n\nint\nDefault value : -1", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "4709f5da22fc4775b242b7a127ff65e9", + "Name": "list", + "Description": "Flattened list by amount", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.List.Flatten@var[]..[],int", + "Replication": "Auto", + "Description": "Flattens a nested list of lists by a certain amount.\n\nList.Flatten (list: var[]..[], amount: int = -1): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "ae8ae5b06ddc463fbcf6af3742bf1dd2", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "14ed2121d71b4c60aa9df46888723706", + "Name": "json", + "Description": "A JSON string\n\nstring", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "c58539de1671474f8a5527a3e6aa396b", + "Name": "result", + "Description": "The result type depends on the content of the input string. The result type can be a primitive value (e.g. string, boolean, double), a List, or a Dictionary.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Data.ParseJSON@string", + "Replication": "Auto", + "Description": "Parse converts an arbitrary JSON string to a value. It is the opposite of JSON.Stringify.\n\nData.ParseJSON (json: string): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "f888a56b80d246a69e33165b8403ced8", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "fa7fb4b459614ee9b3af3078f113bf51", + "Name": "geometry", + "Description": "Autodesk.DesignScript.Geometry.Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "665881d6d7c140a681e8f0e92c93e9eb", + "Name": "other", + "Description": "Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "170138bfa27b47638cfe3a2382279a46", + "Name": "bool", + "Description": "bool", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Geometry.IsAlmostEqualTo@Autodesk.DesignScript.Geometry.Geometry", + "Replication": "Auto", + "Description": "Check if the two objects have the same representational geometry or numerical values\n\nGeometry.IsAlmostEqualTo (other: Geometry): bool" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "a6c7caf73f874fd890814ddaeee394f0", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "5266e4b3f8484e14b7343e4cca1e9314", + "Name": "values", + "Description": "A List of values\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "b46ea472052b4d43b1d0755150170af6", + "Name": "json", + "Description": "A JSON string where primitive types (e.g. double, int, boolean), Lists, and Dictionary's will be turned into the associated JSON type.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Data.StringifyJSON@var[]..[]", + "Replication": "Auto", + "Description": "Stringify converts an arbitrary value or a list of arbitrary values to JSON. Replication can be used to apply the operation over a list, producing a list of JSON strings.\n\nData.StringifyJSON (values: var[]..[]): string" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "2bfab86e58fc41c3be2a4f630a722fa2", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "04db164d5def45efb4b931cebdbe6936", + "Name": "geometry", + "Description": "Autodesk.DesignScript.Geometry.Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "0435f4df2c804a13a4383bc39d1baa64", + "Name": "fromCoordinateSystem", + "Description": "CoordinateSystem", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "af7a3302e74a4b9ea4fa18a703f5d3a2", + "Name": "contextCoordinateSystem", + "Description": "CoordinateSystem", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "32896a7b4f1c4af1958761023615d0af", + "Name": "Geometry", + "Description": "Transformed Geometry.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Geometry.Transform@Autodesk.DesignScript.Geometry.CoordinateSystem,Autodesk.DesignScript.Geometry.CoordinateSystem", + "Replication": "Auto", + "Description": "Transforms this geometry from source CoordinateSystem to a new context CoordinateSystem.\n\nGeometry.Transform (fromCoordinateSystem: CoordinateSystem, contextCoordinateSystem: CoordinateSystem): Geometry" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "74c700a7f3e74c9d996d14b82203005a", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "3073d96db5114f15a342c27bc232fa19", + "Name": "coordinateSystem", + "Description": "Autodesk.DesignScript.Geometry.CoordinateSystem", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "2c213df1b8b44004af75af5b1b255cf5", + "Name": "amount", + "Description": "Amount to scale\n\ndouble\nDefault value : 1", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "7531b2d2a1ef49a6b4407aea0b623f1d", + "Name": "CoordinateSystem", + "Description": "Scaled coordinate system", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.CoordinateSystem.Scale@double", + "Replication": "Auto", + "Description": "Scale uniformly around the origin\n\nCoordinateSystem.Scale (amount: double = 1): CoordinateSystem" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "2dc2559439e84d509dc8bfa4ba8b8f4e", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "1dba63b4d3d64c5eb55cd27b23b4d0c5", + "Name": "x", + "Description": "double\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "b9d29b68d5ae4e378f7f3dabd9ad5eda", + "Name": "y", + "Description": "double\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "54e717af3a114f67aa330385f8b86fb5", + "Name": "CoordinateSystem", + "Description": "CoordinateSystem", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.CoordinateSystem.ByOrigin@double,double", + "Replication": "Auto", + "Description": "Create a CoordinateSystem with origin at X and Y locations, with X and Y Axes set as WCS X and Y Axes. Z defaults to 0.\n\nCoordinateSystem.ByOrigin (x: double = 0, y: double = 0): CoordinateSystem" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "cfdaa3f989a84ca28fab8bb3d700b4d9", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "a1574f3424eb413695c75d1d70115986", + "Name": "json", + "Description": "A JSON string\n\nstring", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "8279a90c140246d8aa2e4546039c26b4", + "Name": "result", + "Description": "The result type depends on the content of the input string. The result type can be a primitive value (e.g. string, boolean, double), a List, or a Dictionary.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Data.ParseJSON@string", + "Replication": "Auto", + "Description": "Parse converts an arbitrary JSON string to a value. It is the opposite of JSON.Stringify.\n\nData.ParseJSON (json: string): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "5c5f540b487e455cb8a21e0fae9bed1e", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "0bce6e6b002f465fb39a4ca957926592", + "Name": "values", + "Description": "A List of values\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "f934e2e96fcb497d80f5836f1278ec71", + "Name": "json", + "Description": "A JSON string where primitive types (e.g. double, int, boolean), Lists, and Dictionary's will be turned into the associated JSON type.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Data.StringifyJSON@var[]..[]", + "Replication": "Auto", + "Description": "Stringify converts an arbitrary value or a list of arbitrary values to JSON. Replication can be used to apply the operation over a list, producing a list of JSON strings.\n\nData.StringifyJSON (values: var[]..[]): string" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "6e264e57307944bebc045c3a11baed92", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "b34abfdea8304687b638789496ed8929", + "Name": "geometry", + "Description": "Autodesk.DesignScript.Geometry.Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "8125a300f54f4b529e0f7c176da963b4", + "Name": "other", + "Description": "Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "541b4a6e37ba43ed96c1ee41d4f4744b", + "Name": "bool", + "Description": "bool", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Geometry.IsAlmostEqualTo@Autodesk.DesignScript.Geometry.Geometry", + "Replication": "Auto", + "Description": "Check if the two objects have the same representational geometry or numerical values\n\nGeometry.IsAlmostEqualTo (other: Geometry): bool" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "917e6d164ab14e2796025482801fac08", + "NodeType": "FunctionNode", + "Inputs": [], + "Outputs": [ + { + "Id": "53cd967f5b3444dc9b0451d3dd431780", + "Name": "Plane", + "Description": "Plane at XZ plane of world", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Plane.XZ", + "Replication": "Auto", + "Description": "Creates a plane in the world XZ plane\n\nPlane.XZ ( ): Plane" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "4286e3b45d0a4e66816a1a121909827c", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "8b6486f2237a4a6ea4fab84ecd13685a", + "Name": "geometry", + "Description": "Autodesk.DesignScript.Geometry.Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "b15db67ce9f24910bfb8b92656be4e2c", + "Name": "mirrorPlane", + "Description": "Plane", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "05a66865192f421c83c749cd92055c71", + "Name": "Geometry", + "Description": "Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Geometry.Mirror@Autodesk.DesignScript.Geometry.Plane", + "Replication": "Auto", + "Description": "Mirror the object across the input Plane\n\nGeometry.Mirror (mirrorPlane: Plane): Geometry" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "57be41f9549447e2872b89bd584e2fe0", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "fc3a4db4d2bc4d15864922e6893f8ba0", + "Name": "coordinateSystem", + "Description": "Autodesk.DesignScript.Geometry.CoordinateSystem", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "ce1c9d33e42f4a51a535e2257eb6302f", + "Name": "origin", + "Description": "Origin point\n\nPoint", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "d56c6cb8d08f43ea9da89e2f90a8231d", + "Name": "axis", + "Description": "Vector axis for rotation\n\nVector", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "4461a2ba15ac4000b659a67ade469aa3", + "Name": "degrees", + "Description": "Degrees to rotate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "b538cd1451744905a661eff47f499ff6", + "Name": "CoordinateSystem", + "Description": "Rotated coordinate system", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.CoordinateSystem.Rotate@Autodesk.DesignScript.Geometry.Point,Autodesk.DesignScript.Geometry.Vector,double", + "Replication": "Auto", + "Description": "Rotates an object around an origin and an axis by a specified degree\n\nCoordinateSystem.Rotate (origin: Point, axis: Vector, degrees: double = 0): CoordinateSystem" + }, + { + "ConcreteType": "CoreNodeModels.Input.DoubleInput, CoreNodeModels", + "NumberType": "Double", + "Id": "d342013f18c244dcadd191f40d792f3d", + "NodeType": "NumberInputNode", + "Inputs": [], + "Outputs": [ + { + "Id": "dd7733c3b6f9448b9642f88eee522382", + "Name": "", + "Description": "Double", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Creates a number", + "InputValue": 2.3 + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "aa432b46492a490393f49be7b375535e", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "2e41137a17674ee8849b14924d722fc7", + "Name": "x", + "Description": "double\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "bafbebe98d264bb5a66424f6594d68ae", + "Name": "y", + "Description": "double\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "fce5c31adb61498c8006af4a66cc71aa", + "Name": "z", + "Description": "double\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "0105f0d8a4024812b71aabd1a16e4e23", + "Name": "CoordinateSystem", + "Description": "CoordinateSystem", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.CoordinateSystem.ByOrigin@double,double,double", + "Replication": "Auto", + "Description": "Create a CoordinateSystem with origin at X, Y, and Z locations, with X and Y Axes set as WCS X and Y Axes.\n\nCoordinateSystem.ByOrigin (x: double = 0, y: double = 0, z: double = 0): CoordinateSystem" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "4dfc547d352b4673881db78891dbce50", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "9b7bacfca62b4bb0acfef3dadebdb0bd", + "Name": "x", + "Description": "X coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "c955aedb3cd942f7bb0eae84d59799a5", + "Name": "y", + "Description": "Y coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "f388883c96c64da1b0fcc8aa565c52a4", + "Name": "z", + "Description": "Z coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "51678ed27c2c4ac8904bd9c0d6a814f4", + "Name": "Point", + "Description": "Point created by coordinates", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Point.ByCoordinates@double,double,double", + "Replication": "Auto", + "Description": "Form a Point given 3 cartesian coordinates\n\nPoint.ByCoordinates (x: double = 0, y: double = 0, z: double = 0): Point" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "9c37d9515bbf41128e6027dac11174de", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "f6cae31ee3d0420e87d8bfad67ad6bf6", + "Name": "x", + "Description": "X coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "bf53ceb5ca39499f92f620567a28959b", + "Name": "y", + "Description": "Y coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "bc61753cc6c14818b6eb23dbf3e30fa7", + "Name": "z", + "Description": "Z coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "f62fcfd33a154d3fb00770ce0731c8b6", + "Name": "Vector", + "Description": "Vector created by coordinates", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Vector.ByCoordinates@double,double,double", + "Replication": "Auto", + "Description": "Form a Vector by 3 Euclidean coordinates\n\nVector.ByCoordinates (x: double = 0, y: double = 0, z: double = 0): Vector" + }, + { + "ConcreteType": "CoreNodeModels.Input.DoubleInput, CoreNodeModels", + "NumberType": "Double", + "Id": "18fd5f3bd9f946e4b2e4a9ea16003f0e", + "NodeType": "NumberInputNode", + "Inputs": [], + "Outputs": [ + { + "Id": "673ff649e15a4427bfe73d477ee119cc", + "Name": "", + "Description": "Double", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Creates a number", + "InputValue": 24.0 + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "e6bc534b15cd4005b7b86ac2da3c2c7b", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "ef9fe165fa9747f49ddf81655099ade1", + "Name": "values", + "Description": "A List of values\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "c4ff56ce1dfe4f6785bd8e92a0075e21", + "Name": "json", + "Description": "A JSON string where primitive types (e.g. double, int, boolean), Lists, and Dictionary's will be turned into the associated JSON type.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Data.StringifyJSON@var[]..[]", + "Replication": "Auto", + "Description": "Stringify converts an arbitrary value or a list of arbitrary values to JSON. Replication can be used to apply the operation over a list, producing a list of JSON strings.\n\nData.StringifyJSON (values: var[]..[]): string" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "64f2e1a7c4ac469881b19f5022fd19b0", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "c54858faf2384c5d9089433616e2dfda", + "Name": "json", + "Description": "A JSON string\n\nstring", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "42132bbba4d24efb86d4101fb01ee461", + "Name": "result", + "Description": "The result type depends on the content of the input string. The result type can be a primitive value (e.g. string, boolean, double), a List, or a Dictionary.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Data.ParseJSON@string", + "Replication": "Auto", + "Description": "Parse converts an arbitrary JSON string to a value. It is the opposite of JSON.Stringify.\n\nData.ParseJSON (json: string): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "d6e5014acdb04575bffd9b032bf58eea", + "NodeType": "CodeBlockNode", + "Inputs": [], + "Outputs": [ + { + "Id": "ecaa6fc0ebf74d049066435128f5eebd", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "b920960d78b84e6396cbd391b1fdc674", + "Name": "", + "Description": "Value of expression at line 2", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "4e45960f34e84d3695dd2a0c76abe267", + "Name": "", + "Description": "Value of expression at line 3", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "2;\n3;\n4;" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "320d895b7c3b48f8ac998d3101c682d5", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "b7a42d5bdd1a4a8ea20fcf7d6d4d3511", + "Name": "curve", + "Description": "Autodesk.DesignScript.Geometry.Curve", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "62cd6f4f022c488bb851d6fbdbf9bdb6", + "Name": "Curve", + "Description": "A new Curve with the opposite direction", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Curve.Reverse", + "Replication": "Auto", + "Description": "Reverse the direction of the curve\n\nCurve.Reverse ( ): Curve" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "5fe4da4a73d64748a0b07fca04caeaf8", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "699717ed95f4411ea45301821d25571d", + "Name": "geometry", + "Description": "Autodesk.DesignScript.Geometry.Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "1628d37354c14119826ce6ed5508d5b8", + "Name": "other", + "Description": "Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "a99af9869fa74a5a989b004fc4a06d7c", + "Name": "bool", + "Description": "bool", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Geometry.IsAlmostEqualTo@Autodesk.DesignScript.Geometry.Geometry", + "Replication": "Auto", + "Description": "Check if the two objects have the same representational geometry or numerical values\n\nGeometry.IsAlmostEqualTo (other: Geometry): bool" + }, + { + "ConcreteType": "CoreNodeModels.CreateList, CoreNodeModels", + "VariableInputPorts": true, + "Id": "f8ce5418c4f5491f9f37ff7e9da3b6be", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "d198e395cca743cebaca3904bd1dfeeb", + "Name": "item0", + "Description": "Item Index #0", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "319523068d43403ab70952f907928fe9", + "Name": "item1", + "Description": "Item Index #1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "651d179c586b495fa1f45bf955e31704", + "Name": "item2", + "Description": "Item Index #2", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "fd9effa515174d7e9a0b17cf6c6f9e7c", + "Name": "item3", + "Description": "Item Index #3", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "8865035268d845df945bf41040ec9a01", + "Name": "list", + "Description": "A list (type: var[]..[])", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Makes a new list from the given inputs" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "5205ffe621084a12bb409ba8ed819d5e", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "36ecc4584c3740e7a9f23064880361c9", + "Name": "list", + "Description": "List to flatten.\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "ab5e5650a5024445a6214247ae4a4ddf", + "Name": "amount", + "Description": "Layers of list nesting to remove (-1 will remove all list nestings)\n\nint\nDefault value : -1", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "1f5bdcdf7999488fb7fe7e67403bf463", + "Name": "list", + "Description": "Flattened list by amount", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.List.Flatten@var[]..[],int", + "Replication": "Auto", + "Description": "Flattens a nested list of lists by a certain amount.\n\nList.Flatten (list: var[]..[], amount: int = -1): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "423356e2c8f84e00aa6c50e9bdb72c98", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "3900257f07fb4a5b8a60b831ee7b2083", + "Name": "list", + "Description": "List to be checked on whether all items are true.\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "c8209cd063a146ffaba379787de80ef9", + "Name": "bool", + "Description": "True if all items from list are true, false if one or more items is not true", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.List.AllTrue@var[]..[]", + "Replication": "Auto", + "Description": "Determines if all items in the given list is a boolean and has a true value.\n\nList.AllTrue (list: var[]..[]): bool" + } + ], + "Connectors": [ + { + "Start": "8f5273b9b44542d9aa2d8c86deed529e", + "End": "965d24f62ddc427f8a3a44a5926548f6", + "Id": "935006d876ec413cb041c3d6e4c9ec7c", + "IsHidden": "False" + }, + { + "Start": "d361ec676f914ab18d2b2b83bc9fdbb3", + "End": "89d616eb608e458290232301c15c3a8d", + "Id": "37f1e44d178d48f995cc897e6ef9efc7", + "IsHidden": "False" + }, + { + "Start": "51148ada42f94ccfaf403d0a04a040eb", + "End": "ca10816cb1014b89b1f9cd5195240c18", + "Id": "3c9da11a74c44b909bb58284e881566a", + "IsHidden": "False" + }, + { + "Start": "07d649accf914413bfe6e773eba2b541", + "End": "b819f6dd66ec46f098e2ea440f0f9c7e", + "Id": "77e45c2a86dd4895a716d033b9e3118c", + "IsHidden": "False" + }, + { + "Start": "07d649accf914413bfe6e773eba2b541", + "End": "9734a2e1d9e040fe9947bf9447191120", + "Id": "cee48811831e40d886a0566d2ffd1952", + "IsHidden": "False" + }, + { + "Start": "865ff40842624b488658ecfbc6159ad3", + "End": "2ed0161660e047f2ab5b1ca61ad05ed8", + "Id": "8b73ebb4157f4ca4a44089ac888a1862", + "IsHidden": "False" + }, + { + "Start": "865ff40842624b488658ecfbc6159ad3", + "End": "e7a2a8124c57414d8d8140ec221d3e5c", + "Id": "a4e981b8ef2e4bcabea9d73504f6c226", + "IsHidden": "False" + }, + { + "Start": "f956a685a11640a99fdffe766905a9e2", + "End": "9b5cc2cb76354ccfa256f0af126a10d5", + "Id": "f7c7e88e3aa943c0a971f1951cf53e83", + "IsHidden": "False" + }, + { + "Start": "f956a685a11640a99fdffe766905a9e2", + "End": "86221ab241bf433a8914f953d0193e6b", + "Id": "993bfb75b0ac4b469a2e7dccca59dd09", + "IsHidden": "False" + }, + { + "Start": "a96e519d94fe4964a56557ddb627cbf1", + "End": "e5d4f0954fd04978a99729666ae32ed7", + "Id": "9213a2d8f7804799abed80f467651b9f", + "IsHidden": "False" + }, + { + "Start": "326632c753f34131a4c79f9d9985f52f", + "End": "152156c82c5a4587bde9bdb57844f51f", + "Id": "a2ad5662900e48d282710baeb89cfcea", + "IsHidden": "False" + }, + { + "Start": "860bf267267848eabe69b46d7196729f", + "End": "0843edcec1714067b2af56821d308d3e", + "Id": "58fd631b70494824b563d626bb267e73", + "IsHidden": "False" + }, + { + "Start": "b2f5499ea0e54d58adc5257da6908dcc", + "End": "8f636d90b60b45199c4c118ad709bc45", + "Id": "a36eb29596de45bb90622c940e5bbd5c", + "IsHidden": "False" + }, + { + "Start": "1abf0134a9674e2698dc5e5d1e84c032", + "End": "e07169e0a7574889a18db67a1a2c3f37", + "Id": "11845398891e418d8125189f3e1c0da3", + "IsHidden": "False" + }, + { + "Start": "1abf0134a9674e2698dc5e5d1e84c032", + "End": "3d30545f5ae9458fb027b21287434a4a", + "Id": "925db0ee166948c3aaf21dffb98c7eab", + "IsHidden": "False" + }, + { + "Start": "1abf0134a9674e2698dc5e5d1e84c032", + "End": "794a2ed90873441b8e9b2bb4dc977149", + "Id": "fa6987665b114fe8a89652072f75fa75", + "IsHidden": "False" + }, + { + "Start": "79fd0911eba54bcd96ec27ec525a68fd", + "End": "320a49fc36b04d039e65c167a6ccfb96", + "Id": "aa12800f20b34b6a83e84c21cded232c", + "IsHidden": "False" + }, + { + "Start": "f346fd19071e44509eb7ffe916f12522", + "End": "d59cc30375df455ea1bdd20d7e635a89", + "Id": "bff330875755473d9a2f366ccf98abab", + "IsHidden": "False" + }, + { + "Start": "8cee3acb532f47748fc36e084e4bf33b", + "End": "7a1f6d46863c489dab203a93bdd4d1bf", + "Id": "88ae90b479614b51953a8b52a88b6c51", + "IsHidden": "False" + }, + { + "Start": "8cee3acb532f47748fc36e084e4bf33b", + "End": "b7a42d5bdd1a4a8ea20fcf7d6d4d3511", + "Id": "eb3f746d23ff48c5802e4330b6a01533", + "IsHidden": "False" + }, + { + "Start": "e08d34c0a2174a89b966226c1c95382b", + "End": "089f55816b4e478185c43290296721e8", + "Id": "b7492b3eb38f49cebf120fdd5160609b", + "IsHidden": "False" + }, + { + "Start": "43120a6ca59c4b8f8f4121a34594116c", + "End": "69bde306a3d64447b03c9860e38a6902", + "Id": "7cdbdf2c6f404d27ba50697589b6306f", + "IsHidden": "False" + }, + { + "Start": "45644684b55542a7b9907f888c9a26e0", + "End": "d40f9ae4f6e94c37a9e934e83f4fd75a", + "Id": "3e15bbf42fa94690baf1d2e341cc9d67", + "IsHidden": "False" + }, + { + "Start": "7700da00a0c84ff4ac929d6b6c0651d8", + "End": "56a5ac4c2fe64c41bcbb61249f688774", + "Id": "7ada97e9de144fdb99cef23845a86a24", + "IsHidden": "False" + }, + { + "Start": "5dc7e104a4b645c382b252b9a736d7c4", + "End": "68e170e819f3471c80a111b3fbbeeed5", + "Id": "ef9dad1354fd48d0a638708f899c3645", + "IsHidden": "False" + }, + { + "Start": "30b54f8151534624ac8f1224948317ed", + "End": "7f577a4e565144b08e55b0cd19877387", + "Id": "a651a3dcb52243cba02200847b946daf", + "IsHidden": "False" + }, + { + "Start": "db6b3fb25e514752885e96466bee4cc2", + "End": "e44d69b2c0854e54a251b4bd7f14fa95", + "Id": "c8dd72de5e2a4f2797aea0523cb6181b", + "IsHidden": "False" + }, + { + "Start": "dc01d7dad148494eba7fd5d59845ad3f", + "End": "ebdd384c74a4471490b4d6b06848aeaf", + "Id": "d44694a1e67144d88038480bb3bb51a1", + "IsHidden": "False" + }, + { + "Start": "35003946d77d482a9ea48aee0f431418", + "End": "1a889ad045e64868a89bfb6dde988c85", + "Id": "0381daf0f1514acca913733be85686d8", + "IsHidden": "False" + }, + { + "Start": "e1af84cffc7f4d65b19e286b6cfbb516", + "End": "3ce287c86747451ab0b6d48b1c99d9eb", + "Id": "93d80631c5d44befb4056e971e954d59", + "IsHidden": "False" + }, + { + "Start": "e1af84cffc7f4d65b19e286b6cfbb516", + "End": "69270cf9d7f148c5805c7c5f17904245", + "Id": "d6b506196cb24c108d8f607460c78479", + "IsHidden": "False" + }, + { + "Start": "e1af84cffc7f4d65b19e286b6cfbb516", + "End": "39d9c9de359942febd818fcc514cc642", + "Id": "795775eb3fcc4477a577224abff00920", + "IsHidden": "False" + }, + { + "Start": "eeb96a01b2e34a17a501371ae3de96ae", + "End": "045ae108a2af4f8ca27b2a5a5fc1ddfa", + "Id": "fbe847e8f51b49bdb2abe6d8d8a2a856", + "IsHidden": "False" + }, + { + "Start": "322b12dcf4a647beb3d3b744fba7d66e", + "End": "a4290fc45aec4f8ab6e166ef4e3d16df", + "Id": "d50251a022344b3ca6ba904805c45c71", + "IsHidden": "False" + }, + { + "Start": "322b12dcf4a647beb3d3b744fba7d66e", + "End": "295f50ddf2e74bb980bfbdbf9fbf7238", + "Id": "6d0b2641e44c4e0baa67af22a86f970e", + "IsHidden": "False" + }, + { + "Start": "fe676c5a63c1403faff0307bdeb9dd6f", + "End": "c815bff476c345d8b05ea6ad1cfbe418", + "Id": "2237c3e308004139a691c3370bd9c434", + "IsHidden": "False" + }, + { + "Start": "c29590582afe4be59b526ad51c95f599", + "End": "c9312f46da25459ba1796435d093c28d", + "Id": "64da2f5afffb4735a43e34e5a89f5d6d", + "IsHidden": "False" + }, + { + "Start": "c29590582afe4be59b526ad51c95f599", + "End": "6a72c8641c414116980699062b098d0a", + "Id": "ad4407de013446649683b654a0b27336", + "IsHidden": "False" + }, + { + "Start": "bfb8eb66fd7641ae9e440cc5fb6ae6d2", + "End": "39c94243a9604b48abaa5c9150a05090", + "Id": "18ad2e5b2cf443febac920eedcd3b771", + "IsHidden": "False" + }, + { + "Start": "bfb8eb66fd7641ae9e440cc5fb6ae6d2", + "End": "ded9498e47e14c4b8280ca56f42b6c41", + "Id": "3b2ecfacc9174bb3bf6e596ac72b22cc", + "IsHidden": "False" + }, + { + "Start": "f52c1422602840f4baece0343076c97c", + "End": "12ca0d603a9b4017bfb0be1f114b4aee", + "Id": "af43f665368e4439bada021edd960be5", + "IsHidden": "False" + }, + { + "Start": "f52c1422602840f4baece0343076c97c", + "End": "2c9fa7ba8a954a54a7bc8c3dc676c14d", + "Id": "15aa820303cc4c86b391f7084883487e", + "IsHidden": "False" + }, + { + "Start": "e37cc910981b43e499636148416f8736", + "End": "d8d875323099429bab96a1a3b0c0443c", + "Id": "f15fa3438a5e4e1aacd03401c00163b0", + "IsHidden": "False" + }, + { + "Start": "a81c3963d98741e4a846cd0e4c11de34", + "End": "f44ab0d2289347ff831c92f566dfd8db", + "Id": "9113906f116840259933fd04fd6e0577", + "IsHidden": "False" + }, + { + "Start": "d22e2e2bf720467eaf6835bff846c8ff", + "End": "f7d17dd934024b93932c72f8ca3124c3", + "Id": "c7c75662b93d4cbc91c4190c5108baf9", + "IsHidden": "False" + }, + { + "Start": "dabdc512ecfe49fba36c86799b67f2bd", + "End": "0d98cb38eb7e40c68862022c795e4423", + "Id": "fe7d400e50be477a8a312afa83e99e1e", + "IsHidden": "False" + }, + { + "Start": "dabdc512ecfe49fba36c86799b67f2bd", + "End": "8ff42c146ce24856af6156d275d4722b", + "Id": "e4fa228d3e8448719af16a0a60a4a10a", + "IsHidden": "False" + }, + { + "Start": "dabdc512ecfe49fba36c86799b67f2bd", + "End": "62d0ddb075fd4fcc89fdd630354de5e3", + "Id": "d64fef941ad443fcbd339894fd14bdee", + "IsHidden": "False" + }, + { + "Start": "dabdc512ecfe49fba36c86799b67f2bd", + "End": "f8d9b8e65dde4b6f98a9445844ab2ce4", + "Id": "22385f04fc5742edaaf6d1f8e7f0b87f", + "IsHidden": "False" + }, + { + "Start": "e695cdd562654bcb8e28bc4c5e309f3e", + "End": "fc2fd19ee0684915bb633458ae778672", + "Id": "72ec94cb9f5f4d259edf343602973ff8", + "IsHidden": "False" + }, + { + "Start": "e695cdd562654bcb8e28bc4c5e309f3e", + "End": "37e5cc16d5784f8e89266ab8f1b7b6c0", + "Id": "e827808e39e04a84b782dbc88ab7a668", + "IsHidden": "False" + }, + { + "Start": "1893a9dddf434f72b0c320c0c757689a", + "End": "7f1446d0547c4653bae82c0698f2fa87", + "Id": "13b65022c9054e279b09b523d77bec99", + "IsHidden": "False" + }, + { + "Start": "b91d892ce0a944cd9444cd96a7baaea5", + "End": "0c4107b87e274625bfe0330027ab58a7", + "Id": "ace29cf2c5734f4588143927f4c7600d", + "IsHidden": "False" + }, + { + "Start": "092a0a0376db4d679ca421be480fa687", + "End": "8c82556d42894d398da9650fad804272", + "Id": "e2073d94cd2b492b8d29f9ffc5ac9d27", + "IsHidden": "False" + }, + { + "Start": "092a0a0376db4d679ca421be480fa687", + "End": "8b6486f2237a4a6ea4fab84ecd13685a", + "Id": "923c905d5a8546a8b02c76442a35033a", + "IsHidden": "False" + }, + { + "Start": "092a0a0376db4d679ca421be480fa687", + "End": "04db164d5def45efb4b931cebdbe6936", + "Id": "1e2d0a0464d44a859318c53297c1b07a", + "IsHidden": "False" + }, + { + "Start": "75bf252cdd1f4dbba4ff778211413bcf", + "End": "d9e8fc57057a48fa88031c478343c30e", + "Id": "bb9568806e66416ba3117209fbff2978", + "IsHidden": "False" + }, + { + "Start": "0205f1fe57a740829d1824a5d7a8136c", + "End": "b7a5c8733db046fd871e0376dac8dbbd", + "Id": "87f4307f0b094705b7cfb66e3f26aa42", + "IsHidden": "False" + }, + { + "Start": "82ed9504674d46d1b6cbfc25d7814f6a", + "End": "25864402c7334b308241d90ffcc8bc69", + "Id": "54efda75a43f40e4b2c795066575fd69", + "IsHidden": "False" + }, + { + "Start": "28cccb80713c4f2896266393439eeff0", + "End": "d6aefe289f5c490aab4785158708d9dd", + "Id": "ca6d108e77294ae581bd60d6c66b9951", + "IsHidden": "False" + }, + { + "Start": "df94bfa350bb47d598d329bf5e522475", + "End": "2979154d5b0e44ab8e8a079d4098b309", + "Id": "13d2182a9eca42dc9299657bb975a85d", + "IsHidden": "False" + }, + { + "Start": "0d90b25141cc4e29b87199a507f51d52", + "End": "13bcd82434f049f8a53ba98a48b5d4d4", + "Id": "951c1d025d98413b8e522a39d946d5f0", + "IsHidden": "False" + }, + { + "Start": "58e16ac7422c4f6ba3c5f102ab56a6fc", + "End": "ac7ed336a8ff4252818459e3db2069c3", + "Id": "3b8c6e3fdba146bfa7e50f3d1933f6bf", + "IsHidden": "False" + }, + { + "Start": "2443dce540c34d2fa018bf3c67fd5ea4", + "End": "3ea5b61932504fe9a914dc474d805893", + "Id": "be1069d000ea416ea0e45298f2ec6956", + "IsHidden": "False" + }, + { + "Start": "e32e4586726c4f8d95521ba430874fd8", + "End": "faeb3b0b46af4a20ad680412d887f00e", + "Id": "3f47593c9d124e0284f5d14de5dfbecf", + "IsHidden": "False" + }, + { + "Start": "4709f5da22fc4775b242b7a127ff65e9", + "End": "d198e395cca743cebaca3904bd1dfeeb", + "Id": "a222876f8b874492a653eabaa5f8c2c3", + "IsHidden": "False" + }, + { + "Start": "c58539de1671474f8a5527a3e6aa396b", + "End": "665881d6d7c140a681e8f0e92c93e9eb", + "Id": "24232bd77533422fb33a23c3377f4240", + "IsHidden": "False" + }, + { + "Start": "170138bfa27b47638cfe3a2382279a46", + "End": "fd9effa515174d7e9a0b17cf6c6f9e7c", + "Id": "8af256f67cbb4f95bf126cb8d409ed92", + "IsHidden": "False" + }, + { + "Start": "b46ea472052b4d43b1d0755150170af6", + "End": "14ed2121d71b4c60aa9df46888723706", + "Id": "244948dc2f61432599b9f07dea7b3e62", + "IsHidden": "False" + }, + { + "Start": "32896a7b4f1c4af1958761023615d0af", + "End": "fa7fb4b459614ee9b3af3078f113bf51", + "Id": "907761d457d64b04b807c53af5233587", + "IsHidden": "False" + }, + { + "Start": "32896a7b4f1c4af1958761023615d0af", + "End": "5266e4b3f8484e14b7343e4cca1e9314", + "Id": "8f908a31b0be46198355ac7d4347a572", + "IsHidden": "False" + }, + { + "Start": "7531b2d2a1ef49a6b4407aea0b623f1d", + "End": "af7a3302e74a4b9ea4fa18a703f5d3a2", + "Id": "49e3f3e0a90e4c38bb3ebd45180a2d1b", + "IsHidden": "False" + }, + { + "Start": "54e717af3a114f67aa330385f8b86fb5", + "End": "0435f4df2c804a13a4383bc39d1baa64", + "Id": "ab5672977da34a33999a32601a0a9257", + "IsHidden": "False" + }, + { + "Start": "8279a90c140246d8aa2e4546039c26b4", + "End": "8125a300f54f4b529e0f7c176da963b4", + "Id": "226c8f0b0835450e911c6ca386bf1a39", + "IsHidden": "False" + }, + { + "Start": "f934e2e96fcb497d80f5836f1278ec71", + "End": "a1574f3424eb413695c75d1d70115986", + "Id": "6866431d3137404daa1d434a8ece5bb5", + "IsHidden": "False" + }, + { + "Start": "541b4a6e37ba43ed96c1ee41d4f4744b", + "End": "651d179c586b495fa1f45bf955e31704", + "Id": "dfbd9c892e18406f8a64f11b7ce82974", + "IsHidden": "False" + }, + { + "Start": "53cd967f5b3444dc9b0451d3dd431780", + "End": "b15db67ce9f24910bfb8b92656be4e2c", + "Id": "f8a2ab070d15461f846682242cbfbe2c", + "IsHidden": "False" + }, + { + "Start": "05a66865192f421c83c749cd92055c71", + "End": "0bce6e6b002f465fb39a4ca957926592", + "Id": "f0018d389fcc48e7ba9a74912b397d02", + "IsHidden": "False" + }, + { + "Start": "05a66865192f421c83c749cd92055c71", + "End": "b34abfdea8304687b638789496ed8929", + "Id": "ca537da601594d3dafe08167704e3df5", + "IsHidden": "False" + }, + { + "Start": "b538cd1451744905a661eff47f499ff6", + "End": "3073d96db5114f15a342c27bc232fa19", + "Id": "eb5286d1cd2344468145eee6c74ff894", + "IsHidden": "False" + }, + { + "Start": "dd7733c3b6f9448b9642f88eee522382", + "End": "2c213df1b8b44004af75af5b1b255cf5", + "Id": "2a7c7961acdb40a5b8891571d6fea43d", + "IsHidden": "False" + }, + { + "Start": "0105f0d8a4024812b71aabd1a16e4e23", + "End": "fc3a4db4d2bc4d15864922e6893f8ba0", + "Id": "cd7b0547f0954f12b5edfe1210ead2cd", + "IsHidden": "False" + }, + { + "Start": "51678ed27c2c4ac8904bd9c0d6a814f4", + "End": "ce1c9d33e42f4a51a535e2257eb6302f", + "Id": "6b89311b213c407f857b3f30fd104a9b", + "IsHidden": "False" + }, + { + "Start": "f62fcfd33a154d3fb00770ce0731c8b6", + "End": "d56c6cb8d08f43ea9da89e2f90a8231d", + "Id": "efb23aca5d5c4e4eb4ef65f56445410b", + "IsHidden": "False" + }, + { + "Start": "673ff649e15a4427bfe73d477ee119cc", + "End": "4461a2ba15ac4000b659a67ade469aa3", + "Id": "69e7bdbaffb341d28507c98275cfe3e9", + "IsHidden": "False" + }, + { + "Start": "c4ff56ce1dfe4f6785bd8e92a0075e21", + "End": "c54858faf2384c5d9089433616e2dfda", + "Id": "4dd1056b58fe4dffa4b0bd84ef6a4e1e", + "IsHidden": "False" + }, + { + "Start": "42132bbba4d24efb86d4101fb01ee461", + "End": "1628d37354c14119826ce6ed5508d5b8", + "Id": "0d90bec441bf467285d642bdc710cc7d", + "IsHidden": "False" + }, + { + "Start": "ecaa6fc0ebf74d049066435128f5eebd", + "End": "2e41137a17674ee8849b14924d722fc7", + "Id": "f46d7d58581d483589c6c00edf58c03c", + "IsHidden": "False" + }, + { + "Start": "ecaa6fc0ebf74d049066435128f5eebd", + "End": "f6cae31ee3d0420e87d8bfad67ad6bf6", + "Id": "56cbfdb088804e3bbc357c49fdab67e4", + "IsHidden": "False" + }, + { + "Start": "b920960d78b84e6396cbd391b1fdc674", + "End": "bafbebe98d264bb5a66424f6594d68ae", + "Id": "375c1bad7e1c4938b975b6d5f4ea70d8", + "IsHidden": "False" + }, + { + "Start": "4e45960f34e84d3695dd2a0c76abe267", + "End": "fce5c31adb61498c8006af4a66cc71aa", + "Id": "b54d10526ffa4d1f8dff0fdf964d2651", + "IsHidden": "False" + }, + { + "Start": "4e45960f34e84d3695dd2a0c76abe267", + "End": "bf53ceb5ca39499f92f620567a28959b", + "Id": "1a86b6a4968e48d0829002ff243c7241", + "IsHidden": "False" + }, + { + "Start": "62cd6f4f022c488bb851d6fbdbf9bdb6", + "End": "ef9fe165fa9747f49ddf81655099ade1", + "Id": "4e44e43571f04f77b9e58413484f236f", + "IsHidden": "False" + }, + { + "Start": "62cd6f4f022c488bb851d6fbdbf9bdb6", + "End": "699717ed95f4411ea45301821d25571d", + "Id": "9cd6ab6a8e354e668b03fdba759149df", + "IsHidden": "False" + }, + { + "Start": "a99af9869fa74a5a989b004fc4a06d7c", + "End": "319523068d43403ab70952f907928fe9", + "Id": "a6df64e1256843458c58b1b5527cc258", + "IsHidden": "False" + }, + { + "Start": "8865035268d845df945bf41040ec9a01", + "End": "36ecc4584c3740e7a9f23064880361c9", + "Id": "6f5cdfde17f948c5ba6045864379b9e2", + "IsHidden": "False" + }, + { + "Start": "1f5bdcdf7999488fb7fe7e67403bf463", + "End": "3900257f07fb4a5b8a60b831ee7b2083", + "Id": "fb050920268e431fa6e6ea09e7296fb2", + "IsHidden": "False" + } + ], + "Dependencies": [], + "NodeLibraryDependencies": [], + "Thumbnail": "", + "GraphDocumentationURL": null, + "ExtensionWorkspaceData": [ + { + "ExtensionGuid": "28992e1d-abb9-417f-8b1b-05e053bee670", + "Name": "Properties", + "Version": "3.0", + "Data": {} + } + ], + "Author": "None provided", + "Linting": { + "activeLinter": "None", + "activeLinterId": "7b75fb44-43fd-4631-a878-29f4d5d8399a", + "warningCount": 0, + "errorCount": 0 + }, + "Bindings": [], + "View": { + "Dynamo": { + "ScaleFactor": 1.0, + "HasRunWithoutCrash": true, + "IsVisibleInDynamoLibrary": true, + "Version": "3.0.0.5795", + "RunType": "Automatic", + "RunPeriod": "1000" + }, + "Camera": { + "Name": "_Background Preview", + "EyeX": -9.680377006530762, + "EyeY": 2.726961612701416, + "EyeZ": -6.093514442443848, + "LookX": 16.65268898010254, + "LookY": -1.1314377784729004, + "LookZ": -1.0361356735229492, + "UpX": -0.14752399921417236, + "UpY": 0.9890159368515015, + "UpZ": 0.009179282002151012 + }, + "ConnectorPins": [], + "NodeViews": [ + { + "Id": "23e5b514a36249048745c167e4c33d47", + "Name": "NurbsCurve.ByControlPoints", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 5573.3045955441885, + "Y": -1142.6240821133235 + }, + { + "Id": "07c42e8f746d40a58977b693183b62ba", + "Name": "NurbsCurve.ByControlPoints", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 5575.780807537262, + "Y": -993.8899538220057 + }, + { + "Id": "fcead143b1b84ec9807726fb04256ccb", + "Name": "List.Sort", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": false, + "X": 3785.9633996231605, + "Y": -2427.3771948948342 + }, + { + "Id": "c35772f3680244fd93263ae615d35f73", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": false, + "X": 2710.9633996231605, + "Y": -2507.7221948948345 + }, + { + "Id": "0bfd6bad96f4465fa5aec008434d8a41", + "Name": "List.Sort", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": false, + "X": 3785.9633996231605, + "Y": -2587.3771948948342 + }, + { + "Id": "599cf7949a95417d868599ab0dfccb39", + "Name": "Point.ByCoordinates", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 4061.9633996231605, + "Y": -2524.3771948948342 + }, + { + "Id": "83aee02d0dc142d38dabcc072c57c84e", + "Name": "NurbsCurve.ByPoints", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 4386.4633996231605, + "Y": -2524.3771948948342 + }, + { + "Id": "d3461632a6f24893a3725f8a3e73c1ee", + "Name": "Formula", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 3284.9633996231605, + "Y": -2587.5496948948344 + }, + { + "Id": "6b18011e0520414085060eaedcf86d76", + "Name": "Formula", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 3284.9633996231605, + "Y": -2427.5496948948344 + }, + { + "Id": "105dd5eeef1944bf952668c8600cdf49", + "Name": "NurbsCurve.ByControlPointsWeightsKnots", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 5433.4633996231605, + "Y": -2416.3771948948342 + }, + { + "Id": "32cfeb35cba546c79062867b23b505d9", + "Name": "NurbsCurve.Weights", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 4720.9633996231605, + "Y": -2524.3771948948342 + }, + { + "Id": "de2d3bb7b03f4f2782b602f895a01247", + "Name": "NurbsCurve.Knots", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 5066.9633996231605, + "Y": -2259.3771948948333 + }, + { + "Id": "62d1334cb7da46d2975091d620200f7e", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 5066.9633996231605, + "Y": -2111.549694894834 + }, + { + "Id": "bbe8fec901b64d149cb9156d0556e616", + "Name": "List.ReplaceItemAtIndex", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 5066.9633996231605, + "Y": -2471.3771948948342 + }, + { + "Id": "3be12dbff3c941f98ac72023af28b146", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 4720.9633996231605, + "Y": -2375.7221948948345 + }, + { + "Id": "3dc22657ca0f4eeb9449cf9aec119b86", + "Name": "NurbsCurve.ControlPoints", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 5066.9633996231605, + "Y": -2619.3771948948342 + }, + { + "Id": "a7e1829354ec4939a1cec95f4ab26d43", + "Name": "Math.RandomList", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2965.797097248868, + "Y": -2629.256228882212 + }, + { + "Id": "0409e0b7fbc14d3683d6cf5b6d9be8b8", + "Name": "Math.RandomList", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2965.408464062556, + "Y": -2393.415874074295 + }, + { + "Id": "e69bca493ad34998a347b0094b584c33", + "Name": "List Create", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 6248.675037399214, + "Y": -2191.8522757604073 + }, + { + "Id": "335f21038af042dba249f5e6195a9d1a", + "Name": "Data.StringifyJSON", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 6577.42279959937, + "Y": -2118.8385159766767 + }, + { + "Id": "825ffe28516a4d5db19107b7fd01b243", + "Name": "Data.ParseJSON", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 6895.833884905956, + "Y": -2118.8385159766767 + }, + { + "Id": "05f9754e77784c75b4e9322a5cb0456d", + "Name": "Geometry.IsAlmostEqualTo", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 7376.9483518199295, + "Y": -2194.848184594698 + }, + { + "Id": "ae53e03600a44d68994b48feb5c844d4", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": false, + "X": 4138.817498679073, + "Y": -1752.598207541217 + }, + { + "Id": "aade866649eb472cbd257dbb7c0faaad", + "Name": "Boolean", + "IsSetAsInput": true, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": false, + "X": 5242.817498679073, + "Y": -1431.2532075412164 + }, + { + "Id": "1e190401c51147488d2cdcf4c52925db", + "Name": "Point.ByCoordinates", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 5242.817498679073, + "Y": -1769.2532075412169 + }, + { + "Id": "a05123974dd848a2989f9eb376325845", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": false, + "X": 5242.817498679073, + "Y": -1591.425707541217 + }, + { + "Id": "76f23cdfae5248daa633a8bfc64b5b5c", + "Name": "List.Sort", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": false, + "X": 4966.817498679073, + "Y": -1672.2532075412169 + }, + { + "Id": "fde095a845754edcb4afe6ba25d3f667", + "Name": "List.Sort", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": false, + "X": 4966.817498679073, + "Y": -1832.2532075412169 + }, + { + "Id": "4efe91329fcd4f7d99f00a3bd8f1a40d", + "Name": "NurbsCurve.ByControlPoints", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 5567.317498679073, + "Y": -1631.2532075412169 + }, + { + "Id": "81bb733acba9410c889f2ba2a4dd6c04", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 4712.817498679073, + "Y": -1832.425707541217 + }, + { + "Id": "7069c47097b44fa5ab93f125ddec42c4", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 4712.817498679073, + "Y": -1672.425707541217 + }, + { + "Id": "4252bb8edd9d4e718edc7b2792ef4505", + "Name": "Math.RandomList", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 4410.494620114582, + "Y": -1831.869895899769 + }, + { + "Id": "1c6ce174cc814058b2c5e038f7ba0a03", + "Name": "Math.RandomList", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 4411.7779634947365, + "Y": -1586.8336699762874 + }, + { + "Id": "5f12fbe900c84ce6971b8ab3d5098a91", + "Name": "NurbsCurve.ByControlPoints", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 5572.903212739066, + "Y": -1413.2145679363869 + }, + { + "Id": "6e8e089b33154239bff6533905324e40", + "Name": "==", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 7480.554593969138, + "Y": -1921.8646481509013 + }, + { + "Id": "fcec1324535e4462b5b4ae1879b6bf22", + "Name": "Object.Type", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 7172.502955687624, + "Y": -1839.9722832270986 + }, + { + "Id": "a7c310ea86ef4bd0986bb48d43b8ae59", + "Name": "Object.Type", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 7176.082277365458, + "Y": -1985.2230352351507 + }, + { + "Id": "5637fc5f491442929861b146a3bdd414", + "Name": "List Create", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 7823.798960622415, + "Y": -2083.166628036912 + }, + { + "Id": "3c44f22d1314423ab40dc1b654cdf0c4", + "Name": "List.Flatten", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 8075.154570481482, + "Y": -2081.968258656252 + }, + { + "Id": "ae8ae5b06ddc463fbcf6af3742bf1dd2", + "Name": "Data.ParseJSON", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 7107.376698863101, + "Y": 2067.1256657967324 + }, + { + "Id": "f888a56b80d246a69e33165b8403ced8", + "Name": "Geometry.IsAlmostEqualTo", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 7382.347103223816, + "Y": 1926.11241699265 + }, + { + "Id": "a6c7caf73f874fd890814ddaeee394f0", + "Name": "Data.StringifyJSON", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 6815.652831860372, + "Y": 2066.9866504329057 + }, + { + "Id": "2bfab86e58fc41c3be2a4f630a722fa2", + "Name": "Geometry.Transform", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 6407.608703967642, + "Y": 1809.4883926255682 + }, + { + "Id": "74c700a7f3e74c9d996d14b82203005a", + "Name": "CoordinateSystem.Scale", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 5984.029316080043, + "Y": 2037.0649446258951 + }, + { + "Id": "2dc2559439e84d509dc8bfa4ba8b8f4e", + "Name": "CoordinateSystem.ByOrigin", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 6040.133630754973, + "Y": 1844.9066951298594 + }, + { + "Id": "cfdaa3f989a84ca28fab8bb3d700b4d9", + "Name": "Data.ParseJSON", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 7074.555486233736, + "Y": 819.2317845277673 + }, + { + "Id": "5c5f540b487e455cb8a21e0fae9bed1e", + "Name": "Data.StringifyJSON", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 6782.831619231006, + "Y": 819.0927691639406 + }, + { + "Id": "6e264e57307944bebc045c3a11baed92", + "Name": "Geometry.IsAlmostEqualTo", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 7349.525890594449, + "Y": 678.2185357236847 + }, + { + "Id": "917e6d164ab14e2796025482801fac08", + "Name": "Plane.XZ", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 6100.678607583141, + "Y": 593.8494128123127 + }, + { + "Id": "4286e3b45d0a4e66816a1a121909827c", + "Name": "Geometry.Mirror", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 6341.226555501298, + "Y": 509.0996810950262 + }, + { + "Id": "57be41f9549447e2872b89bd584e2fe0", + "Name": "CoordinateSystem.Rotate", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 5456.742169143837, + "Y": 2132.064944625895 + }, + { + "Id": "d342013f18c244dcadd191f40d792f3d", + "Name": "Number", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 5504.110474146319, + "Y": 1976.0649446258951 + }, + { + "Id": "aa432b46492a490393f49be7b375535e", + "Name": "CoordinateSystem.ByOrigin", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 5078.242169143837, + "Y": 1865.0649446258951 + }, + { + "Id": "4dfc547d352b4673881db78891dbce50", + "Name": "Point.ByCoordinates", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 5078.242169143837, + "Y": 2077.064944625895 + }, + { + "Id": "9c37d9515bbf41128e6027dac11174de", + "Name": "Vector.ByCoordinates", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 5078.242169143837, + "Y": 2289.064944625895 + }, + { + "Id": "18fd5f3bd9f946e4b2e4a9ea16003f0e", + "Name": "Number", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 5078.242169143837, + "Y": 2501.064944625895 + }, + { + "Id": "e6bc534b15cd4005b7b86ac2da3c2c7b", + "Name": "Data.StringifyJSON", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 6755.6831788535565, + "Y": -268.81154154207525 + }, + { + "Id": "64f2e1a7c4ac469881b19f5022fd19b0", + "Name": "Data.ParseJSON", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 7080.662187617822, + "Y": -268.331800044577 + }, + { + "Id": "d6e5014acdb04575bffd9b032bf58eea", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 4824.242169143837, + "Y": 1900.202444625895 + }, + { + "Id": "320d895b7c3b48f8ac998d3101c682d5", + "Name": "Curve.Reverse", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 6300.942412386643, + "Y": -488.3880068639737 + }, + { + "Id": "5fe4da4a73d64748a0b07fca04caeaf8", + "Name": "Geometry.IsAlmostEqualTo", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 7463.268131969446, + "Y": -619.4666837990148 + }, + { + "Id": "f8ce5418c4f5491f9f37ff7e9da3b6be", + "Name": "List Create", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 8553.84970012988, + "Y": -1716.152721352819 + }, + { + "Id": "5205ffe621084a12bb409ba8ed819d5e", + "Name": "List.Flatten", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 8860.376910836438, + "Y": -1719.5758072354895 + }, + { + "Id": "423356e2c8f84e00aa6c50e9bdb72c98", + "Name": "List.AllTrue", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 9141.274525831914, + "Y": -1718.407497225934 + } + ], + "Annotations": [ + { + "Id": "5f5c77e5ecad4fcb858ea44bc8c43fc0", + "Title": "Autodesk.DesignScript.Geometry.NurbsCurve.ByControlPointsWeightsKnots", + "DescriptionText": "Inserted Dynamo graph", + "IsExpanded": true, + "WidthAdjustment": 0.0, + "HeightAdjustment": 0.0, + "Nodes": [ + "fcead143b1b84ec9807726fb04256ccb", + "c35772f3680244fd93263ae615d35f73", + "0bfd6bad96f4465fa5aec008434d8a41", + "599cf7949a95417d868599ab0dfccb39", + "83aee02d0dc142d38dabcc072c57c84e", + "d3461632a6f24893a3725f8a3e73c1ee", + "6b18011e0520414085060eaedcf86d76", + "105dd5eeef1944bf952668c8600cdf49", + "32cfeb35cba546c79062867b23b505d9", + "de2d3bb7b03f4f2782b602f895a01247", + "62d1334cb7da46d2975091d620200f7e", + "bbe8fec901b64d149cb9156d0556e616", + "3be12dbff3c941f98ac72023af28b146", + "3dc22657ca0f4eeb9449cf9aec119b86", + "a7e1829354ec4939a1cec95f4ab26d43", + "0409e0b7fbc14d3683d6cf5b6d9be8b8" + ], + "HasNestedGroups": false, + "Left": 2700.9633996231605, + "Top": -2702.256228882212, + "Width": 3133.0, + "Height": 722.706533987378, + "FontSize": 36.0, + "GroupStyleId": "00000000-0000-0000-0000-000000000000", + "InitialTop": -2629.256228882212, + "InitialHeight": 662.706533987378, + "TextblockHeight": 63.0, + "Background": "#FFA4E1FF" + }, + { + "Id": "7566b063cfd54a9da75c72ba8e1cb316", + "Title": "Autodesk.DesignScript.Geometry.NurbsCurve.ByControlPoints(points, degree, closeCurve)", + "DescriptionText": "Inserted Dynamo graph", + "IsExpanded": true, + "WidthAdjustment": 0.0, + "HeightAdjustment": 0.0, + "Nodes": [ + "ae53e03600a44d68994b48feb5c844d4", + "aade866649eb472cbd257dbb7c0faaad", + "1e190401c51147488d2cdcf4c52925db", + "a05123974dd848a2989f9eb376325845", + "76f23cdfae5248daa633a8bfc64b5b5c", + "fde095a845754edcb4afe6ba25d3f667", + "4efe91329fcd4f7d99f00a3bd8f1a40d", + "81bb733acba9410c889f2ba2a4dd6c04", + "7069c47097b44fa5ab93f125ddec42c4", + "4252bb8edd9d4e718edc7b2792ef4505", + "1c6ce174cc814058b2c5e038f7ba0a03", + "5f12fbe900c84ce6971b8ab3d5098a91" + ], + "HasNestedGroups": false, + "Left": 4128.817498679073, + "Top": -1905.425707541217, + "Width": 1739.5857140599928, + "Height": 689.2111396048301, + "FontSize": 36.0, + "GroupStyleId": "00000000-0000-0000-0000-000000000000", + "InitialTop": -1832.425707541217, + "InitialHeight": 564.2111396048301, + "TextblockHeight": 63.0, + "Background": "#FFA4E1FF" + }, + { + "Id": "b247e87dddd34b1aa50b8167836c3049", + "Title": "All True", + "DescriptionText": "", + "IsExpanded": true, + "WidthAdjustment": 0.0, + "HeightAdjustment": 0.0, + "Nodes": [ + "423356e2c8f84e00aa6c50e9bdb72c98" + ], + "HasNestedGroups": false, + "Left": 9131.274525831914, + "Top": -1791.407497225934, + "Width": 196.0, + "Height": 205.0, + "FontSize": 36.0, + "GroupStyleId": "00000000-0000-0000-0000-000000000000", + "InitialTop": -1718.407497225934, + "InitialHeight": 145.0, + "TextblockHeight": 63.0, + "Background": "#FFC1D676" + } + ], + "X": -66.42686831709244, + "Y": 729.1372455163548, + "Zoom": 0.0707573388633884 + } +} \ No newline at end of file diff --git a/test/core/json/Curve_PolyCurve_JSONParsing.dyn b/test/core/json/Curve_PolyCurve_JSONParsing.dyn new file mode 100644 index 00000000000..7c0c46e890e --- /dev/null +++ b/test/core/json/Curve_PolyCurve_JSONParsing.dyn @@ -0,0 +1,3366 @@ +{ + "Uuid": "4b802105-0bd8-4d97-b885-450c0e387121", + "IsCustomNode": false, + "Description": null, + "Name": "Curve_PolyCurve_JSONParsing", + "ElementResolver": { + "ResolutionMap": { + "DSCore.Object": { + "Key": "DSCore.Object", + "Value": "DSCoreNodes.dll" + }, + "DSCore.Data": { + "Key": "DSCore.Data", + "Value": "DSCoreNodes.dll" + }, + "DesignScript.Builtin.Dictionary": { + "Key": "DesignScript.Builtin.Dictionary", + "Value": "DesignScriptBuiltin.dll" + }, + "Color": { + "Key": "DSCore.Color", + "Value": "DSCoreNodes.dll" + }, + "DSCore.DateTime.Now": { + "Key": "DSCore.DateTime", + "Value": "DSCoreNodes.dll" + }, + "DSCore.DateTime": { + "Key": "DSCore.DateTime", + "Value": "DSCoreNodes.dll" + }, + "Point": { + "Key": "Autodesk.DesignScript.Geometry.Point", + "Value": "ProtoGeometry.dll" + } + } + }, + "Inputs": [], + "Outputs": [], + "Nodes": [ + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "335f21038af042dba249f5e6195a9d1a", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "3ce287c86747451ab0b6d48b1c99d9eb", + "Name": "values", + "Description": "A List of values\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "eeb96a01b2e34a17a501371ae3de96ae", + "Name": "json", + "Description": "A JSON string where primitive types (e.g. double, int, boolean), Lists, and Dictionary's will be turned into the associated JSON type.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Data.StringifyJSON@var[]..[]", + "Replication": "Auto", + "Description": "Stringify converts an arbitrary value or a list of arbitrary values to JSON. Replication can be used to apply the operation over a list, producing a list of JSON strings.\n\nData.StringifyJSON (values: var[]..[]): string" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "825ffe28516a4d5db19107b7fd01b243", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "045ae108a2af4f8ca27b2a5a5fc1ddfa", + "Name": "json", + "Description": "A JSON string\n\nstring", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "322b12dcf4a647beb3d3b744fba7d66e", + "Name": "result", + "Description": "The result type depends on the content of the input string. The result type can be a primitive value (e.g. string, boolean, double), a List, or a Dictionary.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Data.ParseJSON@string", + "Replication": "Auto", + "Description": "Parse converts an arbitrary JSON string to a value. It is the opposite of JSON.Stringify.\n\nData.ParseJSON (json: string): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "05f9754e77784c75b4e9322a5cb0456d", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "69270cf9d7f148c5805c7c5f17904245", + "Name": "geometry", + "Description": "Autodesk.DesignScript.Geometry.Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "a4290fc45aec4f8ab6e166ef4e3d16df", + "Name": "other", + "Description": "Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "fe676c5a63c1403faff0307bdeb9dd6f", + "Name": "bool", + "Description": "bool", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Geometry.IsAlmostEqualTo@Autodesk.DesignScript.Geometry.Geometry", + "Replication": "Auto", + "Description": "Check if the two objects have the same representational geometry or numerical values\n\nGeometry.IsAlmostEqualTo (other: Geometry): bool" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "6e8e089b33154239bff6533905324e40", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "3ea5b61932504fe9a914dc474d805893", + "Name": "x", + "Description": "Basic type object to compare (e.g. bool, int, double, string, etc.)\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "ac7ed336a8ff4252818459e3db2069c3", + "Name": "y", + "Description": "Basic type object to compare (e.g. bool, int, double, string, etc.)\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "0d90b25141cc4e29b87199a507f51d52", + "Name": "bool", + "Description": "Result of equality check", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "==@var[]..[],var[]..[]", + "Replication": "Auto", + "Description": "Compares if x and y are equal\n\n== (x: var[]..[], y: var[]..[]): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "fcec1324535e4462b5b4ae1879b6bf22", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "295f50ddf2e74bb980bfbdbf9fbf7238", + "Name": "object", + "Description": "Object to query type\n\nvar", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "58e16ac7422c4f6ba3c5f102ab56a6fc", + "Name": "string", + "Description": "Type of object.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Object.Type@var", + "Replication": "Auto", + "Description": "Returns the type of object represented as string.\n\nObject.Type (object: var): string" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "a7c310ea86ef4bd0986bb48d43b8ae59", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "39d9c9de359942febd818fcc514cc642", + "Name": "object", + "Description": "Object to query type\n\nvar", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "2443dce540c34d2fa018bf3c67fd5ea4", + "Name": "string", + "Description": "Type of object.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Object.Type@var", + "Replication": "Auto", + "Description": "Returns the type of object represented as string.\n\nObject.Type (object: var): string" + }, + { + "ConcreteType": "CoreNodeModels.CreateList, CoreNodeModels", + "VariableInputPorts": true, + "Id": "5637fc5f491442929861b146a3bdd414", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "c815bff476c345d8b05ea6ad1cfbe418", + "Name": "item0", + "Description": "Item Index #0", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "13bcd82434f049f8a53ba98a48b5d4d4", + "Name": "item1", + "Description": "Item Index #1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "e32e4586726c4f8d95521ba430874fd8", + "Name": "list", + "Description": "A list (type: var[]..[])", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Makes a new list from the given inputs" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "3c44f22d1314423ab40dc1b654cdf0c4", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "faeb3b0b46af4a20ad680412d887f00e", + "Name": "list", + "Description": "List to flatten.\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "bf7ff9f02609487c940efc96538f69a0", + "Name": "amount", + "Description": "Layers of list nesting to remove (-1 will remove all list nestings)\n\nint\nDefault value : -1", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "4709f5da22fc4775b242b7a127ff65e9", + "Name": "list", + "Description": "Flattened list by amount", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.List.Flatten@var[]..[],int", + "Replication": "Auto", + "Description": "Flattens a nested list of lists by a certain amount.\n\nList.Flatten (list: var[]..[], amount: int = -1): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "ae8ae5b06ddc463fbcf6af3742bf1dd2", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "14ed2121d71b4c60aa9df46888723706", + "Name": "json", + "Description": "A JSON string\n\nstring", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "c58539de1671474f8a5527a3e6aa396b", + "Name": "result", + "Description": "The result type depends on the content of the input string. The result type can be a primitive value (e.g. string, boolean, double), a List, or a Dictionary.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Data.ParseJSON@string", + "Replication": "Auto", + "Description": "Parse converts an arbitrary JSON string to a value. It is the opposite of JSON.Stringify.\n\nData.ParseJSON (json: string): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "f888a56b80d246a69e33165b8403ced8", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "fa7fb4b459614ee9b3af3078f113bf51", + "Name": "geometry", + "Description": "Autodesk.DesignScript.Geometry.Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "665881d6d7c140a681e8f0e92c93e9eb", + "Name": "other", + "Description": "Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "170138bfa27b47638cfe3a2382279a46", + "Name": "bool", + "Description": "bool", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Geometry.IsAlmostEqualTo@Autodesk.DesignScript.Geometry.Geometry", + "Replication": "Auto", + "Description": "Check if the two objects have the same representational geometry or numerical values\n\nGeometry.IsAlmostEqualTo (other: Geometry): bool" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "a6c7caf73f874fd890814ddaeee394f0", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "5266e4b3f8484e14b7343e4cca1e9314", + "Name": "values", + "Description": "A List of values\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "b46ea472052b4d43b1d0755150170af6", + "Name": "json", + "Description": "A JSON string where primitive types (e.g. double, int, boolean), Lists, and Dictionary's will be turned into the associated JSON type.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Data.StringifyJSON@var[]..[]", + "Replication": "Auto", + "Description": "Stringify converts an arbitrary value or a list of arbitrary values to JSON. Replication can be used to apply the operation over a list, producing a list of JSON strings.\n\nData.StringifyJSON (values: var[]..[]): string" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "2bfab86e58fc41c3be2a4f630a722fa2", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "04db164d5def45efb4b931cebdbe6936", + "Name": "geometry", + "Description": "Autodesk.DesignScript.Geometry.Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "0435f4df2c804a13a4383bc39d1baa64", + "Name": "fromCoordinateSystem", + "Description": "CoordinateSystem", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "af7a3302e74a4b9ea4fa18a703f5d3a2", + "Name": "contextCoordinateSystem", + "Description": "CoordinateSystem", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "32896a7b4f1c4af1958761023615d0af", + "Name": "Geometry", + "Description": "Transformed Geometry.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Geometry.Transform@Autodesk.DesignScript.Geometry.CoordinateSystem,Autodesk.DesignScript.Geometry.CoordinateSystem", + "Replication": "Auto", + "Description": "Transforms this geometry from source CoordinateSystem to a new context CoordinateSystem.\n\nGeometry.Transform (fromCoordinateSystem: CoordinateSystem, contextCoordinateSystem: CoordinateSystem): Geometry" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "74c700a7f3e74c9d996d14b82203005a", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "3073d96db5114f15a342c27bc232fa19", + "Name": "coordinateSystem", + "Description": "Autodesk.DesignScript.Geometry.CoordinateSystem", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "2c213df1b8b44004af75af5b1b255cf5", + "Name": "amount", + "Description": "Amount to scale\n\ndouble\nDefault value : 1", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "7531b2d2a1ef49a6b4407aea0b623f1d", + "Name": "CoordinateSystem", + "Description": "Scaled coordinate system", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.CoordinateSystem.Scale@double", + "Replication": "Auto", + "Description": "Scale uniformly around the origin\n\nCoordinateSystem.Scale (amount: double = 1): CoordinateSystem" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "2dc2559439e84d509dc8bfa4ba8b8f4e", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "1dba63b4d3d64c5eb55cd27b23b4d0c5", + "Name": "x", + "Description": "double\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "b9d29b68d5ae4e378f7f3dabd9ad5eda", + "Name": "y", + "Description": "double\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "54e717af3a114f67aa330385f8b86fb5", + "Name": "CoordinateSystem", + "Description": "CoordinateSystem", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.CoordinateSystem.ByOrigin@double,double", + "Replication": "Auto", + "Description": "Create a CoordinateSystem with origin at X and Y locations, with X and Y Axes set as WCS X and Y Axes. Z defaults to 0.\n\nCoordinateSystem.ByOrigin (x: double = 0, y: double = 0): CoordinateSystem" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "cfdaa3f989a84ca28fab8bb3d700b4d9", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "a1574f3424eb413695c75d1d70115986", + "Name": "json", + "Description": "A JSON string\n\nstring", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "8279a90c140246d8aa2e4546039c26b4", + "Name": "result", + "Description": "The result type depends on the content of the input string. The result type can be a primitive value (e.g. string, boolean, double), a List, or a Dictionary.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Data.ParseJSON@string", + "Replication": "Auto", + "Description": "Parse converts an arbitrary JSON string to a value. It is the opposite of JSON.Stringify.\n\nData.ParseJSON (json: string): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "5c5f540b487e455cb8a21e0fae9bed1e", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "0bce6e6b002f465fb39a4ca957926592", + "Name": "values", + "Description": "A List of values\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "f934e2e96fcb497d80f5836f1278ec71", + "Name": "json", + "Description": "A JSON string where primitive types (e.g. double, int, boolean), Lists, and Dictionary's will be turned into the associated JSON type.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Data.StringifyJSON@var[]..[]", + "Replication": "Auto", + "Description": "Stringify converts an arbitrary value or a list of arbitrary values to JSON. Replication can be used to apply the operation over a list, producing a list of JSON strings.\n\nData.StringifyJSON (values: var[]..[]): string" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "6e264e57307944bebc045c3a11baed92", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "b34abfdea8304687b638789496ed8929", + "Name": "geometry", + "Description": "Autodesk.DesignScript.Geometry.Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "8125a300f54f4b529e0f7c176da963b4", + "Name": "other", + "Description": "Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "541b4a6e37ba43ed96c1ee41d4f4744b", + "Name": "bool", + "Description": "bool", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Geometry.IsAlmostEqualTo@Autodesk.DesignScript.Geometry.Geometry", + "Replication": "Auto", + "Description": "Check if the two objects have the same representational geometry or numerical values\n\nGeometry.IsAlmostEqualTo (other: Geometry): bool" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "917e6d164ab14e2796025482801fac08", + "NodeType": "FunctionNode", + "Inputs": [], + "Outputs": [ + { + "Id": "53cd967f5b3444dc9b0451d3dd431780", + "Name": "Plane", + "Description": "Plane at XZ plane of world", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Plane.XZ", + "Replication": "Auto", + "Description": "Creates a plane in the world XZ plane\n\nPlane.XZ ( ): Plane" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "4286e3b45d0a4e66816a1a121909827c", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "8b6486f2237a4a6ea4fab84ecd13685a", + "Name": "geometry", + "Description": "Autodesk.DesignScript.Geometry.Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "b15db67ce9f24910bfb8b92656be4e2c", + "Name": "mirrorPlane", + "Description": "Plane", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "05a66865192f421c83c749cd92055c71", + "Name": "Geometry", + "Description": "Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Geometry.Mirror@Autodesk.DesignScript.Geometry.Plane", + "Replication": "Auto", + "Description": "Mirror the object across the input Plane\n\nGeometry.Mirror (mirrorPlane: Plane): Geometry" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "57be41f9549447e2872b89bd584e2fe0", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "fc3a4db4d2bc4d15864922e6893f8ba0", + "Name": "coordinateSystem", + "Description": "Autodesk.DesignScript.Geometry.CoordinateSystem", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "ce1c9d33e42f4a51a535e2257eb6302f", + "Name": "origin", + "Description": "Origin point\n\nPoint", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "d56c6cb8d08f43ea9da89e2f90a8231d", + "Name": "axis", + "Description": "Vector axis for rotation\n\nVector", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "4461a2ba15ac4000b659a67ade469aa3", + "Name": "degrees", + "Description": "Degrees to rotate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "b538cd1451744905a661eff47f499ff6", + "Name": "CoordinateSystem", + "Description": "Rotated coordinate system", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.CoordinateSystem.Rotate@Autodesk.DesignScript.Geometry.Point,Autodesk.DesignScript.Geometry.Vector,double", + "Replication": "Auto", + "Description": "Rotates an object around an origin and an axis by a specified degree\n\nCoordinateSystem.Rotate (origin: Point, axis: Vector, degrees: double = 0): CoordinateSystem" + }, + { + "ConcreteType": "CoreNodeModels.Input.DoubleInput, CoreNodeModels", + "NumberType": "Double", + "Id": "d342013f18c244dcadd191f40d792f3d", + "NodeType": "NumberInputNode", + "Inputs": [], + "Outputs": [ + { + "Id": "dd7733c3b6f9448b9642f88eee522382", + "Name": "", + "Description": "Double", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Creates a number", + "InputValue": 2.3 + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "aa432b46492a490393f49be7b375535e", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "2e41137a17674ee8849b14924d722fc7", + "Name": "x", + "Description": "double\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "bafbebe98d264bb5a66424f6594d68ae", + "Name": "y", + "Description": "double\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "fce5c31adb61498c8006af4a66cc71aa", + "Name": "z", + "Description": "double\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "0105f0d8a4024812b71aabd1a16e4e23", + "Name": "CoordinateSystem", + "Description": "CoordinateSystem", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.CoordinateSystem.ByOrigin@double,double,double", + "Replication": "Auto", + "Description": "Create a CoordinateSystem with origin at X, Y, and Z locations, with X and Y Axes set as WCS X and Y Axes.\n\nCoordinateSystem.ByOrigin (x: double = 0, y: double = 0, z: double = 0): CoordinateSystem" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "4dfc547d352b4673881db78891dbce50", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "9b7bacfca62b4bb0acfef3dadebdb0bd", + "Name": "x", + "Description": "X coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "c955aedb3cd942f7bb0eae84d59799a5", + "Name": "y", + "Description": "Y coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "f388883c96c64da1b0fcc8aa565c52a4", + "Name": "z", + "Description": "Z coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "51678ed27c2c4ac8904bd9c0d6a814f4", + "Name": "Point", + "Description": "Point created by coordinates", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Point.ByCoordinates@double,double,double", + "Replication": "Auto", + "Description": "Form a Point given 3 cartesian coordinates\n\nPoint.ByCoordinates (x: double = 0, y: double = 0, z: double = 0): Point" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "9c37d9515bbf41128e6027dac11174de", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "f6cae31ee3d0420e87d8bfad67ad6bf6", + "Name": "x", + "Description": "X coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "bf53ceb5ca39499f92f620567a28959b", + "Name": "y", + "Description": "Y coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "bc61753cc6c14818b6eb23dbf3e30fa7", + "Name": "z", + "Description": "Z coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "f62fcfd33a154d3fb00770ce0731c8b6", + "Name": "Vector", + "Description": "Vector created by coordinates", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Vector.ByCoordinates@double,double,double", + "Replication": "Auto", + "Description": "Form a Vector by 3 Euclidean coordinates\n\nVector.ByCoordinates (x: double = 0, y: double = 0, z: double = 0): Vector" + }, + { + "ConcreteType": "CoreNodeModels.Input.DoubleInput, CoreNodeModels", + "NumberType": "Double", + "Id": "18fd5f3bd9f946e4b2e4a9ea16003f0e", + "NodeType": "NumberInputNode", + "Inputs": [], + "Outputs": [ + { + "Id": "673ff649e15a4427bfe73d477ee119cc", + "Name": "", + "Description": "Double", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Creates a number", + "InputValue": 24.0 + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "e6bc534b15cd4005b7b86ac2da3c2c7b", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "ef9fe165fa9747f49ddf81655099ade1", + "Name": "values", + "Description": "A List of values\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "c4ff56ce1dfe4f6785bd8e92a0075e21", + "Name": "json", + "Description": "A JSON string where primitive types (e.g. double, int, boolean), Lists, and Dictionary's will be turned into the associated JSON type.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Data.StringifyJSON@var[]..[]", + "Replication": "Auto", + "Description": "Stringify converts an arbitrary value or a list of arbitrary values to JSON. Replication can be used to apply the operation over a list, producing a list of JSON strings.\n\nData.StringifyJSON (values: var[]..[]): string" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "64f2e1a7c4ac469881b19f5022fd19b0", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "c54858faf2384c5d9089433616e2dfda", + "Name": "json", + "Description": "A JSON string\n\nstring", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "42132bbba4d24efb86d4101fb01ee461", + "Name": "result", + "Description": "The result type depends on the content of the input string. The result type can be a primitive value (e.g. string, boolean, double), a List, or a Dictionary.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Data.ParseJSON@string", + "Replication": "Auto", + "Description": "Parse converts an arbitrary JSON string to a value. It is the opposite of JSON.Stringify.\n\nData.ParseJSON (json: string): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "d6e5014acdb04575bffd9b032bf58eea", + "NodeType": "CodeBlockNode", + "Inputs": [], + "Outputs": [ + { + "Id": "ecaa6fc0ebf74d049066435128f5eebd", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "b920960d78b84e6396cbd391b1fdc674", + "Name": "", + "Description": "Value of expression at line 2", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "4e45960f34e84d3695dd2a0c76abe267", + "Name": "", + "Description": "Value of expression at line 3", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "2;\n3;\n4;" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "320d895b7c3b48f8ac998d3101c682d5", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "b7a42d5bdd1a4a8ea20fcf7d6d4d3511", + "Name": "curve", + "Description": "Autodesk.DesignScript.Geometry.Curve", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "62cd6f4f022c488bb851d6fbdbf9bdb6", + "Name": "Curve", + "Description": "A new Curve with the opposite direction", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Curve.Reverse", + "Replication": "Auto", + "Description": "Reverse the direction of the curve\n\nCurve.Reverse ( ): Curve" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "5fe4da4a73d64748a0b07fca04caeaf8", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "699717ed95f4411ea45301821d25571d", + "Name": "geometry", + "Description": "Autodesk.DesignScript.Geometry.Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "1628d37354c14119826ce6ed5508d5b8", + "Name": "other", + "Description": "Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "a99af9869fa74a5a989b004fc4a06d7c", + "Name": "bool", + "Description": "bool", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Geometry.IsAlmostEqualTo@Autodesk.DesignScript.Geometry.Geometry", + "Replication": "Auto", + "Description": "Check if the two objects have the same representational geometry or numerical values\n\nGeometry.IsAlmostEqualTo (other: Geometry): bool" + }, + { + "ConcreteType": "CoreNodeModels.CreateList, CoreNodeModels", + "VariableInputPorts": true, + "Id": "f8ce5418c4f5491f9f37ff7e9da3b6be", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "d198e395cca743cebaca3904bd1dfeeb", + "Name": "item0", + "Description": "Item Index #0", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "319523068d43403ab70952f907928fe9", + "Name": "item1", + "Description": "Item Index #1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "651d179c586b495fa1f45bf955e31704", + "Name": "item2", + "Description": "Item Index #2", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "fd9effa515174d7e9a0b17cf6c6f9e7c", + "Name": "item3", + "Description": "Item Index #3", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "8865035268d845df945bf41040ec9a01", + "Name": "list", + "Description": "A list (type: var[]..[])", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Makes a new list from the given inputs" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "5205ffe621084a12bb409ba8ed819d5e", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "36ecc4584c3740e7a9f23064880361c9", + "Name": "list", + "Description": "List to flatten.\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "ab5e5650a5024445a6214247ae4a4ddf", + "Name": "amount", + "Description": "Layers of list nesting to remove (-1 will remove all list nestings)\n\nint\nDefault value : -1", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "1f5bdcdf7999488fb7fe7e67403bf463", + "Name": "list", + "Description": "Flattened list by amount", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.List.Flatten@var[]..[],int", + "Replication": "Auto", + "Description": "Flattens a nested list of lists by a certain amount.\n\nList.Flatten (list: var[]..[], amount: int = -1): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "423356e2c8f84e00aa6c50e9bdb72c98", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "3900257f07fb4a5b8a60b831ee7b2083", + "Name": "list", + "Description": "List to be checked on whether all items are true.\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "c8209cd063a146ffaba379787de80ef9", + "Name": "bool", + "Description": "True if all items from list are true, false if one or more items is not true", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.List.AllTrue@var[]..[]", + "Replication": "Auto", + "Description": "Determines if all items in the given list is a boolean and has a true value.\n\nList.AllTrue (list: var[]..[]): bool" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "0409e0b7fbc14d3683d6cf5b6d9be8b8", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "b2b0fe017dcb436ab272fe7be291e791", + "Name": "amount", + "Description": "Amount of random numbers the result list will contain.\n\nint", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "eb08f6e6cbca403d8b0616cd2480b73a", + "Name": "value1", + "Description": "Lower end of the range for the random number.\n\ndouble", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "8529fd26c6e1477fb77bc633ff03e9c4", + "Name": "value2", + "Description": "Higher end of the range for the random number.\n\ndouble", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "0ee0f3d8eb3249a3894ea5a8f3488283", + "Name": "seed", + "Description": "Seed value for the random number generator.\n\nint", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "8f72340336fa4c328132e4f9d749f787", + "Name": "number", + "Description": "List of random numbers in the range [lower_number, higher_number).", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Math.RandomList@int,double,double,int", + "Replication": "Auto", + "Description": "Produces a list containing the given amount of random doubles in the defined range of [lower_number, higher_number) based on an initial seed value.\n\nMath.RandomList (amount: int, value1: double, value2: double, seed: int): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "a7e1829354ec4939a1cec95f4ab26d43", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "334a0540f0d843fbbdfc396e3c3de169", + "Name": "amount", + "Description": "Amount of random numbers the result list will contain.\n\nint", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "b752362dc3d74480b466a60988d969d1", + "Name": "value1", + "Description": "Lower end of the range for the random number.\n\ndouble", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "4fddd89a48594d12979c309b16aaa4fd", + "Name": "value2", + "Description": "Higher end of the range for the random number.\n\ndouble", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "59e2e0083930429780d6c09ef0112179", + "Name": "seed", + "Description": "Seed value for the random number generator.\n\nint", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "2656af76d6634a44b5577891606b0e7d", + "Name": "number", + "Description": "List of random numbers in the range [lower_number, higher_number).", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Math.RandomList@int,double,double,int", + "Replication": "Auto", + "Description": "Produces a list containing the given amount of random doubles in the defined range of [lower_number, higher_number) based on an initial seed value.\n\nMath.RandomList (amount: int, value1: double, value2: double, seed: int): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "599cf7949a95417d868599ab0dfccb39", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "eeb745274c494fe199b96b614a1b72a8", + "Name": "x", + "Description": "X coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "e240e93151ab4d61a0528511ed787393", + "Name": "y", + "Description": "Y coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "f8020753bd244e70b147876ab696d1db", + "Name": "Point", + "Description": "Point created by coordinates", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Point.ByCoordinates@double,double", + "Replication": "Auto", + "Description": "Form a Point in the XY plane given two 2 cartesian coordinates. The Z component is 0.\n\nPoint.ByCoordinates (x: double = 0, y: double = 0): Point" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "0bfd6bad96f4465fa5aec008434d8a41", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "2f9c1535610748328a139be25dbad988", + "Name": "list", + "Description": "List of items to be sorted\n\nvar[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "ba29fc9470bc440b9c7729f70e734b99", + "Name": "int[]", + "Description": "The indices of the items in the sorted list", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.List.Sort@var[]", + "Replication": "Auto", + "Description": "Sorts a list by the items and return their indices.\n\nList.Sort (list: var[]): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "c35772f3680244fd93263ae615d35f73", + "NodeType": "CodeBlockNode", + "Inputs": [], + "Outputs": [ + { + "Id": "db1df3db4af546678386854289614068", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "46d9a0bfe70f4a2ca0a0bb6660cc2e1a", + "Name": "", + "Description": "Value of expression at line 2", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "b8057309452d4a6d82bf8d6ac3197119", + "Name": "", + "Description": "Value of expression at line 3", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "bdeebe569dea44328398497ffc640c3d", + "Name": "", + "Description": "Value of expression at line 4", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "dcdc008aa5be4ad597b89b86a3241a28", + "Name": "", + "Description": "Value of expression at line 5", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "ecdb34e97ff74bd0a483927550048a02", + "Name": "", + "Description": "Value of expression at line 6", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "b933459b16174ea0b9e9c24a2c52ed42", + "Name": "", + "Description": "Value of expression at line 7", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "6;\n0;\n15;\n3;\n5;\n-2;\n4;" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "64932d8fe3aa4c438927458e8276a9c4", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "5f2cae47ab4247de9cccadd8e94678d6", + "Name": "points", + "Description": "Points to make polycurve\n\nPoint[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "e4b38a694b7e4cea95e736eae49c848c", + "Name": "connectLastToFirst", + "Description": "True to connect last point to first point, false to leave open\n\nbool\nDefault value : false", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "165d2708a80a4028906ef0573791e681", + "Name": "PolyCurve", + "Description": "Polycurve created by points", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.PolyCurve.ByPoints@Autodesk.DesignScript.Geometry.Point[],bool", + "Replication": "Auto", + "Description": "Make PolyCurve by connecting points. Set the 'connectLastToFirst' input to true to close the PolyCurve.\n\nPolyCurve.ByPoints (points: Point[], connectLastToFirst: bool = false): PolyCurve" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "01590a087a794c5c937b4635db24a023", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "631822fb7fa64e5594d23be4cd22506b", + "Name": "points", + "Description": "Points to make polycurve\n\nPoint[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "a6de575dc5dd4b8f8101744a8c66ca07", + "Name": "connectLastToFirst", + "Description": "True to connect last point to first point, false to leave open\n\nbool\nDefault value : false", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "0ff06a99e36a4853bb9304d3e5506915", + "Name": "PolyCurve", + "Description": "Polycurve created by points", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.PolyCurve.ByPoints@Autodesk.DesignScript.Geometry.Point[],bool", + "Replication": "Auto", + "Description": "Make PolyCurve by connecting points. Set the 'connectLastToFirst' input to true to close the PolyCurve.\n\nPolyCurve.ByPoints (points: Point[], connectLastToFirst: bool = false): PolyCurve" + }, + { + "ConcreteType": "CoreNodeModels.Input.BoolSelector, CoreNodeModels", + "Id": "2eb2c07cf5884b20bcf383da899fa3a2", + "NodeType": "BooleanInputNode", + "Inputs": [], + "Outputs": [ + { + "Id": "de0442b9718e4d83897779575f322853", + "Name": "", + "Description": "Boolean", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Enables selection between True and False", + "InputValue": true + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "f6794ed21f9d421b8e671da602b72c43", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "be09737b6a274c51a653fa858e38d637", + "Name": "centerPoint", + "Description": "Center point of arc\n\nPoint\nDefault value : Autodesk.DesignScript.Geometry.Point.ByCoordinates(0, 0, 0)", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "46526c71d5bc47db81e8586ab1d40e3a", + "Name": "startPoint", + "Description": "Start point of arc\n\nPoint\nDefault value : Autodesk.DesignScript.Geometry.Point.ByCoordinates(1, 0, 0)", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "988b685d358f4f5f80db88a009e6db50", + "Name": "sweepAngle", + "Description": "Angle to sweep out\n\ndouble\nDefault value : 90", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "659a188eea234357abd21067f63669df", + "Name": "normal", + "Description": "Normal direction vector of arc\n\nVector\nDefault value : Autodesk.DesignScript.Geometry.Vector.ByCoordinates(0, 0, 1)", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "0b7b165c970647538f212e6c8c829990", + "Name": "Arc", + "Description": "Arc created by center point, start point, and sweep angle", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Arc.ByCenterPointStartPointSweepAngle@Autodesk.DesignScript.Geometry.Point,Autodesk.DesignScript.Geometry.Point,double,Autodesk.DesignScript.Geometry.Vector", + "Replication": "Auto", + "Description": "Create an arc by providing it's center point, start point, sweep point, and normal\n\nArc.ByCenterPointStartPointSweepAngle (centerPoint: Point = Autodesk.DesignScript.Geometry.Point.ByCoordinates(0, 0, 0), startPoint: Point = Autodesk.DesignScript.Geometry.Point.ByCoordinates(1, 0, 0), sweepAngle: double = 90, normal: Vector = Autodesk.DesignScript.Geometry.Vector.ByCoordinates(0, 0, 1)): Arc" + }, + { + "ConcreteType": "CoreNodeModels.Input.DoubleInput, CoreNodeModels", + "NumberType": "Double", + "Id": "59d40b39091044778c444cbcfb1f788d", + "NodeType": "NumberInputNode", + "Inputs": [], + "Outputs": [ + { + "Id": "2fb270a6706543ad83aeac4402576487", + "Name": "", + "Description": "Double", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Creates a number", + "InputValue": 180.0 + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "53e80a3387ad467fabb94a52c0b8c9ea", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "52224b377f054e7d8d75fbb2c8776e1b", + "Name": "curve", + "Description": "Autodesk.DesignScript.Geometry.Curve", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "488d71272f57432da0b26b0ff90d3fba", + "Name": "Point", + "Description": "Point", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Curve.EndPoint", + "Replication": "Auto", + "Description": "Get the end Point along the Curve\n\nCurve.EndPoint: Point" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "345d3d481efd4ad4997a3aab494c1f1a", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "59adb841f2074a709c3ddf10ebdd9aa6", + "Name": "startPoint", + "Description": "Line start point\n\nPoint", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "0bd943e6eb61478fbfa1af22bb45b087", + "Name": "endPoint", + "Description": "Line end point\n\nPoint", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "f977865ff9f24254bcc5d6c23a4f2ec4", + "Name": "Line", + "Description": "Line from start and end point", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Line.ByStartPointEndPoint@Autodesk.DesignScript.Geometry.Point,Autodesk.DesignScript.Geometry.Point", + "Replication": "Auto", + "Description": "Creates a straight Line between two input Points.\n\nLine.ByStartPointEndPoint (startPoint: Point, endPoint: Point): Line" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "037f11489538420b9abfa039bb8aec0f", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "326c2fe3dbec44488712971e01beaab0", + "Name": "x", + "Description": "X coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "19982202d01a4bedab0ac1b9531b4c15", + "Name": "y", + "Description": "Y coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "a64d858f416745fb83efad588ae29b94", + "Name": "z", + "Description": "Z coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "bbd1e58157ae4a6b9da3de997daaeb5d", + "Name": "Point", + "Description": "Point created by coordinates", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Point.ByCoordinates@double,double,double", + "Replication": "Auto", + "Description": "Form a Point given 3 cartesian coordinates\n\nPoint.ByCoordinates (x: double = 0, y: double = 0, z: double = 0): Point" + }, + { + "ConcreteType": "CoreNodeModels.CreateList, CoreNodeModels", + "VariableInputPorts": true, + "Id": "64d37c1358984e72b0e6d9693a28f5ea", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "de7088e035ef443fb7733961fa781f2c", + "Name": "item0", + "Description": "Item Index #0", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "b518ff88f11e44fd88e4c2347a717c20", + "Name": "item1", + "Description": "Item Index #1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "fc9b2249f91149298506363bb5c31228", + "Name": "list", + "Description": "A list (type: var[]..[])", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Makes a new list from the given inputs" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "446e0f31c5694a3e88e9c4ee1e82a67a", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "d2cbcd77c6574919bce7e3f7b708a0ce", + "Name": "curves", + "Description": "Curves to join into polycurve\n\nCurve[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "46e1fb95e83648c8b18e6e4f7e55f5a9", + "Name": "joinTolerance", + "Description": "Tolerance to determine size of gap allowed between curves to be joined\n\ndouble\nDefault value : 0.001", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "d62095b24ad44795b4bfb16e5481f1f1", + "Name": "trimCurves", + "Description": "bool\nDefault value : false", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "2dc1a07ba2494af2b6fe3bca067c7276", + "Name": "trimLength", + "Description": "double\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "92c725174d5b4da6a852ed42210bbbdd", + "Name": "PolyCurve", + "Description": "Polycurve created by joined curves", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.PolyCurve.ByJoinedCurves@Autodesk.DesignScript.Geometry.Curve[],double,bool,double", + "Replication": "Auto", + "Description": "Make PolyCurve by joining curves. Flips curve as needed for connectivity. Choose a preferred join tolerance between 1e-6 and 1e-3 units.\n\nPolyCurve.ByJoinedCurves (curves: Curve[], joinTolerance: double = 0.001, trimCurves: bool = false, trimLength: double = 0): PolyCurve" + }, + { + "ConcreteType": "CoreNodeModels.CreateList, CoreNodeModels", + "VariableInputPorts": true, + "Id": "27b76edaea3e4bf592ffdba44446fb3f", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "d9c84a148cc74e1697a145db5ce3dff0", + "Name": "item0", + "Description": "Item Index #0", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "4a8e2056535a450c94b0ae60f0b487cc", + "Name": "item1", + "Description": "Item Index #1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "9c78b4b80ae842f8b5c7a288bd271d76", + "Name": "item2", + "Description": "Item Index #2", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "af04f581211c4ef98c5f1a1d974db0e3", + "Name": "list", + "Description": "A list (type: var[]..[])", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Makes a new list from the given inputs" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "8fc8855c53d94138b4e6359777a40b49", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "6cc5a8b67f3a4ad19d152dbf677bed79", + "Name": "polyCurve", + "Description": "Autodesk.DesignScript.Geometry.PolyCurve", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "1d27979d4cf04cef9e707de73749664b", + "Name": "Curve[]", + "Description": "Curve[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.PolyCurve.Curves", + "Replication": "Auto", + "Description": "Returns curves of the polycurve\n\nPolyCurve.Curves ( ): Curve[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "7dcdd89cab1c442fb8996ee873754056", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "f6272f10813049b48280f7940c852710", + "Name": "polyCurve", + "Description": "Autodesk.DesignScript.Geometry.PolyCurve", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "2818efcd80f0477c91283e71d54e8c24", + "Name": "Curve[]", + "Description": "Curve[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.PolyCurve.Curves", + "Replication": "Auto", + "Description": "Returns curves of the polycurve\n\nPolyCurve.Curves ( ): Curve[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "e0425c7160fa43b0b99279aafaee0933", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "721db266505242fa800387012a470bf2", + "Name": "geometry", + "Description": "Autodesk.DesignScript.Geometry.Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "b8a77c5d738d4a16a4af78b232c5e237", + "Name": "other", + "Description": "Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "0db39b8d67f5420f81cba8fdefcc8d14", + "Name": "bool", + "Description": "bool", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Geometry.IsAlmostEqualTo@Autodesk.DesignScript.Geometry.Geometry", + "Replication": "Auto", + "Description": "Check if the two objects have the same representational geometry or numerical values\n\nGeometry.IsAlmostEqualTo (other: Geometry): bool" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "6e24d491b6494670a3d2a9308da322d3", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "236dc44cc24c4a0c871e7286a6b6ee70", + "Name": "polyCurve", + "Description": "Autodesk.DesignScript.Geometry.PolyCurve", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "7b83bff6218141eba95bf5437ad68fb7", + "Name": "Curve[]", + "Description": "Curve[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.PolyCurve.Curves", + "Replication": "Auto", + "Description": "Returns curves of the polycurve\n\nPolyCurve.Curves ( ): Curve[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "c7a81856e4aa4db7a26cc969c6cef1d3", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "eb0fe2a347f3420da884b22507425fe0", + "Name": "polyCurve", + "Description": "Autodesk.DesignScript.Geometry.PolyCurve", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "e1bffebaf4524fc3865876815d0cbb69", + "Name": "Curve[]", + "Description": "Curve[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.PolyCurve.Curves", + "Replication": "Auto", + "Description": "Returns curves of the polycurve\n\nPolyCurve.Curves ( ): Curve[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "e2b9801fe74348c79e41eb097c06a9b5", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "98b996f2b5204232b7aaa676418424cd", + "Name": "polyCurve", + "Description": "Autodesk.DesignScript.Geometry.PolyCurve", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "fe6bb6999b4942d789addfe66062600d", + "Name": "Curve[]", + "Description": "Curve[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.PolyCurve.Curves", + "Replication": "Auto", + "Description": "Returns curves of the polycurve\n\nPolyCurve.Curves ( ): Curve[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "07fc14b5730649ca861f383cb9b2dd6a", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "b6dc405cb3e74a629770566b7779c283", + "Name": "polyCurve", + "Description": "Autodesk.DesignScript.Geometry.PolyCurve", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "d8bba1bfa37d4edfa80f7bef7883f1fa", + "Name": "Curve[]", + "Description": "Curve[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.PolyCurve.Curves", + "Replication": "Auto", + "Description": "Returns curves of the polycurve\n\nPolyCurve.Curves ( ): Curve[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "07b5b1ea0a0f4f7e898ea40bb0f14f8f", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "1787faf21b294b11adcec4f557fb2444", + "Name": "polyCurve", + "Description": "Autodesk.DesignScript.Geometry.PolyCurve", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "599835689afd452f9f8cca023e31206a", + "Name": "Curve[]", + "Description": "Curve[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.PolyCurve.Curves", + "Replication": "Auto", + "Description": "Returns curves of the polycurve\n\nPolyCurve.Curves ( ): Curve[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "0205b1994c15406eaac7019acbb6c423", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "72dc6a9e03b14000bee07171e768267f", + "Name": "polyCurve", + "Description": "Autodesk.DesignScript.Geometry.PolyCurve", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "89698ffbe53049f0b82409c8baad5da7", + "Name": "Curve[]", + "Description": "Curve[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.PolyCurve.Curves", + "Replication": "Auto", + "Description": "Returns curves of the polycurve\n\nPolyCurve.Curves ( ): Curve[]" + } + ], + "Connectors": [ + { + "Start": "eeb96a01b2e34a17a501371ae3de96ae", + "End": "045ae108a2af4f8ca27b2a5a5fc1ddfa", + "Id": "fbe847e8f51b49bdb2abe6d8d8a2a856", + "IsHidden": "False" + }, + { + "Start": "322b12dcf4a647beb3d3b744fba7d66e", + "End": "295f50ddf2e74bb980bfbdbf9fbf7238", + "Id": "6d0b2641e44c4e0baa67af22a86f970e", + "IsHidden": "False" + }, + { + "Start": "322b12dcf4a647beb3d3b744fba7d66e", + "End": "6cc5a8b67f3a4ad19d152dbf677bed79", + "Id": "6e5ccfe154754daaac1601d3c97caaf1", + "IsHidden": "False" + }, + { + "Start": "322b12dcf4a647beb3d3b744fba7d66e", + "End": "b8a77c5d738d4a16a4af78b232c5e237", + "Id": "51c05951d2634d949f25e5a5963531d6", + "IsHidden": "False" + }, + { + "Start": "fe676c5a63c1403faff0307bdeb9dd6f", + "End": "c815bff476c345d8b05ea6ad1cfbe418", + "Id": "2237c3e308004139a691c3370bd9c434", + "IsHidden": "False" + }, + { + "Start": "0d90b25141cc4e29b87199a507f51d52", + "End": "13bcd82434f049f8a53ba98a48b5d4d4", + "Id": "951c1d025d98413b8e522a39d946d5f0", + "IsHidden": "False" + }, + { + "Start": "58e16ac7422c4f6ba3c5f102ab56a6fc", + "End": "ac7ed336a8ff4252818459e3db2069c3", + "Id": "3b8c6e3fdba146bfa7e50f3d1933f6bf", + "IsHidden": "False" + }, + { + "Start": "2443dce540c34d2fa018bf3c67fd5ea4", + "End": "3ea5b61932504fe9a914dc474d805893", + "Id": "be1069d000ea416ea0e45298f2ec6956", + "IsHidden": "False" + }, + { + "Start": "e32e4586726c4f8d95521ba430874fd8", + "End": "faeb3b0b46af4a20ad680412d887f00e", + "Id": "3f47593c9d124e0284f5d14de5dfbecf", + "IsHidden": "False" + }, + { + "Start": "4709f5da22fc4775b242b7a127ff65e9", + "End": "d198e395cca743cebaca3904bd1dfeeb", + "Id": "a222876f8b874492a653eabaa5f8c2c3", + "IsHidden": "False" + }, + { + "Start": "c58539de1671474f8a5527a3e6aa396b", + "End": "72dc6a9e03b14000bee07171e768267f", + "Id": "aa5cf866d65f4e5d931ec1c1267e22bd", + "IsHidden": "False" + }, + { + "Start": "170138bfa27b47638cfe3a2382279a46", + "End": "fd9effa515174d7e9a0b17cf6c6f9e7c", + "Id": "8af256f67cbb4f95bf126cb8d409ed92", + "IsHidden": "False" + }, + { + "Start": "b46ea472052b4d43b1d0755150170af6", + "End": "14ed2121d71b4c60aa9df46888723706", + "Id": "244948dc2f61432599b9f07dea7b3e62", + "IsHidden": "False" + }, + { + "Start": "32896a7b4f1c4af1958761023615d0af", + "End": "1787faf21b294b11adcec4f557fb2444", + "Id": "7d9d8521ca984edeb3b7b65ba498923f", + "IsHidden": "False" + }, + { + "Start": "32896a7b4f1c4af1958761023615d0af", + "End": "5266e4b3f8484e14b7343e4cca1e9314", + "Id": "79977db9bffc4a36bcde15846b399679", + "IsHidden": "False" + }, + { + "Start": "7531b2d2a1ef49a6b4407aea0b623f1d", + "End": "af7a3302e74a4b9ea4fa18a703f5d3a2", + "Id": "49e3f3e0a90e4c38bb3ebd45180a2d1b", + "IsHidden": "False" + }, + { + "Start": "54e717af3a114f67aa330385f8b86fb5", + "End": "0435f4df2c804a13a4383bc39d1baa64", + "Id": "ab5672977da34a33999a32601a0a9257", + "IsHidden": "False" + }, + { + "Start": "8279a90c140246d8aa2e4546039c26b4", + "End": "b6dc405cb3e74a629770566b7779c283", + "Id": "8dabb0237b2c4f2bb6274be54010ff5c", + "IsHidden": "False" + }, + { + "Start": "f934e2e96fcb497d80f5836f1278ec71", + "End": "a1574f3424eb413695c75d1d70115986", + "Id": "6866431d3137404daa1d434a8ece5bb5", + "IsHidden": "False" + }, + { + "Start": "541b4a6e37ba43ed96c1ee41d4f4744b", + "End": "651d179c586b495fa1f45bf955e31704", + "Id": "dfbd9c892e18406f8a64f11b7ce82974", + "IsHidden": "False" + }, + { + "Start": "53cd967f5b3444dc9b0451d3dd431780", + "End": "b15db67ce9f24910bfb8b92656be4e2c", + "Id": "f8a2ab070d15461f846682242cbfbe2c", + "IsHidden": "False" + }, + { + "Start": "05a66865192f421c83c749cd92055c71", + "End": "0bce6e6b002f465fb39a4ca957926592", + "Id": "f0018d389fcc48e7ba9a74912b397d02", + "IsHidden": "False" + }, + { + "Start": "05a66865192f421c83c749cd92055c71", + "End": "98b996f2b5204232b7aaa676418424cd", + "Id": "9f8783a7e5524075a7445309d021b130", + "IsHidden": "False" + }, + { + "Start": "b538cd1451744905a661eff47f499ff6", + "End": "3073d96db5114f15a342c27bc232fa19", + "Id": "eb5286d1cd2344468145eee6c74ff894", + "IsHidden": "False" + }, + { + "Start": "dd7733c3b6f9448b9642f88eee522382", + "End": "2c213df1b8b44004af75af5b1b255cf5", + "Id": "2a7c7961acdb40a5b8891571d6fea43d", + "IsHidden": "False" + }, + { + "Start": "0105f0d8a4024812b71aabd1a16e4e23", + "End": "fc3a4db4d2bc4d15864922e6893f8ba0", + "Id": "cd7b0547f0954f12b5edfe1210ead2cd", + "IsHidden": "False" + }, + { + "Start": "51678ed27c2c4ac8904bd9c0d6a814f4", + "End": "ce1c9d33e42f4a51a535e2257eb6302f", + "Id": "6b89311b213c407f857b3f30fd104a9b", + "IsHidden": "False" + }, + { + "Start": "f62fcfd33a154d3fb00770ce0731c8b6", + "End": "d56c6cb8d08f43ea9da89e2f90a8231d", + "Id": "efb23aca5d5c4e4eb4ef65f56445410b", + "IsHidden": "False" + }, + { + "Start": "673ff649e15a4427bfe73d477ee119cc", + "End": "4461a2ba15ac4000b659a67ade469aa3", + "Id": "69e7bdbaffb341d28507c98275cfe3e9", + "IsHidden": "False" + }, + { + "Start": "c4ff56ce1dfe4f6785bd8e92a0075e21", + "End": "c54858faf2384c5d9089433616e2dfda", + "Id": "4dd1056b58fe4dffa4b0bd84ef6a4e1e", + "IsHidden": "False" + }, + { + "Start": "42132bbba4d24efb86d4101fb01ee461", + "End": "eb0fe2a347f3420da884b22507425fe0", + "Id": "3484900233d8435ca3b4d5b72b20e7f9", + "IsHidden": "False" + }, + { + "Start": "ecaa6fc0ebf74d049066435128f5eebd", + "End": "2e41137a17674ee8849b14924d722fc7", + "Id": "f46d7d58581d483589c6c00edf58c03c", + "IsHidden": "False" + }, + { + "Start": "ecaa6fc0ebf74d049066435128f5eebd", + "End": "f6cae31ee3d0420e87d8bfad67ad6bf6", + "Id": "56cbfdb088804e3bbc357c49fdab67e4", + "IsHidden": "False" + }, + { + "Start": "b920960d78b84e6396cbd391b1fdc674", + "End": "bafbebe98d264bb5a66424f6594d68ae", + "Id": "375c1bad7e1c4938b975b6d5f4ea70d8", + "IsHidden": "False" + }, + { + "Start": "4e45960f34e84d3695dd2a0c76abe267", + "End": "fce5c31adb61498c8006af4a66cc71aa", + "Id": "b54d10526ffa4d1f8dff0fdf964d2651", + "IsHidden": "False" + }, + { + "Start": "4e45960f34e84d3695dd2a0c76abe267", + "End": "bf53ceb5ca39499f92f620567a28959b", + "Id": "1a86b6a4968e48d0829002ff243c7241", + "IsHidden": "False" + }, + { + "Start": "62cd6f4f022c488bb851d6fbdbf9bdb6", + "End": "ef9fe165fa9747f49ddf81655099ade1", + "Id": "4e44e43571f04f77b9e58413484f236f", + "IsHidden": "False" + }, + { + "Start": "62cd6f4f022c488bb851d6fbdbf9bdb6", + "End": "236dc44cc24c4a0c871e7286a6b6ee70", + "Id": "cb9a5e8903a54b5e808a955a4debf391", + "IsHidden": "False" + }, + { + "Start": "a99af9869fa74a5a989b004fc4a06d7c", + "End": "319523068d43403ab70952f907928fe9", + "Id": "a6df64e1256843458c58b1b5527cc258", + "IsHidden": "False" + }, + { + "Start": "8865035268d845df945bf41040ec9a01", + "End": "36ecc4584c3740e7a9f23064880361c9", + "Id": "6f5cdfde17f948c5ba6045864379b9e2", + "IsHidden": "False" + }, + { + "Start": "1f5bdcdf7999488fb7fe7e67403bf463", + "End": "3900257f07fb4a5b8a60b831ee7b2083", + "Id": "fb050920268e431fa6e6ea09e7296fb2", + "IsHidden": "False" + }, + { + "Start": "8f72340336fa4c328132e4f9d749f787", + "End": "e240e93151ab4d61a0528511ed787393", + "Id": "226a5a3473174a06ba89be935541c055", + "IsHidden": "False" + }, + { + "Start": "2656af76d6634a44b5577891606b0e7d", + "End": "2f9c1535610748328a139be25dbad988", + "Id": "32ea18aebcf04c6b83dfc22a5c1d2663", + "IsHidden": "False" + }, + { + "Start": "f8020753bd244e70b147876ab696d1db", + "End": "5f2cae47ab4247de9cccadd8e94678d6", + "Id": "36e52a85aec64b38b498e411f214230c", + "IsHidden": "False" + }, + { + "Start": "f8020753bd244e70b147876ab696d1db", + "End": "631822fb7fa64e5594d23be4cd22506b", + "Id": "94f185472cac476f88a692f54ddbd35a", + "IsHidden": "False" + }, + { + "Start": "ba29fc9470bc440b9c7729f70e734b99", + "End": "eeb745274c494fe199b96b614a1b72a8", + "Id": "58fd631b70494824b563d626bb267e73", + "IsHidden": "False" + }, + { + "Start": "db1df3db4af546678386854289614068", + "End": "334a0540f0d843fbbdfc396e3c3de169", + "Id": "5f29bb5174b24b818b9c828cbe9cdf45", + "IsHidden": "False" + }, + { + "Start": "db1df3db4af546678386854289614068", + "End": "b2b0fe017dcb436ab272fe7be291e791", + "Id": "79ca8ebecae04554b4f719a8ea425d84", + "IsHidden": "False" + }, + { + "Start": "46d9a0bfe70f4a2ca0a0bb6660cc2e1a", + "End": "b752362dc3d74480b466a60988d969d1", + "Id": "089eceb033b9485e9715f3cd9c54726c", + "IsHidden": "False" + }, + { + "Start": "b8057309452d4a6d82bf8d6ac3197119", + "End": "4fddd89a48594d12979c309b16aaa4fd", + "Id": "fd26680393c746098c9b787f05115e05", + "IsHidden": "False" + }, + { + "Start": "bdeebe569dea44328398497ffc640c3d", + "End": "59e2e0083930429780d6c09ef0112179", + "Id": "5f87a1f3aa2748878828de4a77d2b9a7", + "IsHidden": "False" + }, + { + "Start": "dcdc008aa5be4ad597b89b86a3241a28", + "End": "0ee0f3d8eb3249a3894ea5a8f3488283", + "Id": "a14550ca6eff46e88e8076cce2cad104", + "IsHidden": "False" + }, + { + "Start": "ecdb34e97ff74bd0a483927550048a02", + "End": "eb08f6e6cbca403d8b0616cd2480b73a", + "Id": "ab9054b3601d4704a40c63a02b637309", + "IsHidden": "False" + }, + { + "Start": "b933459b16174ea0b9e9c24a2c52ed42", + "End": "8529fd26c6e1477fb77bc633ff03e9c4", + "Id": "766d9aa768ed4a7687f399fe2e2e31bc", + "IsHidden": "False" + }, + { + "Start": "165d2708a80a4028906ef0573791e681", + "End": "9c78b4b80ae842f8b5c7a288bd271d76", + "Id": "2cf5953a35ed41f3b557d2c8030181e8", + "IsHidden": "False" + }, + { + "Start": "0ff06a99e36a4853bb9304d3e5506915", + "End": "4a8e2056535a450c94b0ae60f0b487cc", + "Id": "f21a6ad8105c484ca7a0fcd2c6f8f6ec", + "IsHidden": "False" + }, + { + "Start": "de0442b9718e4d83897779575f322853", + "End": "a6de575dc5dd4b8f8101744a8c66ca07", + "Id": "61541bafcd664441970903096671ac4d", + "IsHidden": "False" + }, + { + "Start": "0b7b165c970647538f212e6c8c829990", + "End": "52224b377f054e7d8d75fbb2c8776e1b", + "Id": "9677a168be754e7aa30e873ddd10117d", + "IsHidden": "False" + }, + { + "Start": "0b7b165c970647538f212e6c8c829990", + "End": "b518ff88f11e44fd88e4c2347a717c20", + "Id": "87e4cdc375f24d9cbb84f53c59a94998", + "IsHidden": "False" + }, + { + "Start": "2fb270a6706543ad83aeac4402576487", + "End": "988b685d358f4f5f80db88a009e6db50", + "Id": "c303ff1af07e4ca9aa85b1e2f6f35a73", + "IsHidden": "False" + }, + { + "Start": "488d71272f57432da0b26b0ff90d3fba", + "End": "0bd943e6eb61478fbfa1af22bb45b087", + "Id": "6749fc6db6524526b4623eb8927e3766", + "IsHidden": "False" + }, + { + "Start": "f977865ff9f24254bcc5d6c23a4f2ec4", + "End": "de7088e035ef443fb7733961fa781f2c", + "Id": "0d66750ead0c4ef09b2bd1df5bf7ee79", + "IsHidden": "False" + }, + { + "Start": "bbd1e58157ae4a6b9da3de997daaeb5d", + "End": "59adb841f2074a709c3ddf10ebdd9aa6", + "Id": "61e08a660a524e47ad51e4ffd9034985", + "IsHidden": "False" + }, + { + "Start": "fc9b2249f91149298506363bb5c31228", + "End": "d2cbcd77c6574919bce7e3f7b708a0ce", + "Id": "449f7e05b6074b22ae13b5a3c7af13cd", + "IsHidden": "False" + }, + { + "Start": "92c725174d5b4da6a852ed42210bbbdd", + "End": "d9c84a148cc74e1697a145db5ce3dff0", + "Id": "08c86679725e4d8ab0cfeb396d10b363", + "IsHidden": "False" + }, + { + "Start": "92c725174d5b4da6a852ed42210bbbdd", + "End": "b7a42d5bdd1a4a8ea20fcf7d6d4d3511", + "Id": "f1cc326e58584309b826c8d31a0787af", + "IsHidden": "False" + }, + { + "Start": "92c725174d5b4da6a852ed42210bbbdd", + "End": "8b6486f2237a4a6ea4fab84ecd13685a", + "Id": "c4d42352e1f440e4bcb2bdd36a58df5a", + "IsHidden": "False" + }, + { + "Start": "92c725174d5b4da6a852ed42210bbbdd", + "End": "04db164d5def45efb4b931cebdbe6936", + "Id": "93dcd05eada748c59bd9714663702318", + "IsHidden": "False" + }, + { + "Start": "af04f581211c4ef98c5f1a1d974db0e3", + "End": "3ce287c86747451ab0b6d48b1c99d9eb", + "Id": "4194e63594eb4f72859211c70591d4a4", + "IsHidden": "False" + }, + { + "Start": "af04f581211c4ef98c5f1a1d974db0e3", + "End": "39d9c9de359942febd818fcc514cc642", + "Id": "ee4de21c62c64fadb95ac0654345d5b6", + "IsHidden": "False" + }, + { + "Start": "af04f581211c4ef98c5f1a1d974db0e3", + "End": "f6272f10813049b48280f7940c852710", + "Id": "2673e97937b24a9cae04be80f02c7a05", + "IsHidden": "False" + }, + { + "Start": "af04f581211c4ef98c5f1a1d974db0e3", + "End": "721db266505242fa800387012a470bf2", + "Id": "38578b8f761c4374aa60981d5855d860", + "IsHidden": "False" + }, + { + "Start": "1d27979d4cf04cef9e707de73749664b", + "End": "a4290fc45aec4f8ab6e166ef4e3d16df", + "Id": "fa19527c55f34d3b9a4990ae84873ea3", + "IsHidden": "False" + }, + { + "Start": "2818efcd80f0477c91283e71d54e8c24", + "End": "69270cf9d7f148c5805c7c5f17904245", + "Id": "7b215251431c4c4682cd0155eef10744", + "IsHidden": "False" + }, + { + "Start": "7b83bff6218141eba95bf5437ad68fb7", + "End": "699717ed95f4411ea45301821d25571d", + "Id": "5ce0e435fe8b40e291ddc0c3cdbaa8a7", + "IsHidden": "False" + }, + { + "Start": "e1bffebaf4524fc3865876815d0cbb69", + "End": "1628d37354c14119826ce6ed5508d5b8", + "Id": "364beeef42ec4aa1953f0d18a8d066c5", + "IsHidden": "False" + }, + { + "Start": "fe6bb6999b4942d789addfe66062600d", + "End": "b34abfdea8304687b638789496ed8929", + "Id": "c50f45e8035545bb9dbbc6eba2ffcf2f", + "IsHidden": "False" + }, + { + "Start": "d8bba1bfa37d4edfa80f7bef7883f1fa", + "End": "8125a300f54f4b529e0f7c176da963b4", + "Id": "76d23054f48c4bafa61c6bca93e529e4", + "IsHidden": "False" + }, + { + "Start": "599835689afd452f9f8cca023e31206a", + "End": "fa7fb4b459614ee9b3af3078f113bf51", + "Id": "6581144a345140a1bea64e6e35ba0653", + "IsHidden": "False" + }, + { + "Start": "89698ffbe53049f0b82409c8baad5da7", + "End": "665881d6d7c140a681e8f0e92c93e9eb", + "Id": "cfe6adf6019a43dba9c3f607e20b2be8", + "IsHidden": "False" + } + ], + "Dependencies": [], + "NodeLibraryDependencies": [], + "Thumbnail": "", + "GraphDocumentationURL": null, + "ExtensionWorkspaceData": [ + { + "ExtensionGuid": "28992e1d-abb9-417f-8b1b-05e053bee670", + "Name": "Properties", + "Version": "3.0", + "Data": {} + } + ], + "Author": "None provided", + "Linting": { + "activeLinter": "None", + "activeLinterId": "7b75fb44-43fd-4631-a878-29f4d5d8399a", + "warningCount": 0, + "errorCount": 0 + }, + "Bindings": [], + "View": { + "Dynamo": { + "ScaleFactor": 1.0, + "HasRunWithoutCrash": true, + "IsVisibleInDynamoLibrary": true, + "Version": "3.0.0.5795", + "RunType": "Automatic", + "RunPeriod": "1000" + }, + "Camera": { + "Name": "_Background Preview", + "EyeX": -9.680377006530762, + "EyeY": 2.726961612701416, + "EyeZ": -6.093514442443848, + "LookX": 16.65268898010254, + "LookY": -1.1314377784729004, + "LookZ": -1.0361356735229492, + "UpX": -0.14752399921417236, + "UpY": 0.9890159368515015, + "UpZ": 0.009179282002151012 + }, + "ConnectorPins": [], + "NodeViews": [ + { + "Id": "335f21038af042dba249f5e6195a9d1a", + "Name": "Data.StringifyJSON", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 6302.043774432668, + "Y": -1984.2087703396232 + }, + { + "Id": "825ffe28516a4d5db19107b7fd01b243", + "Name": "Data.ParseJSON", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 6620.454859739255, + "Y": -1984.2087703396232 + }, + { + "Id": "05f9754e77784c75b4e9322a5cb0456d", + "Name": "Geometry.IsAlmostEqualTo", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 7396.298692236706, + "Y": -2242.920054393074 + }, + { + "Id": "6e8e089b33154239bff6533905324e40", + "Name": "==", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 7205.175568802437, + "Y": -1787.2349025138478 + }, + { + "Id": "fcec1324535e4462b5b4ae1879b6bf22", + "Name": "Object.Type", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 6897.123930520923, + "Y": -1705.3425375900451 + }, + { + "Id": "a7c310ea86ef4bd0986bb48d43b8ae59", + "Name": "Object.Type", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 6900.703252198757, + "Y": -1850.5932895980973 + }, + { + "Id": "5637fc5f491442929861b146a3bdd414", + "Name": "List Create", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 7548.419935455713, + "Y": -1948.5368823998583 + }, + { + "Id": "3c44f22d1314423ab40dc1b654cdf0c4", + "Name": "List.Flatten", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 7799.77554531478, + "Y": -1947.3385130191987 + }, + { + "Id": "ae8ae5b06ddc463fbcf6af3742bf1dd2", + "Name": "Data.ParseJSON", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 7014.0897800143675, + "Y": 1672.3493336266274 + }, + { + "Id": "f888a56b80d246a69e33165b8403ced8", + "Name": "Geometry.IsAlmostEqualTo", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 7530.708505427343, + "Y": 1421.0977268802749 + }, + { + "Id": "a6c7caf73f874fd890814ddaeee394f0", + "Name": "Data.StringifyJSON", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 6722.365913011638, + "Y": 1672.2103182628007 + }, + { + "Id": "2bfab86e58fc41c3be2a4f630a722fa2", + "Name": "Geometry.Transform", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 6045.409935847985, + "Y": 1425.9838146165196 + }, + { + "Id": "74c700a7f3e74c9d996d14b82203005a", + "Name": "CoordinateSystem.Scale", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 5621.830547960386, + "Y": 1653.5603666168465 + }, + { + "Id": "2dc2559439e84d509dc8bfa4ba8b8f4e", + "Name": "CoordinateSystem.ByOrigin", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 5677.934862635316, + "Y": 1461.4021171208108 + }, + { + "Id": "cfdaa3f989a84ca28fab8bb3d700b4d9", + "Name": "Data.ParseJSON", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 7074.555486233736, + "Y": 819.2317845277673 + }, + { + "Id": "5c5f540b487e455cb8a21e0fae9bed1e", + "Name": "Data.StringifyJSON", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 6782.831619231006, + "Y": 819.0927691639406 + }, + { + "Id": "6e264e57307944bebc045c3a11baed92", + "Name": "Geometry.IsAlmostEqualTo", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 7558.173586176681, + "Y": 498.5620587022779 + }, + { + "Id": "917e6d164ab14e2796025482801fac08", + "Name": "Plane.XZ", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 6100.678607583141, + "Y": 593.8494128123127 + }, + { + "Id": "4286e3b45d0a4e66816a1a121909827c", + "Name": "Geometry.Mirror", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 6341.226555501298, + "Y": 509.0996810950262 + }, + { + "Id": "57be41f9549447e2872b89bd584e2fe0", + "Name": "CoordinateSystem.Rotate", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 5094.54340102418, + "Y": 1748.5603666168463 + }, + { + "Id": "d342013f18c244dcadd191f40d792f3d", + "Name": "Number", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 5141.911706026662, + "Y": 1592.5603666168465 + }, + { + "Id": "aa432b46492a490393f49be7b375535e", + "Name": "CoordinateSystem.ByOrigin", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 4716.04340102418, + "Y": 1481.5603666168465 + }, + { + "Id": "4dfc547d352b4673881db78891dbce50", + "Name": "Point.ByCoordinates", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 4716.04340102418, + "Y": 1693.5603666168463 + }, + { + "Id": "9c37d9515bbf41128e6027dac11174de", + "Name": "Vector.ByCoordinates", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 4716.04340102418, + "Y": 1905.5603666168463 + }, + { + "Id": "18fd5f3bd9f946e4b2e4a9ea16003f0e", + "Name": "Number", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 4716.04340102418, + "Y": 2117.5603666168463 + }, + { + "Id": "e6bc534b15cd4005b7b86ac2da3c2c7b", + "Name": "Data.StringifyJSON", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 6755.6831788535565, + "Y": -268.81154154207525 + }, + { + "Id": "64f2e1a7c4ac469881b19f5022fd19b0", + "Name": "Data.ParseJSON", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 7080.662187617822, + "Y": -268.331800044577 + }, + { + "Id": "d6e5014acdb04575bffd9b032bf58eea", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 4462.04340102418, + "Y": 1516.6978666168463 + }, + { + "Id": "320d895b7c3b48f8ac998d3101c682d5", + "Name": "Curve.Reverse", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 6300.942412386643, + "Y": -488.3880068639737 + }, + { + "Id": "5fe4da4a73d64748a0b07fca04caeaf8", + "Name": "Geometry.IsAlmostEqualTo", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 7463.268131969446, + "Y": -619.4666837990148 + }, + { + "Id": "f8ce5418c4f5491f9f37ff7e9da3b6be", + "Name": "List Create", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 8648.146261530192, + "Y": -1692.2945552153908 + }, + { + "Id": "5205ffe621084a12bb409ba8ed819d5e", + "Name": "List.Flatten", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 8954.67347223675, + "Y": -1695.7176410980612 + }, + { + "Id": "423356e2c8f84e00aa6c50e9bdb72c98", + "Name": "List.AllTrue", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 9235.571087232225, + "Y": -1694.5493310885058 + }, + { + "Id": "0409e0b7fbc14d3683d6cf5b6d9be8b8", + "Name": "Math.RandomList", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 4700.510701287651, + "Y": -2304.8615016029444 + }, + { + "Id": "a7e1829354ec4939a1cec95f4ab26d43", + "Name": "Math.RandomList", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 4706.119601540128, + "Y": -2549.4023015211374 + }, + { + "Id": "599cf7949a95417d868599ab0dfccb39", + "Name": "Point.ByCoordinates", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 5385.890117421382, + "Y": -2475.1642027360376 + }, + { + "Id": "0bfd6bad96f4465fa5aec008434d8a41", + "Name": "List.Sort", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": false, + "X": 5048.631467360251, + "Y": -2551.895537596169 + }, + { + "Id": "c35772f3680244fd93263ae615d35f73", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": false, + "X": 4409.523767385094, + "Y": -2433.9585791109535 + }, + { + "Id": "64932d8fe3aa4c438927458e8276a9c4", + "Name": "PolyCurve.ByPoints", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 5729.915428344755, + "Y": -2419.322452949925 + }, + { + "Id": "01590a087a794c5c937b4635db24a023", + "Name": "PolyCurve.ByPoints", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 5730.606354710628, + "Y": -2796.876135424657 + }, + { + "Id": "2eb2c07cf5884b20bcf383da899fa3a2", + "Name": "Boolean", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 5377.760551278832, + "Y": -2764.157949415321 + }, + { + "Id": "f6794ed21f9d421b8e671da602b72c43", + "Name": "Arc.ByCenterPointStartPointSweepAngle", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 4219.523791232947, + "Y": -3055.262867335729 + }, + { + "Id": "59d40b39091044778c444cbcfb1f788d", + "Name": "Number", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 3981.201232367778, + "Y": -2986.8554120417966 + }, + { + "Id": "53e80a3387ad467fabb94a52c0b8c9ea", + "Name": "Curve.EndPoint", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 4697.023791232947, + "Y": -3055.262867335729 + }, + { + "Id": "345d3d481efd4ad4997a3aab494c1f1a", + "Name": "Line.ByStartPointEndPoint", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 4996.355325577029, + "Y": -3180.976998383572 + }, + { + "Id": "037f11489538420b9abfa039bb8aec0f", + "Name": "Point.ByCoordinates", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 4606.977232642325, + "Y": -3289.3022348229442 + }, + { + "Id": "64d37c1358984e72b0e6d9693a28f5ea", + "Name": "List Create", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 5459.894260092759, + "Y": -3257.4816202449347 + }, + { + "Id": "446e0f31c5694a3e88e9c4ee1e82a67a", + "Name": "PolyCurve.ByJoinedCurves", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 5736.061251668882, + "Y": -3208.053295393504 + }, + { + "Id": "27b76edaea3e4bf592ffdba44446fb3f", + "Name": "List Create", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 6126.381561566304, + "Y": -3005.9894762005915 + }, + { + "Id": "8fc8855c53d94138b4e6359777a40b49", + "Name": "PolyCurve.Curves", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 7060.5485730748715, + "Y": -2109.8630546279587 + }, + { + "Id": "7dcdd89cab1c442fb8996ee873754056", + "Name": "PolyCurve.Curves", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 6457.523225550665, + "Y": -2986.789943598372 + }, + { + "Id": "e0425c7160fa43b0b99279aafaee0933", + "Name": "Geometry.IsAlmostEqualTo", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 7254.583989043444, + "Y": -2604.321222996628 + }, + { + "Id": "6e24d491b6494670a3d2a9308da322d3", + "Name": "PolyCurve.Curves", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 6621.325537939974, + "Y": -526.8030723788115 + }, + { + "Id": "c7a81856e4aa4db7a26cc969c6cef1d3", + "Name": "PolyCurve.Curves", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 7371.700866303023, + "Y": -271.039519110431 + }, + { + "Id": "e2b9801fe74348c79e41eb097c06a9b5", + "Name": "PolyCurve.Curves", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 6725.766822856647, + "Y": 491.9325630442256 + }, + { + "Id": "07fc14b5730649ca861f383cb9b2dd6a", + "Name": "PolyCurve.Curves", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 7337.849884542531, + "Y": 820.0409601211372 + }, + { + "Id": "07b5b1ea0a0f4f7e898ea40bb0f14f8f", + "Name": "PolyCurve.Curves", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 6595.129951270074, + "Y": 1424.2763803865337 + }, + { + "Id": "0205b1994c15406eaac7019acbb6c423", + "Name": "PolyCurve.Curves", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 7281.413780344655, + "Y": 1673.0116368679928 + } + ], + "Annotations": [ + { + "Id": "b247e87dddd34b1aa50b8167836c3049", + "Title": "All True", + "DescriptionText": "", + "IsExpanded": true, + "WidthAdjustment": 0.0, + "HeightAdjustment": 0.0, + "Nodes": [ + "423356e2c8f84e00aa6c50e9bdb72c98" + ], + "HasNestedGroups": false, + "Left": 9225.571087232225, + "Top": -1767.5493310885058, + "Width": 196.0, + "Height": 205.0, + "FontSize": 36.0, + "GroupStyleId": "00000000-0000-0000-0000-000000000000", + "InitialTop": -1694.5493310885058, + "InitialHeight": 145.0, + "TextblockHeight": 63.0, + "Background": "#FFC1D676" + }, + { + "Id": "c9a984ce246f4d5fb4af7ca1f75f7ee2", + "Title": "IS Almost does not work for PolyCurves", + "DescriptionText": "", + "IsExpanded": true, + "WidthAdjustment": 0.0, + "HeightAdjustment": 0.0, + "Nodes": [ + "e0425c7160fa43b0b99279aafaee0933" + ], + "HasNestedGroups": false, + "Left": 7244.583989043444, + "Top": -2763.821222996628, + "Width": 296.0, + "Height": 321.5, + "FontSize": 36.0, + "GroupStyleId": "bc688959-ce34-4bf5-90f8-6ddd23f80989", + "InitialTop": -2604.321222996628, + "InitialHeight": 145.0, + "TextblockHeight": 149.5, + "Background": "#FFA4E1FF" + } + ], + "X": -8505.019833496623, + "Y": 2003.7736464724228, + "Zoom": 0.9846351132445031 + } +} \ No newline at end of file diff --git a/test/core/json/Curve_Polygon_JSONParsing.dyn b/test/core/json/Curve_Polygon_JSONParsing.dyn new file mode 100644 index 00000000000..60c02184f82 --- /dev/null +++ b/test/core/json/Curve_Polygon_JSONParsing.dyn @@ -0,0 +1,2576 @@ +{ + "Uuid": "4b802105-0bd8-4d97-b885-450c0e387121", + "IsCustomNode": false, + "Description": null, + "Name": "Curve_Polygon_JSONParsing", + "ElementResolver": { + "ResolutionMap": { + "DSCore.Object": { + "Key": "DSCore.Object", + "Value": "DSCoreNodes.dll" + }, + "DSCore.Data": { + "Key": "DSCore.Data", + "Value": "DSCoreNodes.dll" + }, + "DesignScript.Builtin.Dictionary": { + "Key": "DesignScript.Builtin.Dictionary", + "Value": "DesignScriptBuiltin.dll" + }, + "Color": { + "Key": "DSCore.Color", + "Value": "DSCoreNodes.dll" + }, + "DSCore.DateTime.Now": { + "Key": "DSCore.DateTime", + "Value": "DSCoreNodes.dll" + }, + "DSCore.DateTime": { + "Key": "DSCore.DateTime", + "Value": "DSCoreNodes.dll" + }, + "Point": { + "Key": "Autodesk.DesignScript.Geometry.Point", + "Value": "ProtoGeometry.dll" + } + } + }, + "Inputs": [], + "Outputs": [], + "Nodes": [ + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "335f21038af042dba249f5e6195a9d1a", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "3ce287c86747451ab0b6d48b1c99d9eb", + "Name": "values", + "Description": "A List of values\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "eeb96a01b2e34a17a501371ae3de96ae", + "Name": "json", + "Description": "A JSON string where primitive types (e.g. double, int, boolean), Lists, and Dictionary's will be turned into the associated JSON type.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Data.StringifyJSON@var[]..[]", + "Replication": "Auto", + "Description": "Stringify converts an arbitrary value or a list of arbitrary values to JSON. Replication can be used to apply the operation over a list, producing a list of JSON strings.\n\nData.StringifyJSON (values: var[]..[]): string" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "825ffe28516a4d5db19107b7fd01b243", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "045ae108a2af4f8ca27b2a5a5fc1ddfa", + "Name": "json", + "Description": "A JSON string\n\nstring", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "322b12dcf4a647beb3d3b744fba7d66e", + "Name": "result", + "Description": "The result type depends on the content of the input string. The result type can be a primitive value (e.g. string, boolean, double), a List, or a Dictionary.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Data.ParseJSON@string", + "Replication": "Auto", + "Description": "Parse converts an arbitrary JSON string to a value. It is the opposite of JSON.Stringify.\n\nData.ParseJSON (json: string): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "05f9754e77784c75b4e9322a5cb0456d", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "69270cf9d7f148c5805c7c5f17904245", + "Name": "geometry", + "Description": "Autodesk.DesignScript.Geometry.Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "a4290fc45aec4f8ab6e166ef4e3d16df", + "Name": "other", + "Description": "Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "fe676c5a63c1403faff0307bdeb9dd6f", + "Name": "bool", + "Description": "bool", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Geometry.IsAlmostEqualTo@Autodesk.DesignScript.Geometry.Geometry", + "Replication": "Auto", + "Description": "Check if the two objects have the same representational geometry or numerical values\n\nGeometry.IsAlmostEqualTo (other: Geometry): bool" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "6e8e089b33154239bff6533905324e40", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "3ea5b61932504fe9a914dc474d805893", + "Name": "x", + "Description": "Basic type object to compare (e.g. bool, int, double, string, etc.)\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "ac7ed336a8ff4252818459e3db2069c3", + "Name": "y", + "Description": "Basic type object to compare (e.g. bool, int, double, string, etc.)\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "0d90b25141cc4e29b87199a507f51d52", + "Name": "bool", + "Description": "Result of equality check", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "==@var[]..[],var[]..[]", + "Replication": "Auto", + "Description": "Compares if x and y are equal\n\n== (x: var[]..[], y: var[]..[]): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "fcec1324535e4462b5b4ae1879b6bf22", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "295f50ddf2e74bb980bfbdbf9fbf7238", + "Name": "object", + "Description": "Object to query type\n\nvar", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "58e16ac7422c4f6ba3c5f102ab56a6fc", + "Name": "string", + "Description": "Type of object.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Object.Type@var", + "Replication": "Auto", + "Description": "Returns the type of object represented as string.\n\nObject.Type (object: var): string" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "a7c310ea86ef4bd0986bb48d43b8ae59", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "39d9c9de359942febd818fcc514cc642", + "Name": "object", + "Description": "Object to query type\n\nvar", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "2443dce540c34d2fa018bf3c67fd5ea4", + "Name": "string", + "Description": "Type of object.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Object.Type@var", + "Replication": "Auto", + "Description": "Returns the type of object represented as string.\n\nObject.Type (object: var): string" + }, + { + "ConcreteType": "CoreNodeModels.CreateList, CoreNodeModels", + "VariableInputPorts": true, + "Id": "5637fc5f491442929861b146a3bdd414", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "c815bff476c345d8b05ea6ad1cfbe418", + "Name": "item0", + "Description": "Item Index #0", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "13bcd82434f049f8a53ba98a48b5d4d4", + "Name": "item1", + "Description": "Item Index #1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "6fb117b94e8b4611a7c9524effb13409", + "Name": "item2", + "Description": "Item Index #2", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "9d67d101467f46bf8d3f6d01e7f5d9b5", + "Name": "item3", + "Description": "Item Index #3", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "34a79c7912bc4c20bd03c8e45a133604", + "Name": "item4", + "Description": "Item Index #4", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "e32e4586726c4f8d95521ba430874fd8", + "Name": "list", + "Description": "A list (type: var[]..[])", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Makes a new list from the given inputs" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "3c44f22d1314423ab40dc1b654cdf0c4", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "faeb3b0b46af4a20ad680412d887f00e", + "Name": "list", + "Description": "List to flatten.\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "bf7ff9f02609487c940efc96538f69a0", + "Name": "amount", + "Description": "Layers of list nesting to remove (-1 will remove all list nestings)\n\nint\nDefault value : -1", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "4709f5da22fc4775b242b7a127ff65e9", + "Name": "list", + "Description": "Flattened list by amount", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.List.Flatten@var[]..[],int", + "Replication": "Auto", + "Description": "Flattens a nested list of lists by a certain amount.\n\nList.Flatten (list: var[]..[], amount: int = -1): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "ae8ae5b06ddc463fbcf6af3742bf1dd2", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "14ed2121d71b4c60aa9df46888723706", + "Name": "json", + "Description": "A JSON string\n\nstring", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "c58539de1671474f8a5527a3e6aa396b", + "Name": "result", + "Description": "The result type depends on the content of the input string. The result type can be a primitive value (e.g. string, boolean, double), a List, or a Dictionary.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Data.ParseJSON@string", + "Replication": "Auto", + "Description": "Parse converts an arbitrary JSON string to a value. It is the opposite of JSON.Stringify.\n\nData.ParseJSON (json: string): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "a6c7caf73f874fd890814ddaeee394f0", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "5266e4b3f8484e14b7343e4cca1e9314", + "Name": "values", + "Description": "A List of values\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "b46ea472052b4d43b1d0755150170af6", + "Name": "json", + "Description": "A JSON string where primitive types (e.g. double, int, boolean), Lists, and Dictionary's will be turned into the associated JSON type.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Data.StringifyJSON@var[]..[]", + "Replication": "Auto", + "Description": "Stringify converts an arbitrary value or a list of arbitrary values to JSON. Replication can be used to apply the operation over a list, producing a list of JSON strings.\n\nData.StringifyJSON (values: var[]..[]): string" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "2bfab86e58fc41c3be2a4f630a722fa2", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "04db164d5def45efb4b931cebdbe6936", + "Name": "geometry", + "Description": "Autodesk.DesignScript.Geometry.Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "0435f4df2c804a13a4383bc39d1baa64", + "Name": "fromCoordinateSystem", + "Description": "CoordinateSystem", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "af7a3302e74a4b9ea4fa18a703f5d3a2", + "Name": "contextCoordinateSystem", + "Description": "CoordinateSystem", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "32896a7b4f1c4af1958761023615d0af", + "Name": "Geometry", + "Description": "Transformed Geometry.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Geometry.Transform@Autodesk.DesignScript.Geometry.CoordinateSystem,Autodesk.DesignScript.Geometry.CoordinateSystem", + "Replication": "Auto", + "Description": "Transforms this geometry from source CoordinateSystem to a new context CoordinateSystem.\n\nGeometry.Transform (fromCoordinateSystem: CoordinateSystem, contextCoordinateSystem: CoordinateSystem): Geometry" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "74c700a7f3e74c9d996d14b82203005a", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "3073d96db5114f15a342c27bc232fa19", + "Name": "coordinateSystem", + "Description": "Autodesk.DesignScript.Geometry.CoordinateSystem", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "2c213df1b8b44004af75af5b1b255cf5", + "Name": "amount", + "Description": "Amount to scale\n\ndouble\nDefault value : 1", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "7531b2d2a1ef49a6b4407aea0b623f1d", + "Name": "CoordinateSystem", + "Description": "Scaled coordinate system", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.CoordinateSystem.Scale@double", + "Replication": "Auto", + "Description": "Scale uniformly around the origin\n\nCoordinateSystem.Scale (amount: double = 1): CoordinateSystem" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "2dc2559439e84d509dc8bfa4ba8b8f4e", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "1dba63b4d3d64c5eb55cd27b23b4d0c5", + "Name": "x", + "Description": "double\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "b9d29b68d5ae4e378f7f3dabd9ad5eda", + "Name": "y", + "Description": "double\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "54e717af3a114f67aa330385f8b86fb5", + "Name": "CoordinateSystem", + "Description": "CoordinateSystem", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.CoordinateSystem.ByOrigin@double,double", + "Replication": "Auto", + "Description": "Create a CoordinateSystem with origin at X and Y locations, with X and Y Axes set as WCS X and Y Axes. Z defaults to 0.\n\nCoordinateSystem.ByOrigin (x: double = 0, y: double = 0): CoordinateSystem" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "cfdaa3f989a84ca28fab8bb3d700b4d9", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "a1574f3424eb413695c75d1d70115986", + "Name": "json", + "Description": "A JSON string\n\nstring", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "8279a90c140246d8aa2e4546039c26b4", + "Name": "result", + "Description": "The result type depends on the content of the input string. The result type can be a primitive value (e.g. string, boolean, double), a List, or a Dictionary.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Data.ParseJSON@string", + "Replication": "Auto", + "Description": "Parse converts an arbitrary JSON string to a value. It is the opposite of JSON.Stringify.\n\nData.ParseJSON (json: string): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "5c5f540b487e455cb8a21e0fae9bed1e", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "0bce6e6b002f465fb39a4ca957926592", + "Name": "values", + "Description": "A List of values\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "f934e2e96fcb497d80f5836f1278ec71", + "Name": "json", + "Description": "A JSON string where primitive types (e.g. double, int, boolean), Lists, and Dictionary's will be turned into the associated JSON type.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Data.StringifyJSON@var[]..[]", + "Replication": "Auto", + "Description": "Stringify converts an arbitrary value or a list of arbitrary values to JSON. Replication can be used to apply the operation over a list, producing a list of JSON strings.\n\nData.StringifyJSON (values: var[]..[]): string" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "917e6d164ab14e2796025482801fac08", + "NodeType": "FunctionNode", + "Inputs": [], + "Outputs": [ + { + "Id": "53cd967f5b3444dc9b0451d3dd431780", + "Name": "Plane", + "Description": "Plane at XZ plane of world", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Plane.XZ", + "Replication": "Auto", + "Description": "Creates a plane in the world XZ plane\n\nPlane.XZ ( ): Plane" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "4286e3b45d0a4e66816a1a121909827c", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "8b6486f2237a4a6ea4fab84ecd13685a", + "Name": "geometry", + "Description": "Autodesk.DesignScript.Geometry.Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "b15db67ce9f24910bfb8b92656be4e2c", + "Name": "mirrorPlane", + "Description": "Plane", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "05a66865192f421c83c749cd92055c71", + "Name": "Geometry", + "Description": "Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Geometry.Mirror@Autodesk.DesignScript.Geometry.Plane", + "Replication": "Auto", + "Description": "Mirror the object across the input Plane\n\nGeometry.Mirror (mirrorPlane: Plane): Geometry" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "57be41f9549447e2872b89bd584e2fe0", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "fc3a4db4d2bc4d15864922e6893f8ba0", + "Name": "coordinateSystem", + "Description": "Autodesk.DesignScript.Geometry.CoordinateSystem", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "ce1c9d33e42f4a51a535e2257eb6302f", + "Name": "origin", + "Description": "Origin point\n\nPoint", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "d56c6cb8d08f43ea9da89e2f90a8231d", + "Name": "axis", + "Description": "Vector axis for rotation\n\nVector", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "4461a2ba15ac4000b659a67ade469aa3", + "Name": "degrees", + "Description": "Degrees to rotate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "b538cd1451744905a661eff47f499ff6", + "Name": "CoordinateSystem", + "Description": "Rotated coordinate system", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.CoordinateSystem.Rotate@Autodesk.DesignScript.Geometry.Point,Autodesk.DesignScript.Geometry.Vector,double", + "Replication": "Auto", + "Description": "Rotates an object around an origin and an axis by a specified degree\n\nCoordinateSystem.Rotate (origin: Point, axis: Vector, degrees: double = 0): CoordinateSystem" + }, + { + "ConcreteType": "CoreNodeModels.Input.DoubleInput, CoreNodeModels", + "NumberType": "Double", + "Id": "d342013f18c244dcadd191f40d792f3d", + "NodeType": "NumberInputNode", + "Inputs": [], + "Outputs": [ + { + "Id": "dd7733c3b6f9448b9642f88eee522382", + "Name": "", + "Description": "Double", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Creates a number", + "InputValue": 2.3 + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "aa432b46492a490393f49be7b375535e", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "2e41137a17674ee8849b14924d722fc7", + "Name": "x", + "Description": "double\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "bafbebe98d264bb5a66424f6594d68ae", + "Name": "y", + "Description": "double\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "fce5c31adb61498c8006af4a66cc71aa", + "Name": "z", + "Description": "double\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "0105f0d8a4024812b71aabd1a16e4e23", + "Name": "CoordinateSystem", + "Description": "CoordinateSystem", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.CoordinateSystem.ByOrigin@double,double,double", + "Replication": "Auto", + "Description": "Create a CoordinateSystem with origin at X, Y, and Z locations, with X and Y Axes set as WCS X and Y Axes.\n\nCoordinateSystem.ByOrigin (x: double = 0, y: double = 0, z: double = 0): CoordinateSystem" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "4dfc547d352b4673881db78891dbce50", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "9b7bacfca62b4bb0acfef3dadebdb0bd", + "Name": "x", + "Description": "X coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "c955aedb3cd942f7bb0eae84d59799a5", + "Name": "y", + "Description": "Y coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "f388883c96c64da1b0fcc8aa565c52a4", + "Name": "z", + "Description": "Z coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "51678ed27c2c4ac8904bd9c0d6a814f4", + "Name": "Point", + "Description": "Point created by coordinates", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Point.ByCoordinates@double,double,double", + "Replication": "Auto", + "Description": "Form a Point given 3 cartesian coordinates\n\nPoint.ByCoordinates (x: double = 0, y: double = 0, z: double = 0): Point" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "9c37d9515bbf41128e6027dac11174de", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "f6cae31ee3d0420e87d8bfad67ad6bf6", + "Name": "x", + "Description": "X coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "bf53ceb5ca39499f92f620567a28959b", + "Name": "y", + "Description": "Y coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "bc61753cc6c14818b6eb23dbf3e30fa7", + "Name": "z", + "Description": "Z coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "f62fcfd33a154d3fb00770ce0731c8b6", + "Name": "Vector", + "Description": "Vector created by coordinates", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Vector.ByCoordinates@double,double,double", + "Replication": "Auto", + "Description": "Form a Vector by 3 Euclidean coordinates\n\nVector.ByCoordinates (x: double = 0, y: double = 0, z: double = 0): Vector" + }, + { + "ConcreteType": "CoreNodeModels.Input.DoubleInput, CoreNodeModels", + "NumberType": "Double", + "Id": "18fd5f3bd9f946e4b2e4a9ea16003f0e", + "NodeType": "NumberInputNode", + "Inputs": [], + "Outputs": [ + { + "Id": "673ff649e15a4427bfe73d477ee119cc", + "Name": "", + "Description": "Double", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Creates a number", + "InputValue": 24.0 + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "e6bc534b15cd4005b7b86ac2da3c2c7b", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "ef9fe165fa9747f49ddf81655099ade1", + "Name": "values", + "Description": "A List of values\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "c4ff56ce1dfe4f6785bd8e92a0075e21", + "Name": "json", + "Description": "A JSON string where primitive types (e.g. double, int, boolean), Lists, and Dictionary's will be turned into the associated JSON type.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Data.StringifyJSON@var[]..[]", + "Replication": "Auto", + "Description": "Stringify converts an arbitrary value or a list of arbitrary values to JSON. Replication can be used to apply the operation over a list, producing a list of JSON strings.\n\nData.StringifyJSON (values: var[]..[]): string" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "64f2e1a7c4ac469881b19f5022fd19b0", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "c54858faf2384c5d9089433616e2dfda", + "Name": "json", + "Description": "A JSON string\n\nstring", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "42132bbba4d24efb86d4101fb01ee461", + "Name": "result", + "Description": "The result type depends on the content of the input string. The result type can be a primitive value (e.g. string, boolean, double), a List, or a Dictionary.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Data.ParseJSON@string", + "Replication": "Auto", + "Description": "Parse converts an arbitrary JSON string to a value. It is the opposite of JSON.Stringify.\n\nData.ParseJSON (json: string): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "d6e5014acdb04575bffd9b032bf58eea", + "NodeType": "CodeBlockNode", + "Inputs": [], + "Outputs": [ + { + "Id": "ecaa6fc0ebf74d049066435128f5eebd", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "b920960d78b84e6396cbd391b1fdc674", + "Name": "", + "Description": "Value of expression at line 2", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "4e45960f34e84d3695dd2a0c76abe267", + "Name": "", + "Description": "Value of expression at line 3", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "2;\n3;\n4;" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "320d895b7c3b48f8ac998d3101c682d5", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "b7a42d5bdd1a4a8ea20fcf7d6d4d3511", + "Name": "curve", + "Description": "Autodesk.DesignScript.Geometry.Curve", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "62cd6f4f022c488bb851d6fbdbf9bdb6", + "Name": "Curve", + "Description": "A new Curve with the opposite direction", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Curve.Reverse", + "Replication": "Auto", + "Description": "Reverse the direction of the curve\n\nCurve.Reverse ( ): Curve" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "86fef9a8660a493f98e4d47f99602b30", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "2f2b34591f184ad98e1b9a7b7648811c", + "Name": "circle", + "Description": "Circle", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "3405f684774e42a09b328b8184e6eea9", + "Name": "numberSides", + "Description": "int\nDefault value : 5", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "c7beebbb29134ef9964b039269f7325c", + "Name": "Polygon", + "Description": "Polygon", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Polygon.RegularPolygon@Autodesk.DesignScript.Geometry.Circle,int", + "Replication": "Auto", + "Description": "Construct an inscribed Polygon Curve within a circle.\n\nPolygon.RegularPolygon (circle: Circle, numberSides: int = 5): Polygon" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "82e754608a44401bbb3eebac93d77552", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "496577556ddf4452843f5cfe9e211157", + "Name": "polyCurve", + "Description": "Autodesk.DesignScript.Geometry.PolyCurve", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "fe33b4710f8d4da1a7dfb315eec8da2d", + "Name": "Point[]", + "Description": "Point[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.PolyCurve.Points", + "Replication": "Auto", + "Description": "Returns the start point of the first component and the end points of every component curve. For a closed polycurve, as the start and end points are the same, the end point is excluded.\n\nPolyCurve.Points: Point[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "5edc7aa4898843fa94814b16b3e0891a", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "1dc8d2544798474680c2aca54dcbf8a4", + "Name": "x", + "Description": "X coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "c6c9ae89cc55482db9a8cacfa47c9a63", + "Name": "y", + "Description": "Y coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "4c0c9434e0754959b08ae00b1036d51f", + "Name": "z", + "Description": "Z coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "e1ae287b48904318ae73597943d1fb8e", + "Name": "Point", + "Description": "Point created by coordinates", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Point.ByCoordinates@double,double,double", + "Replication": "Auto", + "Description": "Form a Point given 3 cartesian coordinates\n\nPoint.ByCoordinates (x: double = 0, y: double = 0, z: double = 0): Point" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "ae7225c1aef9439496018c8b373a8234", + "NodeType": "CodeBlockNode", + "Inputs": [], + "Outputs": [ + { + "Id": "1076a25170b141b4b5d6345fd45d6822", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "ee5f5b763411444ca079e8c12f7874f1", + "Name": "", + "Description": "Value of expression at line 2", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "64d3c73077ea4095a25c555e532df997", + "Name": "", + "Description": "Value of expression at line 3", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "1;\n2;\n3;" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "0923217416ac45f7864aa6d54762536c", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "35a8bea13b254f198c946e3a5d350c2f", + "Name": "x", + "Description": "X coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "b29362a81eaa4e1c8201409cd87cffc0", + "Name": "y", + "Description": "Y coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "83ca44c3a7a245e7966c53f1a666df7f", + "Name": "z", + "Description": "Z coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "67a0fd3b715145339ba6e07b81cd57a2", + "Name": "Vector", + "Description": "Vector created by coordinates", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Vector.ByCoordinates@double,double,double", + "Replication": "Auto", + "Description": "Form a Vector by 3 Euclidean coordinates\n\nVector.ByCoordinates (x: double = 0, y: double = 0, z: double = 0): Vector" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "4ea522790bff4c63a8bdbbbc56eba126", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "7519b3b0c4a142fa9913086005cc138f", + "Name": "centerPoint", + "Description": "Center point of circle\n\nPoint\nDefault value : Autodesk.DesignScript.Geometry.Point.ByCoordinates(0, 0, 0)", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "91ea6659d13e45ec9f055e00bc035ca3", + "Name": "radius", + "Description": "Radius\n\ndouble\nDefault value : 1", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "18292984c8cb49309e1640895252c073", + "Name": "normal", + "Description": "Normal direction vector\n\nVector\nDefault value : Autodesk.DesignScript.Geometry.Vector.ByCoordinates(0, 0, 1)", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "3bc16fc1de98433aa4fc99d06b5de401", + "Name": "Circle", + "Description": "Circle created with center point radius and normal", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Circle.ByCenterPointRadiusNormal@Autodesk.DesignScript.Geometry.Point,double,Autodesk.DesignScript.Geometry.Vector", + "Replication": "Auto", + "Description": "Creates a Circle with specified center Point, radius, and normal direction.\n\nCircle.ByCenterPointRadiusNormal (centerPoint: Point = Autodesk.DesignScript.Geometry.Point.ByCoordinates(0, 0, 0), radius: double = 1, normal: Vector = Autodesk.DesignScript.Geometry.Vector.ByCoordinates(0, 0, 1)): Circle" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "8aa5a742b1e3405caa8048a8ffb86f58", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "d760be678e114f27bee48c27e9dbe55c", + "Name": "polyCurve", + "Description": "Autodesk.DesignScript.Geometry.PolyCurve", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "7b5c0d1ef6854b4884487ca0632d9e4f", + "Name": "Point[]", + "Description": "Point[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.PolyCurve.Points", + "Replication": "Auto", + "Description": "Returns the start point of the first component and the end points of every component curve. For a closed polycurve, as the start and end points are the same, the end point is excluded.\n\nPolyCurve.Points: Point[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "fdffd3224dbe4efabc77c0be194cfab0", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "2878cbbf7b3141c6822c1c1a29d51c52", + "Name": "geometry", + "Description": "Autodesk.DesignScript.Geometry.Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "b44d21a6f8aa4b7ca190ae6fe1419e0f", + "Name": "other", + "Description": "Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "c4d089caa9c04cb8af5ad3dfdfb5d93c", + "Name": "bool", + "Description": "bool", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Geometry.IsAlmostEqualTo@Autodesk.DesignScript.Geometry.Geometry", + "Replication": "Auto", + "Description": "Check if the two objects have the same representational geometry or numerical values\n\nGeometry.IsAlmostEqualTo (other: Geometry): bool" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "984e44d39da34ba4a4f27b3181d0e276", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "ea0ed7ee8f3c4837baec505fb2e2f6ea", + "Name": "geometry", + "Description": "Autodesk.DesignScript.Geometry.Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "f5b8921a55db45aab813f4f97e57a6ab", + "Name": "other", + "Description": "Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "6b30a48639ba47adbcf3fb34d4d8f15f", + "Name": "bool", + "Description": "bool", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Geometry.IsAlmostEqualTo@Autodesk.DesignScript.Geometry.Geometry", + "Replication": "Auto", + "Description": "Check if the two objects have the same representational geometry or numerical values\n\nGeometry.IsAlmostEqualTo (other: Geometry): bool" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "17deaea071a24b2fbb5ea835e18b34d6", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "a2ff19ac275b4f1e8c0dd7b79e39e987", + "Name": "polyCurve", + "Description": "Autodesk.DesignScript.Geometry.PolyCurve", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "729fea85a735440ab45b98675b788963", + "Name": "Point[]", + "Description": "Point[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.PolyCurve.Points", + "Replication": "Auto", + "Description": "Returns the start point of the first component and the end points of every component curve. For a closed polycurve, as the start and end points are the same, the end point is excluded.\n\nPolyCurve.Points: Point[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "87fb7987a8fb4996b33e6a3e4f0bbb68", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "a01fe9998572470c9dd708b434cff2d1", + "Name": "polyCurve", + "Description": "Autodesk.DesignScript.Geometry.PolyCurve", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "344610ed04e84081b1b76bbda09ccdd8", + "Name": "Point[]", + "Description": "Point[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.PolyCurve.Points", + "Replication": "Auto", + "Description": "Returns the start point of the first component and the end points of every component curve. For a closed polycurve, as the start and end points are the same, the end point is excluded.\n\nPolyCurve.Points: Point[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "ae9bf231fb6045d282face56dd1c72e0", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "029a776e10614cecb9f8611e4767874f", + "Name": "geometry", + "Description": "Autodesk.DesignScript.Geometry.Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "d2e44456854841af9d051407b4d9be31", + "Name": "other", + "Description": "Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "cb8823b968c64310ac667b329be43624", + "Name": "bool", + "Description": "bool", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Geometry.IsAlmostEqualTo@Autodesk.DesignScript.Geometry.Geometry", + "Replication": "Auto", + "Description": "Check if the two objects have the same representational geometry or numerical values\n\nGeometry.IsAlmostEqualTo (other: Geometry): bool" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "176e21b75e164901aca5d1c903b8f879", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "2983b5648e0349e9b1537bd7467f0b93", + "Name": "polyCurve", + "Description": "Autodesk.DesignScript.Geometry.PolyCurve", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "3aae1c21322e43e480394651d074e314", + "Name": "Point[]", + "Description": "Point[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.PolyCurve.Points", + "Replication": "Auto", + "Description": "Returns the start point of the first component and the end points of every component curve. For a closed polycurve, as the start and end points are the same, the end point is excluded.\n\nPolyCurve.Points: Point[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "68c594b724fb465082e1cf0dddfff6ae", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "4ae21c13c5314477b1a8b5ac75bc428e", + "Name": "polyCurve", + "Description": "Autodesk.DesignScript.Geometry.PolyCurve", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "bd501d3aa06b4f108c5bc24c340dcf92", + "Name": "Point[]", + "Description": "Point[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.PolyCurve.Points", + "Replication": "Auto", + "Description": "Returns the start point of the first component and the end points of every component curve. For a closed polycurve, as the start and end points are the same, the end point is excluded.\n\nPolyCurve.Points: Point[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "0ffb03a5b33e48caaf53b2898c226f50", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "f1a0fb8b00344ad89e8956ea5348f284", + "Name": "geometry", + "Description": "Autodesk.DesignScript.Geometry.Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "04aff368af8d46f5a46dc54a6ddf6430", + "Name": "other", + "Description": "Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "83588cda29e444fbb63ab6966ecac400", + "Name": "bool", + "Description": "bool", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Geometry.IsAlmostEqualTo@Autodesk.DesignScript.Geometry.Geometry", + "Replication": "Auto", + "Description": "Check if the two objects have the same representational geometry or numerical values\n\nGeometry.IsAlmostEqualTo (other: Geometry): bool" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "b95e88eee52e43b59d8291c624bbdc7b", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "7862e9c60c454c05a1658e86ec9e1b9d", + "Name": "polyCurve", + "Description": "Autodesk.DesignScript.Geometry.PolyCurve", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "302dc3574bcc4d89b2500439fbd7cc49", + "Name": "Point[]", + "Description": "Point[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.PolyCurve.Points", + "Replication": "Auto", + "Description": "Returns the start point of the first component and the end points of every component curve. For a closed polycurve, as the start and end points are the same, the end point is excluded.\n\nPolyCurve.Points: Point[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "5134ea2b145147c29df0b1fb34abb3ca", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "03b9d8a80c404f35822089d98ffb067d", + "Name": "polyCurve", + "Description": "Autodesk.DesignScript.Geometry.PolyCurve", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "7e60039e383f4d3e8107db95ea6ee4f2", + "Name": "Point[]", + "Description": "Point[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.PolyCurve.Points", + "Replication": "Auto", + "Description": "Returns the start point of the first component and the end points of every component curve. For a closed polycurve, as the start and end points are the same, the end point is excluded.\n\nPolyCurve.Points: Point[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "015f80f917374031b345b46b5a8d54ca", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "6cb7cc28875a449397ed6e7c5c2723cf", + "Name": "list", + "Description": "List to be checked on whether all items are true.\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "c0697ae0de1c44e4bcd86b5533e28bbc", + "Name": "bool", + "Description": "True if all items from list are true, false if one or more items is not true", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.List.AllTrue@var[]..[]", + "Replication": "Auto", + "Description": "Determines if all items in the given list is a boolean and has a true value.\n\nList.AllTrue (list: var[]..[]): bool" + } + ], + "Connectors": [ + { + "Start": "eeb96a01b2e34a17a501371ae3de96ae", + "End": "045ae108a2af4f8ca27b2a5a5fc1ddfa", + "Id": "fbe847e8f51b49bdb2abe6d8d8a2a856", + "IsHidden": "False" + }, + { + "Start": "322b12dcf4a647beb3d3b744fba7d66e", + "End": "a4290fc45aec4f8ab6e166ef4e3d16df", + "Id": "d50251a022344b3ca6ba904805c45c71", + "IsHidden": "False" + }, + { + "Start": "322b12dcf4a647beb3d3b744fba7d66e", + "End": "295f50ddf2e74bb980bfbdbf9fbf7238", + "Id": "6d0b2641e44c4e0baa67af22a86f970e", + "IsHidden": "False" + }, + { + "Start": "322b12dcf4a647beb3d3b744fba7d66e", + "End": "d760be678e114f27bee48c27e9dbe55c", + "Id": "180d379b578b43249e421b589975837f", + "IsHidden": "False" + }, + { + "Start": "0d90b25141cc4e29b87199a507f51d52", + "End": "13bcd82434f049f8a53ba98a48b5d4d4", + "Id": "951c1d025d98413b8e522a39d946d5f0", + "IsHidden": "False" + }, + { + "Start": "58e16ac7422c4f6ba3c5f102ab56a6fc", + "End": "ac7ed336a8ff4252818459e3db2069c3", + "Id": "3b8c6e3fdba146bfa7e50f3d1933f6bf", + "IsHidden": "False" + }, + { + "Start": "2443dce540c34d2fa018bf3c67fd5ea4", + "End": "3ea5b61932504fe9a914dc474d805893", + "Id": "be1069d000ea416ea0e45298f2ec6956", + "IsHidden": "False" + }, + { + "Start": "e32e4586726c4f8d95521ba430874fd8", + "End": "faeb3b0b46af4a20ad680412d887f00e", + "Id": "3f47593c9d124e0284f5d14de5dfbecf", + "IsHidden": "False" + }, + { + "Start": "4709f5da22fc4775b242b7a127ff65e9", + "End": "6cb7cc28875a449397ed6e7c5c2723cf", + "Id": "881e84628120453681990268cf7f1be0", + "IsHidden": "False" + }, + { + "Start": "c58539de1671474f8a5527a3e6aa396b", + "End": "7862e9c60c454c05a1658e86ec9e1b9d", + "Id": "7f515e18f6374eb6b68daf8133fcd7e5", + "IsHidden": "False" + }, + { + "Start": "b46ea472052b4d43b1d0755150170af6", + "End": "14ed2121d71b4c60aa9df46888723706", + "Id": "244948dc2f61432599b9f07dea7b3e62", + "IsHidden": "False" + }, + { + "Start": "32896a7b4f1c4af1958761023615d0af", + "End": "5266e4b3f8484e14b7343e4cca1e9314", + "Id": "8f908a31b0be46198355ac7d4347a572", + "IsHidden": "False" + }, + { + "Start": "32896a7b4f1c4af1958761023615d0af", + "End": "03b9d8a80c404f35822089d98ffb067d", + "Id": "307090e59e75424d90cf7036fdf155ac", + "IsHidden": "False" + }, + { + "Start": "7531b2d2a1ef49a6b4407aea0b623f1d", + "End": "af7a3302e74a4b9ea4fa18a703f5d3a2", + "Id": "49e3f3e0a90e4c38bb3ebd45180a2d1b", + "IsHidden": "False" + }, + { + "Start": "54e717af3a114f67aa330385f8b86fb5", + "End": "0435f4df2c804a13a4383bc39d1baa64", + "Id": "ab5672977da34a33999a32601a0a9257", + "IsHidden": "False" + }, + { + "Start": "8279a90c140246d8aa2e4546039c26b4", + "End": "2983b5648e0349e9b1537bd7467f0b93", + "Id": "4deabf71918240349de8b04fca93d62f", + "IsHidden": "False" + }, + { + "Start": "f934e2e96fcb497d80f5836f1278ec71", + "End": "a1574f3424eb413695c75d1d70115986", + "Id": "6866431d3137404daa1d434a8ece5bb5", + "IsHidden": "False" + }, + { + "Start": "53cd967f5b3444dc9b0451d3dd431780", + "End": "b15db67ce9f24910bfb8b92656be4e2c", + "Id": "f8a2ab070d15461f846682242cbfbe2c", + "IsHidden": "False" + }, + { + "Start": "05a66865192f421c83c749cd92055c71", + "End": "0bce6e6b002f465fb39a4ca957926592", + "Id": "f0018d389fcc48e7ba9a74912b397d02", + "IsHidden": "False" + }, + { + "Start": "05a66865192f421c83c749cd92055c71", + "End": "4ae21c13c5314477b1a8b5ac75bc428e", + "Id": "17c32a45b1d8469483f84b79000e1e8e", + "IsHidden": "False" + }, + { + "Start": "b538cd1451744905a661eff47f499ff6", + "End": "3073d96db5114f15a342c27bc232fa19", + "Id": "eb5286d1cd2344468145eee6c74ff894", + "IsHidden": "False" + }, + { + "Start": "dd7733c3b6f9448b9642f88eee522382", + "End": "2c213df1b8b44004af75af5b1b255cf5", + "Id": "2a7c7961acdb40a5b8891571d6fea43d", + "IsHidden": "False" + }, + { + "Start": "0105f0d8a4024812b71aabd1a16e4e23", + "End": "fc3a4db4d2bc4d15864922e6893f8ba0", + "Id": "cd7b0547f0954f12b5edfe1210ead2cd", + "IsHidden": "False" + }, + { + "Start": "51678ed27c2c4ac8904bd9c0d6a814f4", + "End": "ce1c9d33e42f4a51a535e2257eb6302f", + "Id": "6b89311b213c407f857b3f30fd104a9b", + "IsHidden": "False" + }, + { + "Start": "f62fcfd33a154d3fb00770ce0731c8b6", + "End": "d56c6cb8d08f43ea9da89e2f90a8231d", + "Id": "efb23aca5d5c4e4eb4ef65f56445410b", + "IsHidden": "False" + }, + { + "Start": "673ff649e15a4427bfe73d477ee119cc", + "End": "4461a2ba15ac4000b659a67ade469aa3", + "Id": "69e7bdbaffb341d28507c98275cfe3e9", + "IsHidden": "False" + }, + { + "Start": "c4ff56ce1dfe4f6785bd8e92a0075e21", + "End": "c54858faf2384c5d9089433616e2dfda", + "Id": "4dd1056b58fe4dffa4b0bd84ef6a4e1e", + "IsHidden": "False" + }, + { + "Start": "42132bbba4d24efb86d4101fb01ee461", + "End": "a2ff19ac275b4f1e8c0dd7b79e39e987", + "Id": "9ac9266774e3427aa247c2891f0a0c0d", + "IsHidden": "False" + }, + { + "Start": "ecaa6fc0ebf74d049066435128f5eebd", + "End": "2e41137a17674ee8849b14924d722fc7", + "Id": "f46d7d58581d483589c6c00edf58c03c", + "IsHidden": "False" + }, + { + "Start": "ecaa6fc0ebf74d049066435128f5eebd", + "End": "f6cae31ee3d0420e87d8bfad67ad6bf6", + "Id": "56cbfdb088804e3bbc357c49fdab67e4", + "IsHidden": "False" + }, + { + "Start": "b920960d78b84e6396cbd391b1fdc674", + "End": "bafbebe98d264bb5a66424f6594d68ae", + "Id": "375c1bad7e1c4938b975b6d5f4ea70d8", + "IsHidden": "False" + }, + { + "Start": "4e45960f34e84d3695dd2a0c76abe267", + "End": "fce5c31adb61498c8006af4a66cc71aa", + "Id": "b54d10526ffa4d1f8dff0fdf964d2651", + "IsHidden": "False" + }, + { + "Start": "4e45960f34e84d3695dd2a0c76abe267", + "End": "bf53ceb5ca39499f92f620567a28959b", + "Id": "1a86b6a4968e48d0829002ff243c7241", + "IsHidden": "False" + }, + { + "Start": "62cd6f4f022c488bb851d6fbdbf9bdb6", + "End": "ef9fe165fa9747f49ddf81655099ade1", + "Id": "4e44e43571f04f77b9e58413484f236f", + "IsHidden": "False" + }, + { + "Start": "62cd6f4f022c488bb851d6fbdbf9bdb6", + "End": "a01fe9998572470c9dd708b434cff2d1", + "Id": "0eff6c42608a4046a25988aa25a6d432", + "IsHidden": "False" + }, + { + "Start": "c7beebbb29134ef9964b039269f7325c", + "End": "496577556ddf4452843f5cfe9e211157", + "Id": "5073fee476da4b9c8ba3882919b06861", + "IsHidden": "False" + }, + { + "Start": "c7beebbb29134ef9964b039269f7325c", + "End": "3ce287c86747451ab0b6d48b1c99d9eb", + "Id": "e692c2f75d7d4707a22a11f17365b832", + "IsHidden": "False" + }, + { + "Start": "c7beebbb29134ef9964b039269f7325c", + "End": "39d9c9de359942febd818fcc514cc642", + "Id": "84d005bef85e412c9241550da2e11bba", + "IsHidden": "False" + }, + { + "Start": "c7beebbb29134ef9964b039269f7325c", + "End": "69270cf9d7f148c5805c7c5f17904245", + "Id": "05ec51e0847b4d1597773b2fe9641e8d", + "IsHidden": "False" + }, + { + "Start": "c7beebbb29134ef9964b039269f7325c", + "End": "b7a42d5bdd1a4a8ea20fcf7d6d4d3511", + "Id": "301b698b0f5648c7869cfbebcb2e31c5", + "IsHidden": "False" + }, + { + "Start": "c7beebbb29134ef9964b039269f7325c", + "End": "8b6486f2237a4a6ea4fab84ecd13685a", + "Id": "94200505d5d74a2a82052d1e25a07734", + "IsHidden": "False" + }, + { + "Start": "c7beebbb29134ef9964b039269f7325c", + "End": "04db164d5def45efb4b931cebdbe6936", + "Id": "c4329791d249492c8edb3f47358a41ac", + "IsHidden": "False" + }, + { + "Start": "fe33b4710f8d4da1a7dfb315eec8da2d", + "End": "2878cbbf7b3141c6822c1c1a29d51c52", + "Id": "d34a25f22d874dbea3e84168d2d22655", + "IsHidden": "False" + }, + { + "Start": "e1ae287b48904318ae73597943d1fb8e", + "End": "7519b3b0c4a142fa9913086005cc138f", + "Id": "e5f35394268549a48e8101227d43729d", + "IsHidden": "False" + }, + { + "Start": "1076a25170b141b4b5d6345fd45d6822", + "End": "1dc8d2544798474680c2aca54dcbf8a4", + "Id": "3fa12685d1244575af10e617d9e40ae1", + "IsHidden": "False" + }, + { + "Start": "1076a25170b141b4b5d6345fd45d6822", + "End": "35a8bea13b254f198c946e3a5d350c2f", + "Id": "31d5622a55af4e47873e36e091e3d56d", + "IsHidden": "False" + }, + { + "Start": "ee5f5b763411444ca079e8c12f7874f1", + "End": "c6c9ae89cc55482db9a8cacfa47c9a63", + "Id": "e066cd3edd974b55ab97122dc72d478f", + "IsHidden": "False" + }, + { + "Start": "ee5f5b763411444ca079e8c12f7874f1", + "End": "b29362a81eaa4e1c8201409cd87cffc0", + "Id": "b429e79ad1b549259b7acb31f355dcac", + "IsHidden": "False" + }, + { + "Start": "64d3c73077ea4095a25c555e532df997", + "End": "4c0c9434e0754959b08ae00b1036d51f", + "Id": "add7f954ba6b46e781680dfbf4fdb4b6", + "IsHidden": "False" + }, + { + "Start": "64d3c73077ea4095a25c555e532df997", + "End": "83ca44c3a7a245e7966c53f1a666df7f", + "Id": "a77b90de61ce47b5b2b8ab76172e0444", + "IsHidden": "False" + }, + { + "Start": "64d3c73077ea4095a25c555e532df997", + "End": "91ea6659d13e45ec9f055e00bc035ca3", + "Id": "e4ebc01491204c018eb82e24c47771c1", + "IsHidden": "False" + }, + { + "Start": "67a0fd3b715145339ba6e07b81cd57a2", + "End": "18292984c8cb49309e1640895252c073", + "Id": "ad0644051f874fcf868318f7d100b8f0", + "IsHidden": "False" + }, + { + "Start": "3bc16fc1de98433aa4fc99d06b5de401", + "End": "2f2b34591f184ad98e1b9a7b7648811c", + "Id": "1c8ce346d6ce4d8cba6cc926d62e1a84", + "IsHidden": "False" + }, + { + "Start": "7b5c0d1ef6854b4884487ca0632d9e4f", + "End": "b44d21a6f8aa4b7ca190ae6fe1419e0f", + "Id": "6020c6e056ae49c8a86e7040035314ac", + "IsHidden": "False" + }, + { + "Start": "c4d089caa9c04cb8af5ad3dfdfb5d93c", + "End": "c815bff476c345d8b05ea6ad1cfbe418", + "Id": "4819ca82e05944b485d78402f273f113", + "IsHidden": "False" + }, + { + "Start": "6b30a48639ba47adbcf3fb34d4d8f15f", + "End": "6fb117b94e8b4611a7c9524effb13409", + "Id": "6bc25fa424be48dab1f07f38511f7fdd", + "IsHidden": "False" + }, + { + "Start": "729fea85a735440ab45b98675b788963", + "End": "f5b8921a55db45aab813f4f97e57a6ab", + "Id": "166f747fc84749a7a73bfa673d2eca89", + "IsHidden": "False" + }, + { + "Start": "344610ed04e84081b1b76bbda09ccdd8", + "End": "ea0ed7ee8f3c4837baec505fb2e2f6ea", + "Id": "8cc5b3f0ac6444c286a1a0b97b3c4d3e", + "IsHidden": "False" + }, + { + "Start": "cb8823b968c64310ac667b329be43624", + "End": "9d67d101467f46bf8d3f6d01e7f5d9b5", + "Id": "0ec2965ca1e1412cb6cdd7043683e8ba", + "IsHidden": "False" + }, + { + "Start": "3aae1c21322e43e480394651d074e314", + "End": "d2e44456854841af9d051407b4d9be31", + "Id": "9df814dae6084d0d8b3475dd00a36d4e", + "IsHidden": "False" + }, + { + "Start": "bd501d3aa06b4f108c5bc24c340dcf92", + "End": "029a776e10614cecb9f8611e4767874f", + "Id": "75bc75492d684d35981a527e408b9d25", + "IsHidden": "False" + }, + { + "Start": "83588cda29e444fbb63ab6966ecac400", + "End": "34a79c7912bc4c20bd03c8e45a133604", + "Id": "ad92d41faeb3419abfb60140788cd4c9", + "IsHidden": "False" + }, + { + "Start": "302dc3574bcc4d89b2500439fbd7cc49", + "End": "04aff368af8d46f5a46dc54a6ddf6430", + "Id": "71260fa414a14bb58b35a84faab36885", + "IsHidden": "False" + }, + { + "Start": "7e60039e383f4d3e8107db95ea6ee4f2", + "End": "f1a0fb8b00344ad89e8956ea5348f284", + "Id": "bbedf5ce3b0b4839ad03fadcf0acf83e", + "IsHidden": "False" + } + ], + "Dependencies": [], + "NodeLibraryDependencies": [], + "Thumbnail": "", + "GraphDocumentationURL": null, + "ExtensionWorkspaceData": [ + { + "ExtensionGuid": "28992e1d-abb9-417f-8b1b-05e053bee670", + "Name": "Properties", + "Version": "3.0", + "Data": {} + } + ], + "Author": "None provided", + "Linting": { + "activeLinter": "None", + "activeLinterId": "7b75fb44-43fd-4631-a878-29f4d5d8399a", + "warningCount": 0, + "errorCount": 0 + }, + "Bindings": [], + "View": { + "Dynamo": { + "ScaleFactor": 1.0, + "HasRunWithoutCrash": true, + "IsVisibleInDynamoLibrary": true, + "Version": "3.0.0.5795", + "RunType": "Automatic", + "RunPeriod": "1000" + }, + "Camera": { + "Name": "_Background Preview", + "EyeX": -9.680377006530762, + "EyeY": 2.726961612701416, + "EyeZ": -6.093514442443848, + "LookX": 16.65268898010254, + "LookY": -1.1314377784729004, + "LookZ": -1.0361356735229492, + "UpX": -0.14752399921417236, + "UpY": 0.9890159368515015, + "UpZ": 0.009179282002151012 + }, + "ConnectorPins": [], + "NodeViews": [ + { + "Id": "335f21038af042dba249f5e6195a9d1a", + "Name": "Data.StringifyJSON", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 6577.42279959937, + "Y": -2118.8385159766767 + }, + { + "Id": "825ffe28516a4d5db19107b7fd01b243", + "Name": "Data.ParseJSON", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 6895.833884905956, + "Y": -2118.8385159766767 + }, + { + "Id": "05f9754e77784c75b4e9322a5cb0456d", + "Name": "Geometry.IsAlmostEqualTo", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 7475.328380663252, + "Y": -2597.2289577998504 + }, + { + "Id": "6e8e089b33154239bff6533905324e40", + "Name": "==", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 7484.851761301167, + "Y": -1506.4718060547098 + }, + { + "Id": "fcec1324535e4462b5b4ae1879b6bf22", + "Name": "Object.Type", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 7176.800123019653, + "Y": -1424.579441130907 + }, + { + "Id": "a7c310ea86ef4bd0986bb48d43b8ae59", + "Name": "Object.Type", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 7180.379444697487, + "Y": -1569.8301931389592 + }, + { + "Id": "5637fc5f491442929861b146a3bdd414", + "Name": "List Create", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 8868.893233856683, + "Y": -2316.0001425834075 + }, + { + "Id": "3c44f22d1314423ab40dc1b654cdf0c4", + "Name": "List.Flatten", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 9208.109251356122, + "Y": -2322.3326652862083 + }, + { + "Id": "ae8ae5b06ddc463fbcf6af3742bf1dd2", + "Name": "Data.ParseJSON", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 7107.376698863101, + "Y": 2067.1256657967324 + }, + { + "Id": "a6c7caf73f874fd890814ddaeee394f0", + "Name": "Data.StringifyJSON", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 6815.652831860372, + "Y": 2066.9866504329057 + }, + { + "Id": "2bfab86e58fc41c3be2a4f630a722fa2", + "Name": "Geometry.Transform", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 6407.608703967642, + "Y": 1809.4883926255682 + }, + { + "Id": "74c700a7f3e74c9d996d14b82203005a", + "Name": "CoordinateSystem.Scale", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 5984.029316080043, + "Y": 2037.0649446258951 + }, + { + "Id": "2dc2559439e84d509dc8bfa4ba8b8f4e", + "Name": "CoordinateSystem.ByOrigin", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 6040.133630754973, + "Y": 1844.9066951298594 + }, + { + "Id": "cfdaa3f989a84ca28fab8bb3d700b4d9", + "Name": "Data.ParseJSON", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 7074.555486233736, + "Y": 819.2317845277673 + }, + { + "Id": "5c5f540b487e455cb8a21e0fae9bed1e", + "Name": "Data.StringifyJSON", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 6782.831619231006, + "Y": 819.0927691639406 + }, + { + "Id": "917e6d164ab14e2796025482801fac08", + "Name": "Plane.XZ", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 6100.678607583141, + "Y": 593.8494128123127 + }, + { + "Id": "4286e3b45d0a4e66816a1a121909827c", + "Name": "Geometry.Mirror", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 6341.226555501298, + "Y": 509.0996810950262 + }, + { + "Id": "57be41f9549447e2872b89bd584e2fe0", + "Name": "CoordinateSystem.Rotate", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 5456.742169143837, + "Y": 2132.064944625895 + }, + { + "Id": "d342013f18c244dcadd191f40d792f3d", + "Name": "Number", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 5504.110474146319, + "Y": 1976.0649446258951 + }, + { + "Id": "aa432b46492a490393f49be7b375535e", + "Name": "CoordinateSystem.ByOrigin", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 5078.242169143837, + "Y": 1865.0649446258951 + }, + { + "Id": "4dfc547d352b4673881db78891dbce50", + "Name": "Point.ByCoordinates", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 5078.242169143837, + "Y": 2077.064944625895 + }, + { + "Id": "9c37d9515bbf41128e6027dac11174de", + "Name": "Vector.ByCoordinates", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 5078.242169143837, + "Y": 2289.064944625895 + }, + { + "Id": "18fd5f3bd9f946e4b2e4a9ea16003f0e", + "Name": "Number", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 5078.242169143837, + "Y": 2501.064944625895 + }, + { + "Id": "e6bc534b15cd4005b7b86ac2da3c2c7b", + "Name": "Data.StringifyJSON", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 6755.6831788535565, + "Y": -268.81154154207525 + }, + { + "Id": "64f2e1a7c4ac469881b19f5022fd19b0", + "Name": "Data.ParseJSON", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 7080.662187617822, + "Y": -268.331800044577 + }, + { + "Id": "d6e5014acdb04575bffd9b032bf58eea", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 4824.242169143837, + "Y": 1900.202444625895 + }, + { + "Id": "320d895b7c3b48f8ac998d3101c682d5", + "Name": "Curve.Reverse", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 6300.942412386643, + "Y": -488.3880068639737 + }, + { + "Id": "86fef9a8660a493f98e4d47f99602b30", + "Name": "Polygon.RegularPolygon", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 5671.276533833724, + "Y": -2243.380091096892 + }, + { + "Id": "82e754608a44401bbb3eebac93d77552", + "Name": "PolyCurve.Points", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 7185.943835042494, + "Y": -1955.9177561064446 + }, + { + "Id": "5edc7aa4898843fa94814b16b3e0891a", + "Name": "Point.ByCoordinates", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 4815.085118978866, + "Y": -2343.0804771219096 + }, + { + "Id": "ae7225c1aef9439496018c8b373a8234", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 4550.098372568798, + "Y": -2100.451984301773 + }, + { + "Id": "0923217416ac45f7864aa6d54762536c", + "Name": "Vector.ByCoordinates", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 4815.085118978866, + "Y": -2131.0804771219096 + }, + { + "Id": "4ea522790bff4c63a8bdbbbc56eba126", + "Name": "Circle.ByCenterPointRadiusNormal", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": false, + "X": 5188.236990568914, + "Y": -2238.919978589542 + }, + { + "Id": "8aa5a742b1e3405caa8048a8ffb86f58", + "Name": "PolyCurve.Points", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 7186.275646688317, + "Y": -1807.0934886891137 + }, + { + "Id": "fdffd3224dbe4efabc77c0be194cfab0", + "Name": "Geometry.IsAlmostEqualTo", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 7533.769407835779, + "Y": -1901.6130685487906 + }, + { + "Id": "984e44d39da34ba4a4f27b3181d0e276", + "Name": "Geometry.IsAlmostEqualTo", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 7754.250436552017, + "Y": -378.27800971563283 + }, + { + "Id": "17deaea071a24b2fbb5ea835e18b34d6", + "Name": "PolyCurve.Points", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 7378.123684677753, + "Y": -263.7153363471948 + }, + { + "Id": "87fb7987a8fb4996b33e6a3e4f0bbb68", + "Name": "PolyCurve.Points", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 6743.109817327944, + "Y": -482.143893523541 + }, + { + "Id": "ae9bf231fb6045d282face56dd1c72e0", + "Name": "Geometry.IsAlmostEqualTo", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 7768.521103099342, + "Y": 683.5990080410284 + }, + { + "Id": "176e21b75e164901aca5d1c903b8f879", + "Name": "PolyCurve.Points", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 7363.761360498277, + "Y": 833.952919817968 + }, + { + "Id": "68c594b724fb465082e1cf0dddfff6ae", + "Name": "PolyCurve.Points", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 6781.114751354775, + "Y": 512.9186832846165 + }, + { + "Id": "0ffb03a5b33e48caaf53b2898c226f50", + "Name": "Geometry.IsAlmostEqualTo", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 7848.02380871986, + "Y": 1943.2498812819047 + }, + { + "Id": "b95e88eee52e43b59d8291c624bbdc7b", + "Name": "PolyCurve.Points", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 7415.203998339469, + "Y": 2066.211477552558 + }, + { + "Id": "5134ea2b145147c29df0b1fb34abb3ca", + "Name": "PolyCurve.Points", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 6916.090911189532, + "Y": 1811.8065656699403 + }, + { + "Id": "015f80f917374031b345b46b5a8d54ca", + "Name": "List.AllTrue", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 9493.047667440718, + "Y": -2322.092285479179 + } + ], + "Annotations": [ + { + "Id": "7bdb35a35acb42988897ddbbdf54272b", + "Title": "All True", + "DescriptionText": "", + "IsExpanded": true, + "WidthAdjustment": 0.0, + "HeightAdjustment": 0.0, + "Nodes": [ + "015f80f917374031b345b46b5a8d54ca" + ], + "HasNestedGroups": false, + "Left": 9483.047667440718, + "Top": -2395.092285479179, + "Width": 196.0, + "Height": 205.0, + "FontSize": 36.0, + "GroupStyleId": "00000000-0000-0000-0000-000000000000", + "InitialTop": -2322.092285479179, + "InitialHeight": 145.0, + "TextblockHeight": 63.0, + "Background": "#FFC1D676" + } + ], + "X": -687.320913950349, + "Y": 623.6076081340109, + "Zoom": 0.15764953968355175 + } +} \ No newline at end of file diff --git a/test/core/json/Curve_Rectangle_JSONParsing.dyn b/test/core/json/Curve_Rectangle_JSONParsing.dyn new file mode 100644 index 00000000000..87074b41480 --- /dev/null +++ b/test/core/json/Curve_Rectangle_JSONParsing.dyn @@ -0,0 +1,4050 @@ +{ + "Uuid": "6bdfb0fe-b31e-4c71-8f79-7fc29c53e3ac", + "IsCustomNode": false, + "Description": "", + "Name": "Curve_Rectangle_JSONParsing", + "ElementResolver": { + "ResolutionMap": {} + }, + "Inputs": [], + "Outputs": [], + "Nodes": [ + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "ed28fb93e5484598bd1bbb4f66d2c27c", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "ddaff23e6e914392808a10f64144bda3", + "Name": "values", + "Description": "A List of values\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "ede79e2b0882454ebd19fc34167bfc41", + "Name": "json", + "Description": "A JSON string where primitive types (e.g. double, int, boolean), Lists, and Dictionary's will be turned into the associated JSON type.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Data.StringifyJSON@var[]..[]", + "Replication": "Auto", + "Description": "Stringify converts an arbitrary value or a list of arbitrary values to JSON. Replication can be used to apply the operation over a list, producing a list of JSON strings.\n\nData.StringifyJSON (values: var[]..[]): string" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "a14e625f30d54fce81a1933543e778b5", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "e0ca394d04ca41f3b8174568180ca34e", + "Name": "json", + "Description": "A JSON string\n\nstring", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "f41ef00532644b0892cd7a2dd0f62c8e", + "Name": "result", + "Description": "The result type depends on the content of the input string. The result type can be a primitive value (e.g. string, boolean, double), a List, or a Dictionary.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Data.ParseJSON@string", + "Replication": "Auto", + "Description": "Parse converts an arbitrary JSON string to a value. It is the opposite of JSON.Stringify.\n\nData.ParseJSON (json: string): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "f0e1505d50c04577aad94f2e49faa9f6", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "62259f31de654afcb3fad3c003383e3e", + "Name": "geometry", + "Description": "Autodesk.DesignScript.Geometry.Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "297c0d29ef9d4d9a8f47ed6b166ba971", + "Name": "other", + "Description": "Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "e929ced36aca4057aa5ca243dd8629de", + "Name": "bool", + "Description": "bool", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Geometry.IsAlmostEqualTo@Autodesk.DesignScript.Geometry.Geometry", + "Replication": "Auto", + "Description": "Check if the two objects have the same representational geometry or numerical values\n\nGeometry.IsAlmostEqualTo (other: Geometry): bool" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "c5431f2230a54b53bef8db7fa7722bbf", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "85f4c4f0e5404619a0e20d724080e930", + "Name": "geometry", + "Description": "Autodesk.DesignScript.Geometry.Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "0d0b9036e1f24fec8fef464cfe5b04c6", + "Name": "mirrorPlane", + "Description": "Plane", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "59bb1ff9f55a4cb8af01c4d219f8128c", + "Name": "Geometry", + "Description": "Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Geometry.Mirror@Autodesk.DesignScript.Geometry.Plane", + "Replication": "Auto", + "Description": "Mirror the object across the input Plane\n\nGeometry.Mirror (mirrorPlane: Plane): Geometry" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "223c8a4c031c4ae093f3fb7e1901b27f", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "92ac962ee1f04d37a7fa4990ce60e766", + "Name": "json", + "Description": "A JSON string\n\nstring", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "7044cf65d6144910b802edb85a274e51", + "Name": "result", + "Description": "The result type depends on the content of the input string. The result type can be a primitive value (e.g. string, boolean, double), a List, or a Dictionary.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Data.ParseJSON@string", + "Replication": "Auto", + "Description": "Parse converts an arbitrary JSON string to a value. It is the opposite of JSON.Stringify.\n\nData.ParseJSON (json: string): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "e86a4398b0a844008ad5d6f80c913106", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "341635ee65f64c8897f2de21c3d187f6", + "Name": "geometry", + "Description": "Autodesk.DesignScript.Geometry.Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "d9ef5521e8104d6b86274042ad8f4fdb", + "Name": "other", + "Description": "Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "2d611cfadbb144fe8014da91aaf081f9", + "Name": "bool", + "Description": "bool", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Geometry.IsAlmostEqualTo@Autodesk.DesignScript.Geometry.Geometry", + "Replication": "Auto", + "Description": "Check if the two objects have the same representational geometry or numerical values\n\nGeometry.IsAlmostEqualTo (other: Geometry): bool" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "8d2ba25b0c464d9a8d51c90db5f2755a", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "526ecca2dc234cd8adca5ca8f5337de3", + "Name": "values", + "Description": "A List of values\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "4e27cd524d674b4b9f1218688f7e51de", + "Name": "json", + "Description": "A JSON string where primitive types (e.g. double, int, boolean), Lists, and Dictionary's will be turned into the associated JSON type.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Data.StringifyJSON@var[]..[]", + "Replication": "Auto", + "Description": "Stringify converts an arbitrary value or a list of arbitrary values to JSON. Replication can be used to apply the operation over a list, producing a list of JSON strings.\n\nData.StringifyJSON (values: var[]..[]): string" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "a0fcfe276bb148c38363a2a9329ff8c6", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "3368257c965240dab164ce44891072a8", + "Name": "x", + "Description": "X coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "2c86775eb1074267914acf6a2feec4f9", + "Name": "y", + "Description": "Y coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "a424723d790d48e096322c9fb0a5ae13", + "Name": "z", + "Description": "Z coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "168bcb9eacad45908f79d3c45cce2c27", + "Name": "Point", + "Description": "Point created by coordinates", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Point.ByCoordinates@double,double,double", + "Replication": "Auto", + "Description": "Form a Point given 3 cartesian coordinates\n\nPoint.ByCoordinates (x: double = 0, y: double = 0, z: double = 0): Point" + }, + { + "ConcreteType": "CoreNodeModels.Input.DoubleInput, CoreNodeModels", + "NumberType": "Double", + "Id": "f588cf20edac424492e5f61cd8b4e248", + "NodeType": "NumberInputNode", + "Inputs": [], + "Outputs": [ + { + "Id": "fc60815c52f0417c9ec181d16a179d1c", + "Name": "", + "Description": "Double", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Creates a number", + "InputValue": 2.0 + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "ae01d16856e04ee98e942873c3311f1b", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "a1791bb7715643f29421a0e870e053b5", + "Name": "x", + "Description": "X coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "8e3d20c052614b71bbbf784b67d8b559", + "Name": "y", + "Description": "Y coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "cbbff09d65244e2bb8a33ee19d3d4081", + "Name": "z", + "Description": "Z coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "ba21f1d5053f459ebc8f4c08f04574e0", + "Name": "Vector", + "Description": "Vector created by coordinates", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Vector.ByCoordinates@double,double,double", + "Replication": "Auto", + "Description": "Form a Vector by 3 Euclidean coordinates\n\nVector.ByCoordinates (x: double = 0, y: double = 0, z: double = 0): Vector" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "bddda9cf3fba49abbc8adbf8970cada6", + "NodeType": "FunctionNode", + "Inputs": [], + "Outputs": [ + { + "Id": "74a4e0ec12304a6fb0e2898f6ec92dd5", + "Name": "Plane", + "Description": "Plane at XZ plane of world", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Plane.XZ", + "Replication": "Auto", + "Description": "Creates a plane in the world XZ plane\n\nPlane.XZ ( ): Plane" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "53fb98609ab24c28a8d453c51e584542", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "7170b996fa4548c2a54ea10fa23270d1", + "Name": "x", + "Description": "double\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "b7a6f47009b7424ebbbb1b74c2b28146", + "Name": "y", + "Description": "double\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "ffcf590ed156499096c70814aabcc2d3", + "Name": "z", + "Description": "double\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "487fd07181924571b73e6e24046a05ce", + "Name": "CoordinateSystem", + "Description": "CoordinateSystem", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.CoordinateSystem.ByOrigin@double,double,double", + "Replication": "Auto", + "Description": "Create a CoordinateSystem with origin at X, Y, and Z locations, with X and Y Axes set as WCS X and Y Axes.\n\nCoordinateSystem.ByOrigin (x: double = 0, y: double = 0, z: double = 0): CoordinateSystem" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "16e543ccbaf748269b1c0c8b64e38a14", + "NodeType": "CodeBlockNode", + "Inputs": [], + "Outputs": [ + { + "Id": "9877b21d1a1848ea9c816a5762376947", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "055c94e81fb4468ca37560683c0d0804", + "Name": "", + "Description": "Value of expression at line 2", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "4cf1f68b80db4bfab717045ca611d4cc", + "Name": "", + "Description": "Value of expression at line 3", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "2;\n3;\n4;" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "8533e802506546c88cf46efb60cb30ef", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "377f4d47b8494304bfeea26b31d9a869", + "Name": "coordinateSystem", + "Description": "Autodesk.DesignScript.Geometry.CoordinateSystem", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "ae7fdab182bc42378beefedf857e6c70", + "Name": "origin", + "Description": "Origin point\n\nPoint", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "2886cbcea5b941ef8d7f6d23835d1b02", + "Name": "axis", + "Description": "Vector axis for rotation\n\nVector", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "0488f30ec00645bbadbc1de3ed188375", + "Name": "degrees", + "Description": "Degrees to rotate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "8bb5cb937da94fdea104b79edec941dd", + "Name": "CoordinateSystem", + "Description": "Rotated coordinate system", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.CoordinateSystem.Rotate@Autodesk.DesignScript.Geometry.Point,Autodesk.DesignScript.Geometry.Vector,double", + "Replication": "Auto", + "Description": "Rotates an object around an origin and an axis by a specified degree\n\nCoordinateSystem.Rotate (origin: Point, axis: Vector, degrees: double = 0): CoordinateSystem" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "37395a69d48c4a7b99610a0c96cfbc22", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "08c9f84a85d441e0bc050bec55b83d1f", + "Name": "x", + "Description": "X coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "dedf5f52faeb44618f7706cbe77793e5", + "Name": "y", + "Description": "Y coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "80c41af97ffc46b5be82b063de8227ca", + "Name": "z", + "Description": "Z coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "3751954e148e4600a3d080325fb00e70", + "Name": "Point", + "Description": "Point created by coordinates", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Point.ByCoordinates@double,double,double", + "Replication": "Auto", + "Description": "Form a Point given 3 cartesian coordinates\n\nPoint.ByCoordinates (x: double = 0, y: double = 0, z: double = 0): Point" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "01740c040af643349a8d72e79a7c7dd4", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "3c6c5102efe14291914e1e4bde9a7f95", + "Name": "x", + "Description": "X coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "f06dae9eb561423ab263aee0b278f141", + "Name": "y", + "Description": "Y coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "a914b32db99548cd8773b1c78cddd80f", + "Name": "z", + "Description": "Z coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "d285714acf534e79ad8f2adaf87cef82", + "Name": "Vector", + "Description": "Vector created by coordinates", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Vector.ByCoordinates@double,double,double", + "Replication": "Auto", + "Description": "Form a Vector by 3 Euclidean coordinates\n\nVector.ByCoordinates (x: double = 0, y: double = 0, z: double = 0): Vector" + }, + { + "ConcreteType": "CoreNodeModels.Input.DoubleInput, CoreNodeModels", + "NumberType": "Double", + "Id": "a0d2de17c88643ceaa26c85513637113", + "NodeType": "NumberInputNode", + "Inputs": [], + "Outputs": [ + { + "Id": "cdd3f7df6009472d97a31806a64ee36e", + "Name": "", + "Description": "Double", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Creates a number", + "InputValue": 24.0 + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "b6f93229de91434794d004917d47136b", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "369049b3e19b4524a0118c3012f541c9", + "Name": "coordinateSystem", + "Description": "Autodesk.DesignScript.Geometry.CoordinateSystem", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "1715dbfc74894bdab1bf54872a02b062", + "Name": "amount", + "Description": "Amount to scale\n\ndouble\nDefault value : 1", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "02b3ce6e7dbc494e9e8b1e43637d201e", + "Name": "CoordinateSystem", + "Description": "Scaled coordinate system", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.CoordinateSystem.Scale@double", + "Replication": "Auto", + "Description": "Scale uniformly around the origin\n\nCoordinateSystem.Scale (amount: double = 1): CoordinateSystem" + }, + { + "ConcreteType": "CoreNodeModels.Input.DoubleInput, CoreNodeModels", + "NumberType": "Double", + "Id": "121c70cf049e40b59687d2a0f5a9c373", + "NodeType": "NumberInputNode", + "Inputs": [], + "Outputs": [ + { + "Id": "f746b7614ea54da087e59bfd1dce3531", + "Name": "", + "Description": "Double", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Creates a number", + "InputValue": 2.3 + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "2a792b15395a4536bdd6b37f4746dd54", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "b271db31b8284336a80af2546ac10d40", + "Name": "geometry", + "Description": "Autodesk.DesignScript.Geometry.Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "ac41e4fd6c8245ab86014aa864e8ddee", + "Name": "fromCoordinateSystem", + "Description": "CoordinateSystem", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "c134f78cc3994d03839e87f1555e2724", + "Name": "contextCoordinateSystem", + "Description": "CoordinateSystem", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "f9dde021372246138c1de14bf4dde5a8", + "Name": "Geometry", + "Description": "Transformed Geometry.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Geometry.Transform@Autodesk.DesignScript.Geometry.CoordinateSystem,Autodesk.DesignScript.Geometry.CoordinateSystem", + "Replication": "Auto", + "Description": "Transforms this geometry from source CoordinateSystem to a new context CoordinateSystem.\n\nGeometry.Transform (fromCoordinateSystem: CoordinateSystem, contextCoordinateSystem: CoordinateSystem): Geometry" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "871816cfb04e4293a4d3894dc32beef5", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "fe379819f4324fb8b2a3ff3cd7d98d8b", + "Name": "x", + "Description": "double\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "3b3095c641c24bcd97239825ca0ce9ec", + "Name": "y", + "Description": "double\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "b75b65929e1d4f7a88f280b7c6c34a42", + "Name": "CoordinateSystem", + "Description": "CoordinateSystem", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.CoordinateSystem.ByOrigin@double,double", + "Replication": "Auto", + "Description": "Create a CoordinateSystem with origin at X and Y locations, with X and Y Axes set as WCS X and Y Axes. Z defaults to 0.\n\nCoordinateSystem.ByOrigin (x: double = 0, y: double = 0): CoordinateSystem" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "42bd06520fbc49479cf3d6560798c5a3", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "af667ee80cac4837a2946838b3f88ba0", + "Name": "origin", + "Description": "Origin point of plane\n\nPoint\nDefault value : Autodesk.DesignScript.Geometry.Point.ByCoordinates(0, 0, 0)", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "661308a807ca40d999220e30daba870f", + "Name": "normal", + "Description": "Normal direction vector of plane\n\nVector\nDefault value : Autodesk.DesignScript.Geometry.Vector.ByCoordinates(0, 0, 1)", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "d0daca811fb14b1fbb93eefb6de3d69c", + "Name": "Plane", + "Description": "Plane created by origin and normal", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Plane.ByOriginNormal@Autodesk.DesignScript.Geometry.Point,Autodesk.DesignScript.Geometry.Vector", + "Replication": "Auto", + "Description": "Create a Plane centered at root Point, with input normal Vector.\n\nPlane.ByOriginNormal (origin: Point = Autodesk.DesignScript.Geometry.Point.ByCoordinates(0, 0, 0), normal: Vector = Autodesk.DesignScript.Geometry.Vector.ByCoordinates(0, 0, 1)): Plane" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "bb6672a948a2409ca3a2df7ccbe54a39", + "NodeType": "CodeBlockNode", + "Inputs": [], + "Outputs": [ + { + "Id": "fbe7d6c3b20b4cc2898546886ec1f9cf", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "2a8bccbc1a5b4cb6a4325c2d6ed82a21", + "Name": "", + "Description": "Value of expression at line 2", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "3e9519ac955e4269b02b54b3f7fdba11", + "Name": "", + "Description": "Value of expression at line 3", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "1;\n2.3;\n4;" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "9754cbd66d4842419a6899f372a80aee", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "002139ad743746048b44c301e148e8c7", + "Name": "list", + "Description": "List to be checked on whether all items are true.\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "c97b19167bf84ce7a88ea03437a81df1", + "Name": "bool", + "Description": "True if all items from list are true, false if one or more items is not true", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.List.AllTrue@var[]..[]", + "Replication": "Auto", + "Description": "Determines if all items in the given list is a boolean and has a true value.\n\nList.AllTrue (list: var[]..[]): bool" + }, + { + "ConcreteType": "CoreNodeModels.CreateList, CoreNodeModels", + "VariableInputPorts": true, + "Id": "fe8255d9034840d0b6dc415adeca9b18", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "8ddd3fadebee45c49c1d8efa44d52216", + "Name": "item0", + "Description": "Item Index #0", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "cc21380997e04cbd844370ebaf133d81", + "Name": "item1", + "Description": "Item Index #1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "23511aea76a4416f8b8eaa5f72c2dd8c", + "Name": "item2", + "Description": "Item Index #2", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "21cd99193b0b4dceb444f85874cbd641", + "Name": "item3", + "Description": "Item Index #3", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "075059ae3db14a988a5f526f0daeb372", + "Name": "item4", + "Description": "Item Index #4", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "008df1fb52514b008162cc10d5164676", + "Name": "item5", + "Description": "Item Index #5", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "f8661d74b7da4836a5d454fd828a580a", + "Name": "item6", + "Description": "Item Index #6", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "3e9ba8c506904c969246b58f8f1181bf", + "Name": "item7", + "Description": "Item Index #7", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "f7c0858277fb47c1b4c1015c51cd2938", + "Name": "list", + "Description": "A list (type: var[]..[])", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Makes a new list from the given inputs" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "4c96f65c18034a5883dad0e0b1f0feb1", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "f5de52b33bc14b639c14b01ededbccee", + "Name": "x", + "Description": "Basic type object to compare (e.g. bool, int, double, string, etc.)\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "849eb40f63cf4a9199bc1977aa49caa9", + "Name": "y", + "Description": "Basic type object to compare (e.g. bool, int, double, string, etc.)\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "1f99d58b0781473fabd65d9435daf334", + "Name": "bool", + "Description": "Result of equality check", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "==@var[]..[],var[]..[]", + "Replication": "Auto", + "Description": "Compares if x and y are equal\n\n== (x: var[]..[], y: var[]..[]): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "8c1a173d572444af9c04e90329a7a1cb", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "bf9bce34535d4f2ebfd431812de1aa0a", + "Name": "object", + "Description": "Object to query type\n\nvar", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "aa3f1d66ddd64c7e88eb88815d1112f4", + "Name": "string", + "Description": "Type of object.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Object.Type@var", + "Replication": "Auto", + "Description": "Returns the type of object represented as string.\n\nObject.Type (object: var): string" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "e6da715afc6e477a9f632953d25296f4", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "70a5e136a1764c9499ac81e38de62490", + "Name": "plane", + "Description": "Plane used to center rectangle\n\nPlane", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "aace8a9797d14ccdaa1eae264eafecdd", + "Name": "width", + "Description": "Width of rectangle\n\ndouble\nDefault value : 1", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "688b74688af248aeb4d6ca24e7650441", + "Name": "length", + "Description": "Length of rectangle\n\ndouble\nDefault value : 1", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "5529668b21fc42dc8dea798d47f81d90", + "Name": "Rectangle", + "Description": "Rectangle created by width and length", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Rectangle.ByWidthLength@Autodesk.DesignScript.Geometry.Plane,double,double", + "Replication": "Auto", + "Description": "Create a Rectangle centered at input Plane root, with input width (Plane X axis length), and length (Plane Y axis length).\n\nRectangle.ByWidthLength (plane: Plane, width: double = 1, length: double = 1): Rectangle" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "352151cfdc2b4ffea00f1861a5ca87ae", + "NodeType": "CodeBlockNode", + "Inputs": [], + "Outputs": [ + { + "Id": "cebae1a36ea949f3a6544c99a1c83ceb", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "e7d823a44cbc43f697106ec7858abbef", + "Name": "", + "Description": "Value of expression at line 2", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "3;\n4;" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "9ad938f932794d63b7226ec2d15daffe", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "26b1886ffc1041609609f78ddea12a44", + "Name": "polyCurve", + "Description": "Autodesk.DesignScript.Geometry.PolyCurve", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "92cd253fc4dc476baad105f4b8b4ff8f", + "Name": "Curve[]", + "Description": "Curve[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.PolyCurve.Curves", + "Replication": "Auto", + "Description": "Returns curves of the polycurve\n\nPolyCurve.Curves ( ): Curve[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "2d924022b8cf4237993545fceb15a0af", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "7b8063a769b642ab86b8ee97880a018e", + "Name": "rectangle", + "Description": "Autodesk.DesignScript.Geometry.Rectangle", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "ce94092a05d5407c987f4ef55987f4d0", + "Name": "double", + "Description": "double", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Rectangle.Height", + "Replication": "Auto", + "Description": "The height of the Rectangle\n\nRectangle.Height: double" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "f1874e30107f4b80b6dbfa760eaa88a9", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "7254320b6def4178bc79863512fdfb9f", + "Name": "rectangle", + "Description": "Autodesk.DesignScript.Geometry.Rectangle", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "d9de1f54897647d6a0738d7a01aab010", + "Name": "double", + "Description": "double", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Rectangle.Width", + "Replication": "Auto", + "Description": "The width of the Rectangle\n\nRectangle.Width: double" + }, + { + "ConcreteType": "CoreNodeModels.CreateList, CoreNodeModels", + "VariableInputPorts": true, + "Id": "7a45c93d98aa4cbf9bdbb523d997f81c", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "3ebab3f2f51c4d3a8ec7ad785cf0d6a3", + "Name": "item0", + "Description": "Item Index #0", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "f506752d6fec417e99d7c9325246c407", + "Name": "item1", + "Description": "Item Index #1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "69955ad3462d4c8387a505c046f344bf", + "Name": "item2", + "Description": "Item Index #2", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "be1c26c607414074a9daaac2da1d9d2e", + "Name": "list", + "Description": "A list (type: var[]..[])", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Makes a new list from the given inputs" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "ac04f72f1e974580a0085525f8d5f40b", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "388a9c89256349a793a0fdd6798cb75c", + "Name": "object", + "Description": "Object to query type\n\nvar", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "28becca7a1744074b959fd0d343e8d8b", + "Name": "string", + "Description": "Type of object.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Object.Type@var", + "Replication": "Auto", + "Description": "Returns the type of object represented as string.\n\nObject.Type (object: var): string" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "4d8c480ae6cd41e78c002a0257d3b043", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "e607fc272b984b569494670bb6dcd799", + "Name": "rectangle", + "Description": "Autodesk.DesignScript.Geometry.Rectangle", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "539f5fe5262d453fbb62ef5c9a44d1ad", + "Name": "double", + "Description": "double", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Rectangle.Width", + "Replication": "Auto", + "Description": "The width of the Rectangle\n\nRectangle.Width: double" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "955dfd02cd614c848d7813897cb40519", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "38673b7fce0c4d23905b172d07bd9f53", + "Name": "rectangle", + "Description": "Autodesk.DesignScript.Geometry.Rectangle", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "65f33746ece14a4999a835a94536b92f", + "Name": "double", + "Description": "double", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Rectangle.Height", + "Replication": "Auto", + "Description": "The height of the Rectangle\n\nRectangle.Height: double" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "5ed188f22dfc42db884e0293b7abcb48", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "940a8a43ff4b498e91045d701160b943", + "Name": "polyCurve", + "Description": "Autodesk.DesignScript.Geometry.PolyCurve", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "48be55e1ae4442c080e92241f6fdfdf3", + "Name": "Curve[]", + "Description": "Curve[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.PolyCurve.Curves", + "Replication": "Auto", + "Description": "Returns curves of the polycurve\n\nPolyCurve.Curves ( ): Curve[]" + }, + { + "ConcreteType": "CoreNodeModels.CreateList, CoreNodeModels", + "VariableInputPorts": true, + "Id": "fefbc7cbb6604f7499bd5e0c5a50076e", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "ce3cb739acf44620a71c79c2c5cb8056", + "Name": "item0", + "Description": "Item Index #0", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "1793bc832c244e82bdb541be7e6dc803", + "Name": "item1", + "Description": "Item Index #1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "9e280c2c7afe495390e8c4b0b6d660fd", + "Name": "item2", + "Description": "Item Index #2", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "3fbfe11f96294de397c974f2d608ab4d", + "Name": "list", + "Description": "A list (type: var[]..[])", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Makes a new list from the given inputs" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "644b7e0248784e5eaab778f7956aa0f1", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "845f36c9dce94e12bc3a4c7c44b46b12", + "Name": "geometry", + "Description": "Autodesk.DesignScript.Geometry.Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "021a207178cd4503b73381debe1e776c", + "Name": "other", + "Description": "Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "6d768f0904014e5a814c306de5828eff", + "Name": "bool", + "Description": "bool", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Geometry.IsAlmostEqualTo@Autodesk.DesignScript.Geometry.Geometry", + "Replication": "Auto", + "Description": "Check if the two objects have the same representational geometry or numerical values\n\nGeometry.IsAlmostEqualTo (other: Geometry): bool" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "8c8b8d0483aa4043847e989db43f0997", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "ec555457a17d4b29be63e9c516318d99", + "Name": "rectangle", + "Description": "Autodesk.DesignScript.Geometry.Rectangle", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "907d70a94d5d401d9e1e6af1ce6279c9", + "Name": "double", + "Description": "double", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Rectangle.Width", + "Replication": "Auto", + "Description": "The width of the Rectangle\n\nRectangle.Width: double" + }, + { + "ConcreteType": "CoreNodeModels.CreateList, CoreNodeModels", + "VariableInputPorts": true, + "Id": "c1b5c4bf0861463db65b30ed9dd276f2", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "a9eec514e623430f96d582c3c82ed026", + "Name": "item0", + "Description": "Item Index #0", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "bd5fc5a58c884882bc14af55c5eee1b9", + "Name": "item1", + "Description": "Item Index #1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "e7cb9c75b22f40baaa9ed5ab89033992", + "Name": "list", + "Description": "A list (type: var[]..[])", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Makes a new list from the given inputs" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "1920257c93694121ace91f47df8f02aa", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "5baf2f6ae6a34179b485d6acb1afbbee", + "Name": "rectangle", + "Description": "Autodesk.DesignScript.Geometry.Rectangle", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "a80e93b4bca549b7b99bea8e2fccc6ae", + "Name": "double", + "Description": "double", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Rectangle.Height", + "Replication": "Auto", + "Description": "The height of the Rectangle\n\nRectangle.Height: double" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "ba8f87b92c5e4d20b4fff5357073a4ff", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "aec8fe161cfd43f1b4c703f6dd0294ee", + "Name": "polyCurve", + "Description": "Autodesk.DesignScript.Geometry.PolyCurve", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "663f0c6b54874241aaa8c354892dc82d", + "Name": "Curve[]", + "Description": "Curve[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.PolyCurve.Curves", + "Replication": "Auto", + "Description": "Returns curves of the polycurve\n\nPolyCurve.Curves ( ): Curve[]" + }, + { + "ConcreteType": "CoreNodeModels.CreateList, CoreNodeModels", + "VariableInputPorts": true, + "Id": "96fe8fbb77ad4ee89c37283f5edf9803", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "85a4edf9161b40c1978b2e25a4cfb1e7", + "Name": "item0", + "Description": "Item Index #0", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "80662a069aad44f3b57d3608e4208203", + "Name": "item1", + "Description": "Item Index #1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "de62abdaf4ed45a18978cf86fc99863a", + "Name": "list", + "Description": "A list (type: var[]..[])", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Makes a new list from the given inputs" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "757fd443e1534467abd020a874a6a3c1", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "3e7b6e8c817b4703afca8c14f5ad129f", + "Name": "rectangle", + "Description": "Autodesk.DesignScript.Geometry.Rectangle", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "9cef86b7d44248a39dbc9916faee282d", + "Name": "double", + "Description": "double", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Rectangle.Height", + "Replication": "Auto", + "Description": "The height of the Rectangle\n\nRectangle.Height: double" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "26ff219f2986461abfdb9d16283d3eec", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "a87c530b06884bdfa0be3e32c31e6085", + "Name": "rectangle", + "Description": "Autodesk.DesignScript.Geometry.Rectangle", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "66f5bc46b51c4ece8f80f37606c8bdcd", + "Name": "double", + "Description": "double", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Rectangle.Width", + "Replication": "Auto", + "Description": "The width of the Rectangle\n\nRectangle.Width: double" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "a91f3cc1f32a4585af96b2da169a9f98", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "152ddf05e973415b898c76c578b602be", + "Name": "polyCurve", + "Description": "Autodesk.DesignScript.Geometry.PolyCurve", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "e0088bcf720041aebd288751e9abd339", + "Name": "Curve[]", + "Description": "Curve[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.PolyCurve.Curves", + "Replication": "Auto", + "Description": "Returns curves of the polycurve\n\nPolyCurve.Curves ( ): Curve[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "d9b5def5e7b14c3ea5045125b4c5db4a", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "09852bb206bc42b68328c3b3158022cc", + "Name": "x", + "Description": "Basic type object to compare (e.g. bool, int, double, string, etc.)\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "fd7d9a9378d44e0fabca2e1fed8f4fbe", + "Name": "y", + "Description": "Basic type object to compare (e.g. bool, int, double, string, etc.)\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "ff6b4a0f7bdd4ba1bbb7f092601d492e", + "Name": "bool", + "Description": "Result of equality check", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "==@var[]..[],var[]..[]", + "Replication": "Auto", + "Description": "Compares if x and y are equal\n\n== (x: var[]..[], y: var[]..[]): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "be153f359ad84fe7adc12b44b52e1f30", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "e6fa03ad470f46f0b9dea37b63aede66", + "Name": "rectangle", + "Description": "Autodesk.DesignScript.Geometry.Rectangle", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "3b7eaf99f05745c3b8378b08c07d4622", + "Name": "double", + "Description": "double", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Rectangle.Width", + "Replication": "Auto", + "Description": "The width of the Rectangle\n\nRectangle.Width: double" + }, + { + "ConcreteType": "CoreNodeModels.CreateList, CoreNodeModels", + "VariableInputPorts": true, + "Id": "6ef6d64b846242cd84d429d5efe7d5ab", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "b97f3f4621f243f8a47d4905ec959f3f", + "Name": "item0", + "Description": "Item Index #0", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "70837b152141489e9c3bc598d5612c9d", + "Name": "item1", + "Description": "Item Index #1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "a1884287816b4286a6bd060ada81cd1a", + "Name": "list", + "Description": "A list (type: var[]..[])", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Makes a new list from the given inputs" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "d6fcca0c943646d6b17e7ca625dd7574", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "5b6c1867922f40d6bede1cc65ca08e0b", + "Name": "rectangle", + "Description": "Autodesk.DesignScript.Geometry.Rectangle", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "85e54b59a42c461997bd103023aa7a17", + "Name": "double", + "Description": "double", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Rectangle.Height", + "Replication": "Auto", + "Description": "The height of the Rectangle\n\nRectangle.Height: double" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "7eb082052e474b8b8118116fcc3d2c06", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "01eae41337da4ece9e201957cbf8694d", + "Name": "polyCurve", + "Description": "Autodesk.DesignScript.Geometry.PolyCurve", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "6556d2c5cce34b5aaf9bdee93a55c844", + "Name": "Curve[]", + "Description": "Curve[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.PolyCurve.Curves", + "Replication": "Auto", + "Description": "Returns curves of the polycurve\n\nPolyCurve.Curves ( ): Curve[]" + }, + { + "ConcreteType": "CoreNodeModels.CreateList, CoreNodeModels", + "VariableInputPorts": true, + "Id": "3271ef4e6fb444c8a9f1556c25618f17", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "5872d9aca53948d1a7b187f3e1815f6d", + "Name": "item0", + "Description": "Item Index #0", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "909ef76a94ab408daf054d42ef46b0bb", + "Name": "item1", + "Description": "Item Index #1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "1a892407db7a40988ff4d1ea11e8150c", + "Name": "list", + "Description": "A list (type: var[]..[])", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Makes a new list from the given inputs" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "3d6c02aaa2504a7ca8822953d73d1f63", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "2d25d5b122924dad8fb6ccebac919bc2", + "Name": "x", + "Description": "Basic type object to compare (e.g. bool, int, double, string, etc.)\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "d06cc1b7a2ac49958f32af0ca47ea697", + "Name": "y", + "Description": "Basic type object to compare (e.g. bool, int, double, string, etc.)\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "8df1df55d6b4431f8691870afdb6b208", + "Name": "bool", + "Description": "Result of equality check", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "==@var[]..[],var[]..[]", + "Replication": "Auto", + "Description": "Compares if x and y are equal\n\n== (x: var[]..[], y: var[]..[]): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "5c0756124abd4ef697eb8bc8588e2f84", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "c65a51e641714882ab69293d7b719dce", + "Name": "rectangle", + "Description": "Autodesk.DesignScript.Geometry.Rectangle", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "aedd61563f4941feb2744fa6bc6228cd", + "Name": "double", + "Description": "double", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Rectangle.Height", + "Replication": "Auto", + "Description": "The height of the Rectangle\n\nRectangle.Height: double" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "36416026a49e4d33a41eae347c73f9e2", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "45dbbde905734eca8f99fcfe62cb9a56", + "Name": "rectangle", + "Description": "Autodesk.DesignScript.Geometry.Rectangle", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "c5eb186bee9742a6aafd538f6ef65b90", + "Name": "double", + "Description": "double", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Rectangle.Width", + "Replication": "Auto", + "Description": "The width of the Rectangle\n\nRectangle.Width: double" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "dc8983ca16d2440e8370b4367f33518b", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "2c7313a7ded3434c8c3c6d9dd3efb022", + "Name": "polyCurve", + "Description": "Autodesk.DesignScript.Geometry.PolyCurve", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "1fdc63724c0443ba8481e516d7f084b4", + "Name": "Curve[]", + "Description": "Curve[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.PolyCurve.Curves", + "Replication": "Auto", + "Description": "Returns curves of the polycurve\n\nPolyCurve.Curves ( ): Curve[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "95a3534c71354283821a59af987afe8b", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "29a2a309bed944e382e31b973464e0d9", + "Name": "geometry", + "Description": "Autodesk.DesignScript.Geometry.Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "d9f246f347fe47d08dcf95de85b874bd", + "Name": "other", + "Description": "Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "ff099203030341a999d71ab20da16c03", + "Name": "bool", + "Description": "bool", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Geometry.IsAlmostEqualTo@Autodesk.DesignScript.Geometry.Geometry", + "Replication": "Auto", + "Description": "Check if the two objects have the same representational geometry or numerical values\n\nGeometry.IsAlmostEqualTo (other: Geometry): bool" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "5d29e73d3de44379968091524e2757ad", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "14f772cdca84460c92b1cc67c0b4f3b6", + "Name": "json", + "Description": "A JSON string\n\nstring", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "b60cece5da2043b8bf38cb561c1b6775", + "Name": "result", + "Description": "The result type depends on the content of the input string. The result type can be a primitive value (e.g. string, boolean, double), a List, or a Dictionary.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Data.ParseJSON@string", + "Replication": "Auto", + "Description": "Parse converts an arbitrary JSON string to a value. It is the opposite of JSON.Stringify.\n\nData.ParseJSON (json: string): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "d9e420e2acbf4dcba670afd79fb4e8d4", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "9600674dcd734dcd82d7f984a6b87c6e", + "Name": "values", + "Description": "A List of values\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "38f7bf657ebd440294457abf25880f6b", + "Name": "json", + "Description": "A JSON string where primitive types (e.g. double, int, boolean), Lists, and Dictionary's will be turned into the associated JSON type.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Data.StringifyJSON@var[]..[]", + "Replication": "Auto", + "Description": "Stringify converts an arbitrary value or a list of arbitrary values to JSON. Replication can be used to apply the operation over a list, producing a list of JSON strings.\n\nData.StringifyJSON (values: var[]..[]): string" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "7eeda4efb67c45df98830f0d71ba8fe2", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "47530d206e264255b906401b1aeb1341", + "Name": "curve", + "Description": "Autodesk.DesignScript.Geometry.Curve", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "e95704f164254136ae3ae36654bfe0c8", + "Name": "Curve", + "Description": "A new Curve with the opposite direction", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Curve.Reverse", + "Replication": "Auto", + "Description": "Reverse the direction of the curve\n\nCurve.Reverse ( ): Curve" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "0d45e214589b4548be9c01238f748e18", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "2ffae2e3ed9044a8b04e5276260f89a6", + "Name": "rectangle", + "Description": "Autodesk.DesignScript.Geometry.Rectangle", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "c020ddd1505e4d62b47f3f3f616462ad", + "Name": "double", + "Description": "double", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Rectangle.Width", + "Replication": "Auto", + "Description": "The width of the Rectangle\n\nRectangle.Width: double" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "a00d2b02b5dc43b9be1f4337061042e0", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "dafdffe7bd2740d287eabbb5b37f4de8", + "Name": "rectangle", + "Description": "Autodesk.DesignScript.Geometry.Rectangle", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "de9ff58a2efe4d49aa44d31ea0b07aa8", + "Name": "double", + "Description": "double", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Rectangle.Height", + "Replication": "Auto", + "Description": "The height of the Rectangle\n\nRectangle.Height: double" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "0e3fb0a81adf412888c46fc840e7a18c", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "0ec1e09f2e8b4734828a41da93e28a50", + "Name": "polyCurve", + "Description": "Autodesk.DesignScript.Geometry.PolyCurve", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "6ba6e79a59a8458998c562c3afee8344", + "Name": "Curve[]", + "Description": "Curve[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.PolyCurve.Curves", + "Replication": "Auto", + "Description": "Returns curves of the polycurve\n\nPolyCurve.Curves ( ): Curve[]" + }, + { + "ConcreteType": "CoreNodeModels.CreateList, CoreNodeModels", + "VariableInputPorts": true, + "Id": "01d1dd0012d94f18abb7a493dfced29b", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "7b2237debd6e492e8df99ce35c49a7b2", + "Name": "item0", + "Description": "Item Index #0", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "1228a2cc806640088098855ace3a7308", + "Name": "item1", + "Description": "Item Index #1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "17f2b32450ef407cb3f1cd7f233e0844", + "Name": "list", + "Description": "A list (type: var[]..[])", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Makes a new list from the given inputs" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "a701bdbfe8f94c209f23cbb5802ef435", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "9e85312465f84c7abe1b0ccf4289c7de", + "Name": "x", + "Description": "Basic type object to compare (e.g. bool, int, double, string, etc.)\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "288f8dbe5f294ccd9763fbdf6301cbf7", + "Name": "y", + "Description": "Basic type object to compare (e.g. bool, int, double, string, etc.)\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "76847344c91848ad912108628425cbd8", + "Name": "bool", + "Description": "Result of equality check", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "==@var[]..[],var[]..[]", + "Replication": "Auto", + "Description": "Compares if x and y are equal\n\n== (x: var[]..[], y: var[]..[]): var[]..[]" + }, + { + "ConcreteType": "CoreNodeModels.CreateList, CoreNodeModels", + "VariableInputPorts": true, + "Id": "5db5340b9f394a8ca7aecc2cd79ffeac", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "22c25e446f9d48d7ae494f6fa707f244", + "Name": "item0", + "Description": "Item Index #0", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "3a3651faeab847cfa23bbf922f387017", + "Name": "item1", + "Description": "Item Index #1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "78361f7b5abe40f686f11c1811075dc3", + "Name": "list", + "Description": "A list (type: var[]..[])", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Makes a new list from the given inputs" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "9f0a852f687d4745951874f8cd237010", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "729c8465d87a4d09aa677563973bac8e", + "Name": "geometry", + "Description": "Autodesk.DesignScript.Geometry.Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "a54b5ba9b76d4617ac58386eaa7a42f2", + "Name": "other", + "Description": "Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "72166c6d21e34bd2be96159c46cd0716", + "Name": "bool", + "Description": "bool", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Geometry.IsAlmostEqualTo@Autodesk.DesignScript.Geometry.Geometry", + "Replication": "Auto", + "Description": "Check if the two objects have the same representational geometry or numerical values\n\nGeometry.IsAlmostEqualTo (other: Geometry): bool" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "75b388b8093e4576bf7789100ff8d2d0", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "5ba51e34b1874433855a8e3b6bd9f9a9", + "Name": "rectangle", + "Description": "Autodesk.DesignScript.Geometry.Rectangle", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "9d0b6d1aaddd430881e8650f2c9bf665", + "Name": "double", + "Description": "double", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Rectangle.Height", + "Replication": "Auto", + "Description": "The height of the Rectangle\n\nRectangle.Height: double" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "d8f6c8823c084aaa8ef1a06ee037be4c", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "292531881f6046a69c6b2b1f845c7a57", + "Name": "rectangle", + "Description": "Autodesk.DesignScript.Geometry.Rectangle", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "6a2a1f0bc2814104a5d1b5984862a352", + "Name": "double", + "Description": "double", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Rectangle.Width", + "Replication": "Auto", + "Description": "The width of the Rectangle\n\nRectangle.Width: double" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "123113d78d8840828ef3d05e55fbe1b0", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "532c2ce31ac547d0b08ce788465909b3", + "Name": "polyCurve", + "Description": "Autodesk.DesignScript.Geometry.PolyCurve", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "2a3adcd3d09a4b8bb880d7613dae67d0", + "Name": "Curve[]", + "Description": "Curve[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.PolyCurve.Curves", + "Replication": "Auto", + "Description": "Returns curves of the polycurve\n\nPolyCurve.Curves ( ): Curve[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "7d6801ed11b34a70867f3d19c422de2f", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "41adb33e249f4810930aeb0cb68c5c20", + "Name": "json", + "Description": "A JSON string\n\nstring", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "89b4e256c1e2430f8621aefd389253a7", + "Name": "result", + "Description": "The result type depends on the content of the input string. The result type can be a primitive value (e.g. string, boolean, double), a List, or a Dictionary.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Data.ParseJSON@string", + "Replication": "Auto", + "Description": "Parse converts an arbitrary JSON string to a value. It is the opposite of JSON.Stringify.\n\nData.ParseJSON (json: string): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "a2cc859dc95f40338a42c26558214e0a", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "6c6342e5ac2f45e896af913519d44bda", + "Name": "values", + "Description": "A List of values\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "0f154c7c6c09499d945c1f3c9c99631d", + "Name": "json", + "Description": "A JSON string where primitive types (e.g. double, int, boolean), Lists, and Dictionary's will be turned into the associated JSON type.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Data.StringifyJSON@var[]..[]", + "Replication": "Auto", + "Description": "Stringify converts an arbitrary value or a list of arbitrary values to JSON. Replication can be used to apply the operation over a list, producing a list of JSON strings.\n\nData.StringifyJSON (values: var[]..[]): string" + } + ], + "Connectors": [ + { + "Start": "ede79e2b0882454ebd19fc34167bfc41", + "End": "e0ca394d04ca41f3b8174568180ca34e", + "Id": "41c80bd5ea6c4defb9e8533a8b5c97bd", + "IsHidden": "False" + }, + { + "Start": "f41ef00532644b0892cd7a2dd0f62c8e", + "End": "297c0d29ef9d4d9a8f47ed6b166ba971", + "Id": "11792044ef024d69a898e574f476e4a2", + "IsHidden": "False" + }, + { + "Start": "f41ef00532644b0892cd7a2dd0f62c8e", + "End": "940a8a43ff4b498e91045d701160b943", + "Id": "cb6acf6123e14c1685a42541dce9468e", + "IsHidden": "False" + }, + { + "Start": "f41ef00532644b0892cd7a2dd0f62c8e", + "End": "38673b7fce0c4d23905b172d07bd9f53", + "Id": "de0cbff7bde74379b7a3f7c75b3f7083", + "IsHidden": "False" + }, + { + "Start": "f41ef00532644b0892cd7a2dd0f62c8e", + "End": "e607fc272b984b569494670bb6dcd799", + "Id": "7781b4f82d174bd79196f32d57878e47", + "IsHidden": "False" + }, + { + "Start": "f41ef00532644b0892cd7a2dd0f62c8e", + "End": "388a9c89256349a793a0fdd6798cb75c", + "Id": "b6bec395d15b4c999094c892bd37a546", + "IsHidden": "False" + }, + { + "Start": "59bb1ff9f55a4cb8af01c4d219f8128c", + "End": "526ecca2dc234cd8adca5ca8f5337de3", + "Id": "cf715ba1b3d94395b4e248dd5065cec5", + "IsHidden": "False" + }, + { + "Start": "59bb1ff9f55a4cb8af01c4d219f8128c", + "End": "152ddf05e973415b898c76c578b602be", + "Id": "0579c9c1d3f342e8a21b5bd783c7674d", + "IsHidden": "False" + }, + { + "Start": "59bb1ff9f55a4cb8af01c4d219f8128c", + "End": "3e7b6e8c817b4703afca8c14f5ad129f", + "Id": "9b1929625ef04ff6a57e6ca2f0e6ffa3", + "IsHidden": "False" + }, + { + "Start": "59bb1ff9f55a4cb8af01c4d219f8128c", + "End": "a87c530b06884bdfa0be3e32c31e6085", + "Id": "c04d1ff70d654545a6dc10e6260abd31", + "IsHidden": "False" + }, + { + "Start": "7044cf65d6144910b802edb85a274e51", + "End": "aec8fe161cfd43f1b4c703f6dd0294ee", + "Id": "14636ea2cebf49c084df50113850f816", + "IsHidden": "False" + }, + { + "Start": "7044cf65d6144910b802edb85a274e51", + "End": "5baf2f6ae6a34179b485d6acb1afbbee", + "Id": "1509c8849f6846b9a3aa6c57ef2bcf93", + "IsHidden": "False" + }, + { + "Start": "7044cf65d6144910b802edb85a274e51", + "End": "ec555457a17d4b29be63e9c516318d99", + "Id": "6258d47feae54969853d572e7015b91b", + "IsHidden": "False" + }, + { + "Start": "2d611cfadbb144fe8014da91aaf081f9", + "End": "075059ae3db14a988a5f526f0daeb372", + "Id": "0bc81978c63e4e22aa5f9ee1290fa5e0", + "IsHidden": "False" + }, + { + "Start": "4e27cd524d674b4b9f1218688f7e51de", + "End": "92ac962ee1f04d37a7fa4990ce60e766", + "Id": "f7f5604ad6004a1ea9626f674fce1728", + "IsHidden": "False" + }, + { + "Start": "168bcb9eacad45908f79d3c45cce2c27", + "End": "af667ee80cac4837a2946838b3f88ba0", + "Id": "3009da7a39d54fa1bf3c5d4ab3347aaf", + "IsHidden": "False" + }, + { + "Start": "fc60815c52f0417c9ec181d16a179d1c", + "End": "3368257c965240dab164ce44891072a8", + "Id": "30ff379c4e2940a78a58be1f9a79a6ba", + "IsHidden": "False" + }, + { + "Start": "fc60815c52f0417c9ec181d16a179d1c", + "End": "2c86775eb1074267914acf6a2feec4f9", + "Id": "114e0d1c66cc446391d70ed7da8a35c1", + "IsHidden": "False" + }, + { + "Start": "fc60815c52f0417c9ec181d16a179d1c", + "End": "a424723d790d48e096322c9fb0a5ae13", + "Id": "76e7ac075ad24ed09848a8897ab99544", + "IsHidden": "False" + }, + { + "Start": "ba21f1d5053f459ebc8f4c08f04574e0", + "End": "661308a807ca40d999220e30daba870f", + "Id": "0dfc9da156be4fdebbf62321de9e85c5", + "IsHidden": "False" + }, + { + "Start": "74a4e0ec12304a6fb0e2898f6ec92dd5", + "End": "0d0b9036e1f24fec8fef464cfe5b04c6", + "Id": "e66b993e43684c599732c7ab4c4489ee", + "IsHidden": "False" + }, + { + "Start": "487fd07181924571b73e6e24046a05ce", + "End": "377f4d47b8494304bfeea26b31d9a869", + "Id": "3e1719f0d5fe4e81961262c015bc8dd6", + "IsHidden": "False" + }, + { + "Start": "9877b21d1a1848ea9c816a5762376947", + "End": "7170b996fa4548c2a54ea10fa23270d1", + "Id": "94ee48846ccc4390918381a9501f417e", + "IsHidden": "False" + }, + { + "Start": "9877b21d1a1848ea9c816a5762376947", + "End": "3c6c5102efe14291914e1e4bde9a7f95", + "Id": "f77cb4c9ae7c41ebb3891d97f66b1a17", + "IsHidden": "False" + }, + { + "Start": "055c94e81fb4468ca37560683c0d0804", + "End": "b7a6f47009b7424ebbbb1b74c2b28146", + "Id": "09947f9819c647c9a3b8e27e00d0469e", + "IsHidden": "False" + }, + { + "Start": "4cf1f68b80db4bfab717045ca611d4cc", + "End": "ffcf590ed156499096c70814aabcc2d3", + "Id": "b907736e026b4a54af63243e8b10ecda", + "IsHidden": "False" + }, + { + "Start": "4cf1f68b80db4bfab717045ca611d4cc", + "End": "f06dae9eb561423ab263aee0b278f141", + "Id": "997b8d42277d404ca8935702931594d1", + "IsHidden": "False" + }, + { + "Start": "8bb5cb937da94fdea104b79edec941dd", + "End": "369049b3e19b4524a0118c3012f541c9", + "Id": "147960f7a4a94aaa8a2d443126ef116a", + "IsHidden": "False" + }, + { + "Start": "3751954e148e4600a3d080325fb00e70", + "End": "ae7fdab182bc42378beefedf857e6c70", + "Id": "7dce8393cca949da8dba79220168a7bc", + "IsHidden": "False" + }, + { + "Start": "d285714acf534e79ad8f2adaf87cef82", + "End": "2886cbcea5b941ef8d7f6d23835d1b02", + "Id": "88da9d9ba41a4d9583e3b5568a73fe1f", + "IsHidden": "False" + }, + { + "Start": "cdd3f7df6009472d97a31806a64ee36e", + "End": "0488f30ec00645bbadbc1de3ed188375", + "Id": "b0cebbe87ee848e3bcc98a454a7ab28d", + "IsHidden": "False" + }, + { + "Start": "02b3ce6e7dbc494e9e8b1e43637d201e", + "End": "c134f78cc3994d03839e87f1555e2724", + "Id": "f9bb6bb7abc3489388cf8e2bb1639f25", + "IsHidden": "False" + }, + { + "Start": "f746b7614ea54da087e59bfd1dce3531", + "End": "1715dbfc74894bdab1bf54872a02b062", + "Id": "a04e4c259e7e491e9b45d94542493fe3", + "IsHidden": "False" + }, + { + "Start": "f9dde021372246138c1de14bf4dde5a8", + "End": "6c6342e5ac2f45e896af913519d44bda", + "Id": "9bfd34ffe1654bfc8813366d52e9e82a", + "IsHidden": "False" + }, + { + "Start": "f9dde021372246138c1de14bf4dde5a8", + "End": "532c2ce31ac547d0b08ce788465909b3", + "Id": "b6ffd80e263f4de682777847a9ea6752", + "IsHidden": "False" + }, + { + "Start": "f9dde021372246138c1de14bf4dde5a8", + "End": "5ba51e34b1874433855a8e3b6bd9f9a9", + "Id": "88f1bfff27164ce396a28c9687828485", + "IsHidden": "False" + }, + { + "Start": "f9dde021372246138c1de14bf4dde5a8", + "End": "292531881f6046a69c6b2b1f845c7a57", + "Id": "f8e95552aad94697bb9aee12d99f18d3", + "IsHidden": "False" + }, + { + "Start": "b75b65929e1d4f7a88f280b7c6c34a42", + "End": "ac41e4fd6c8245ab86014aa864e8ddee", + "Id": "7ec5afb18ecf4c318e47554217b597b0", + "IsHidden": "False" + }, + { + "Start": "d0daca811fb14b1fbb93eefb6de3d69c", + "End": "70a5e136a1764c9499ac81e38de62490", + "Id": "043b41c0dcbb48a9b2f62014ba67b3e4", + "IsHidden": "False" + }, + { + "Start": "fbe7d6c3b20b4cc2898546886ec1f9cf", + "End": "a1791bb7715643f29421a0e870e053b5", + "Id": "7feee349710144d7b387727397d136c3", + "IsHidden": "False" + }, + { + "Start": "2a8bccbc1a5b4cb6a4325c2d6ed82a21", + "End": "8e3d20c052614b71bbbf784b67d8b559", + "Id": "b3a29a6d23a34fbfb1e0408555e647a3", + "IsHidden": "False" + }, + { + "Start": "3e9519ac955e4269b02b54b3f7fdba11", + "End": "cbbff09d65244e2bb8a33ee19d3d4081", + "Id": "9dd599cbeb304466afc97fd96e69563c", + "IsHidden": "False" + }, + { + "Start": "f7c0858277fb47c1b4c1015c51cd2938", + "End": "002139ad743746048b44c301e148e8c7", + "Id": "78530ac0305048de9acbf2eb46e55baf", + "IsHidden": "False" + }, + { + "Start": "1f99d58b0781473fabd65d9435daf334", + "End": "cc21380997e04cbd844370ebaf133d81", + "Id": "04ed6634ca9f4728b4365ffcc7925236", + "IsHidden": "False" + }, + { + "Start": "aa3f1d66ddd64c7e88eb88815d1112f4", + "End": "69955ad3462d4c8387a505c046f344bf", + "Id": "fc7818fc4ada4f8fa190bb6044bcd2aa", + "IsHidden": "False" + }, + { + "Start": "5529668b21fc42dc8dea798d47f81d90", + "End": "62259f31de654afcb3fad3c003383e3e", + "Id": "3f904e0c2fb1468c938daa65fa89e0a8", + "IsHidden": "False" + }, + { + "Start": "5529668b21fc42dc8dea798d47f81d90", + "End": "85f4c4f0e5404619a0e20d724080e930", + "Id": "a185886ef5be48c6a2be9bca8ded7084", + "IsHidden": "False" + }, + { + "Start": "5529668b21fc42dc8dea798d47f81d90", + "End": "bf9bce34535d4f2ebfd431812de1aa0a", + "Id": "b7865cae8880495b96824097406dfbd2", + "IsHidden": "False" + }, + { + "Start": "5529668b21fc42dc8dea798d47f81d90", + "End": "ddaff23e6e914392808a10f64144bda3", + "Id": "0a398dbff1d54ee5895476219bd9e9e0", + "IsHidden": "False" + }, + { + "Start": "5529668b21fc42dc8dea798d47f81d90", + "End": "26b1886ffc1041609609f78ddea12a44", + "Id": "1307969ec5e0402bacd8eabcc7b30a1a", + "IsHidden": "False" + }, + { + "Start": "5529668b21fc42dc8dea798d47f81d90", + "End": "7b8063a769b642ab86b8ee97880a018e", + "Id": "8fa96ef642034dc5b2e058dc881862a5", + "IsHidden": "False" + }, + { + "Start": "5529668b21fc42dc8dea798d47f81d90", + "End": "7254320b6def4178bc79863512fdfb9f", + "Id": "836f42a89caf4a8a98258286861ed5d2", + "IsHidden": "False" + }, + { + "Start": "5529668b21fc42dc8dea798d47f81d90", + "End": "47530d206e264255b906401b1aeb1341", + "Id": "42c8f82755a14f7f857ca67bdd10060d", + "IsHidden": "False" + }, + { + "Start": "5529668b21fc42dc8dea798d47f81d90", + "End": "b271db31b8284336a80af2546ac10d40", + "Id": "c599952ed6d04e378abdd9120cdec3bf", + "IsHidden": "False" + }, + { + "Start": "cebae1a36ea949f3a6544c99a1c83ceb", + "End": "aace8a9797d14ccdaa1eae264eafecdd", + "Id": "c365b171d7b24c7c81a6b5d9987e9ade", + "IsHidden": "False" + }, + { + "Start": "e7d823a44cbc43f697106ec7858abbef", + "End": "688b74688af248aeb4d6ca24e7650441", + "Id": "4d4039379b6c47fbb48ab9fc86668a56", + "IsHidden": "False" + }, + { + "Start": "92cd253fc4dc476baad105f4b8b4ff8f", + "End": "845f36c9dce94e12bc3a4c7c44b46b12", + "Id": "5d62b611cec646d4b38167f7d9109f59", + "IsHidden": "False" + }, + { + "Start": "ce94092a05d5407c987f4ef55987f4d0", + "End": "3ebab3f2f51c4d3a8ec7ad785cf0d6a3", + "Id": "eefd49dd94a24de088b7444663e890f2", + "IsHidden": "False" + }, + { + "Start": "d9de1f54897647d6a0738d7a01aab010", + "End": "f506752d6fec417e99d7c9325246c407", + "Id": "cd693ebb5f1c4738bc210f7534212fba", + "IsHidden": "False" + }, + { + "Start": "be1c26c607414074a9daaac2da1d9d2e", + "End": "f5de52b33bc14b639c14b01ededbccee", + "Id": "5f6249467b61477abc3256221bd9e1f0", + "IsHidden": "False" + }, + { + "Start": "28becca7a1744074b959fd0d343e8d8b", + "End": "9e280c2c7afe495390e8c4b0b6d660fd", + "Id": "e57bed28517f4a40a83a65cd2eb99dbd", + "IsHidden": "False" + }, + { + "Start": "539f5fe5262d453fbb62ef5c9a44d1ad", + "End": "1793bc832c244e82bdb541be7e6dc803", + "Id": "cb921befb7c24b8e9d26e085c649cacb", + "IsHidden": "False" + }, + { + "Start": "65f33746ece14a4999a835a94536b92f", + "End": "ce3cb739acf44620a71c79c2c5cb8056", + "Id": "7d8a1cbbf475447ca0723d8191f82ff1", + "IsHidden": "False" + }, + { + "Start": "48be55e1ae4442c080e92241f6fdfdf3", + "End": "021a207178cd4503b73381debe1e776c", + "Id": "a10f67852cd84b0d9331214aa947828e", + "IsHidden": "False" + }, + { + "Start": "3fbfe11f96294de397c974f2d608ab4d", + "End": "849eb40f63cf4a9199bc1977aa49caa9", + "Id": "60e6786666c84f98b2b5722fb6634635", + "IsHidden": "False" + }, + { + "Start": "6d768f0904014e5a814c306de5828eff", + "End": "8ddd3fadebee45c49c1d8efa44d52216", + "Id": "423e2d9ad45d4d05bcaba9de8a37e363", + "IsHidden": "False" + }, + { + "Start": "907d70a94d5d401d9e1e6af1ce6279c9", + "End": "bd5fc5a58c884882bc14af55c5eee1b9", + "Id": "ae7300118d0b4d2bb902a390a327a3e0", + "IsHidden": "False" + }, + { + "Start": "e7cb9c75b22f40baaa9ed5ab89033992", + "End": "fd7d9a9378d44e0fabca2e1fed8f4fbe", + "Id": "a9288aff329e4283b4a97aee40a5238e", + "IsHidden": "False" + }, + { + "Start": "a80e93b4bca549b7b99bea8e2fccc6ae", + "End": "a9eec514e623430f96d582c3c82ed026", + "Id": "8e38f9f565b346ffa408125fde85732b", + "IsHidden": "False" + }, + { + "Start": "663f0c6b54874241aaa8c354892dc82d", + "End": "d9ef5521e8104d6b86274042ad8f4fdb", + "Id": "31dd04127590405d8672e6ad11a1cf26", + "IsHidden": "False" + }, + { + "Start": "de62abdaf4ed45a18978cf86fc99863a", + "End": "09852bb206bc42b68328c3b3158022cc", + "Id": "a0f1f8d8960f43e680dd2e8e141bf1c9", + "IsHidden": "False" + }, + { + "Start": "9cef86b7d44248a39dbc9916faee282d", + "End": "85a4edf9161b40c1978b2e25a4cfb1e7", + "Id": "e57a47b0af2d4da2ba36d249b94a0f10", + "IsHidden": "False" + }, + { + "Start": "66f5bc46b51c4ece8f80f37606c8bdcd", + "End": "80662a069aad44f3b57d3608e4208203", + "Id": "ceb9e49768b04b6abab5c48c6a6b70b5", + "IsHidden": "False" + }, + { + "Start": "e0088bcf720041aebd288751e9abd339", + "End": "341635ee65f64c8897f2de21c3d187f6", + "Id": "78370f461f4f412fb3ebbb49ea2fcaed", + "IsHidden": "False" + }, + { + "Start": "ff6b4a0f7bdd4ba1bbb7f092601d492e", + "End": "008df1fb52514b008162cc10d5164676", + "Id": "ceefbd4b0a4047f398a31a56b7c93bf5", + "IsHidden": "False" + }, + { + "Start": "3b7eaf99f05745c3b8378b08c07d4622", + "End": "70837b152141489e9c3bc598d5612c9d", + "Id": "f9a978af29ab4c6c910185d403e8960b", + "IsHidden": "False" + }, + { + "Start": "a1884287816b4286a6bd060ada81cd1a", + "End": "d06cc1b7a2ac49958f32af0ca47ea697", + "Id": "77cd1a6dda004623838b31e1b688a388", + "IsHidden": "False" + }, + { + "Start": "85e54b59a42c461997bd103023aa7a17", + "End": "b97f3f4621f243f8a47d4905ec959f3f", + "Id": "138485d0ab6f4f0ba372edd46b5b9b6d", + "IsHidden": "False" + }, + { + "Start": "6556d2c5cce34b5aaf9bdee93a55c844", + "End": "d9f246f347fe47d08dcf95de85b874bd", + "Id": "5d384f36d68348a382eda58f48637160", + "IsHidden": "False" + }, + { + "Start": "1a892407db7a40988ff4d1ea11e8150c", + "End": "2d25d5b122924dad8fb6ccebac919bc2", + "Id": "224a07cc21bb42ceb63be196c3fa4c17", + "IsHidden": "False" + }, + { + "Start": "8df1df55d6b4431f8691870afdb6b208", + "End": "21cd99193b0b4dceb444f85874cbd641", + "Id": "0c3bebd53c1f410d806812084e20f436", + "IsHidden": "False" + }, + { + "Start": "aedd61563f4941feb2744fa6bc6228cd", + "End": "5872d9aca53948d1a7b187f3e1815f6d", + "Id": "cbb2946adee741bea33880ab6224f623", + "IsHidden": "False" + }, + { + "Start": "c5eb186bee9742a6aafd538f6ef65b90", + "End": "909ef76a94ab408daf054d42ef46b0bb", + "Id": "ad13427c209344008161e0e2d43c9324", + "IsHidden": "False" + }, + { + "Start": "1fdc63724c0443ba8481e516d7f084b4", + "End": "29a2a309bed944e382e31b973464e0d9", + "Id": "ac9f1a06dce948fbb0d776b53bfe83e6", + "IsHidden": "False" + }, + { + "Start": "ff099203030341a999d71ab20da16c03", + "End": "23511aea76a4416f8b8eaa5f72c2dd8c", + "Id": "18cd7ed0cde74a68acdb50f3fa10c7ae", + "IsHidden": "False" + }, + { + "Start": "b60cece5da2043b8bf38cb561c1b6775", + "End": "e6fa03ad470f46f0b9dea37b63aede66", + "Id": "9170c278b2dc40d689db61064809d74a", + "IsHidden": "False" + }, + { + "Start": "b60cece5da2043b8bf38cb561c1b6775", + "End": "5b6c1867922f40d6bede1cc65ca08e0b", + "Id": "fab25f881ec04657b77bdbb83641023a", + "IsHidden": "False" + }, + { + "Start": "b60cece5da2043b8bf38cb561c1b6775", + "End": "01eae41337da4ece9e201957cbf8694d", + "Id": "b0533f0dbef04ea7af6aaf713262b232", + "IsHidden": "False" + }, + { + "Start": "38f7bf657ebd440294457abf25880f6b", + "End": "14f772cdca84460c92b1cc67c0b4f3b6", + "Id": "5ca4225ccd7b4205bf74214760f93c30", + "IsHidden": "False" + }, + { + "Start": "e95704f164254136ae3ae36654bfe0c8", + "End": "c65a51e641714882ab69293d7b719dce", + "Id": "1ac16331dd2d41c2acd3cf358fccd64c", + "IsHidden": "False" + }, + { + "Start": "e95704f164254136ae3ae36654bfe0c8", + "End": "45dbbde905734eca8f99fcfe62cb9a56", + "Id": "bb45526fee5e48308e1af8365132ba5d", + "IsHidden": "False" + }, + { + "Start": "e95704f164254136ae3ae36654bfe0c8", + "End": "2c7313a7ded3434c8c3c6d9dd3efb022", + "Id": "14599c3c6a5749d1b307bb37129d48f4", + "IsHidden": "False" + }, + { + "Start": "e95704f164254136ae3ae36654bfe0c8", + "End": "9600674dcd734dcd82d7f984a6b87c6e", + "Id": "26ae658059e245e88790acb3c027df69", + "IsHidden": "False" + }, + { + "Start": "c020ddd1505e4d62b47f3f3f616462ad", + "End": "1228a2cc806640088098855ace3a7308", + "Id": "898255dabe86470b97dd393dd3615320", + "IsHidden": "False" + }, + { + "Start": "de9ff58a2efe4d49aa44d31ea0b07aa8", + "End": "7b2237debd6e492e8df99ce35c49a7b2", + "Id": "b5d410b6b5474ea9ad234951555d52a4", + "IsHidden": "False" + }, + { + "Start": "6ba6e79a59a8458998c562c3afee8344", + "End": "a54b5ba9b76d4617ac58386eaa7a42f2", + "Id": "d3075b6359b345c89265e40d1f3c2b43", + "IsHidden": "False" + }, + { + "Start": "17f2b32450ef407cb3f1cd7f233e0844", + "End": "288f8dbe5f294ccd9763fbdf6301cbf7", + "Id": "818216da14f744ff862603b0b8eddc43", + "IsHidden": "False" + }, + { + "Start": "76847344c91848ad912108628425cbd8", + "End": "3e9ba8c506904c969246b58f8f1181bf", + "Id": "a2595ae315884383b39d437ed8a2e176", + "IsHidden": "False" + }, + { + "Start": "78361f7b5abe40f686f11c1811075dc3", + "End": "9e85312465f84c7abe1b0ccf4289c7de", + "Id": "951b9d6bc0504deb830f02d8c3d40de4", + "IsHidden": "False" + }, + { + "Start": "72166c6d21e34bd2be96159c46cd0716", + "End": "f8661d74b7da4836a5d454fd828a580a", + "Id": "a431f84489f141b0b736198d7fb2c05b", + "IsHidden": "False" + }, + { + "Start": "9d0b6d1aaddd430881e8650f2c9bf665", + "End": "22c25e446f9d48d7ae494f6fa707f244", + "Id": "1b80c0d00fbe40e0afae4ab9c8bea427", + "IsHidden": "False" + }, + { + "Start": "6a2a1f0bc2814104a5d1b5984862a352", + "End": "3a3651faeab847cfa23bbf922f387017", + "Id": "2454a596e9c2468da6a5ef16e7704a4b", + "IsHidden": "False" + }, + { + "Start": "2a3adcd3d09a4b8bb880d7613dae67d0", + "End": "729c8465d87a4d09aa677563973bac8e", + "Id": "9beedbe89aa749cf81ac7c2c00b30ec9", + "IsHidden": "False" + }, + { + "Start": "89b4e256c1e2430f8621aefd389253a7", + "End": "2ffae2e3ed9044a8b04e5276260f89a6", + "Id": "0817ff06dd9440abb17122fa0f74013e", + "IsHidden": "False" + }, + { + "Start": "89b4e256c1e2430f8621aefd389253a7", + "End": "dafdffe7bd2740d287eabbb5b37f4de8", + "Id": "71013aa0fbef4462ad0c30c3cbed7d06", + "IsHidden": "False" + }, + { + "Start": "89b4e256c1e2430f8621aefd389253a7", + "End": "0ec1e09f2e8b4734828a41da93e28a50", + "Id": "0fda07cc23be4f84824f1ef140256091", + "IsHidden": "False" + }, + { + "Start": "0f154c7c6c09499d945c1f3c9c99631d", + "End": "41adb33e249f4810930aeb0cb68c5c20", + "Id": "5ee0ed2ac78a4ee8a03ecdf64c85b3f1", + "IsHidden": "False" + } + ], + "Dependencies": [], + "NodeLibraryDependencies": [], + "Thumbnail": "", + "GraphDocumentationURL": null, + "ExtensionWorkspaceData": [ + { + "ExtensionGuid": "28992e1d-abb9-417f-8b1b-05e053bee670", + "Name": "Properties", + "Version": "3.0", + "Data": {} + } + ], + "Author": "", + "Linting": { + "activeLinter": "None", + "activeLinterId": "7b75fb44-43fd-4631-a878-29f4d5d8399a", + "warningCount": 0, + "errorCount": 0 + }, + "Bindings": [], + "View": { + "Dynamo": { + "ScaleFactor": 1.0, + "HasRunWithoutCrash": true, + "IsVisibleInDynamoLibrary": true, + "Version": "3.0.0.5795", + "RunType": "Automatic", + "RunPeriod": "1000" + }, + "Camera": { + "Name": "_Background Preview", + "EyeX": -36.675113677978516, + "EyeY": 33.35145568847656, + "EyeZ": 38.62709045410156, + "LookX": 31.675113677978516, + "LookY": -22.351455688476562, + "LookZ": -46.62709045410156, + "UpX": 0.09032609313726425, + "UpY": 0.9869962930679321, + "UpZ": -0.13296429812908173 + }, + "ConnectorPins": [], + "NodeViews": [ + { + "Id": "ed28fb93e5484598bd1bbb4f66d2c27c", + "Name": "Data.StringifyJSON", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 923.1957627517891, + "Y": 1285.422340058634 + }, + { + "Id": "a14e625f30d54fce81a1933543e778b5", + "Name": "Data.ParseJSON", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1243.0008011976527, + "Y": 1283.7434724995037 + }, + { + "Id": "f0e1505d50c04577aad94f2e49faa9f6", + "Name": "Geometry.IsAlmostEqualTo", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1573.5609820748002, + "Y": 1156.6047100348576 + }, + { + "Id": "c5431f2230a54b53bef8db7fa7722bbf", + "Name": "Geometry.Mirror", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 482.8916568557165, + "Y": 4307.451391608825 + }, + { + "Id": "223c8a4c031c4ae093f3fb7e1901b27f", + "Name": "Data.ParseJSON", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1216.220587588154, + "Y": 4617.583495041566 + }, + { + "Id": "e86a4398b0a844008ad5d6f80c913106", + "Name": "Geometry.IsAlmostEqualTo", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2016.2746870696537, + "Y": 4680.597463852811 + }, + { + "Id": "8d2ba25b0c464d9a8d51c90db5f2755a", + "Name": "Data.StringifyJSON", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 924.4967205854246, + "Y": 4617.44447967774 + }, + { + "Id": "a0fcfe276bb148c38363a2a9329ff8c6", + "Name": "Point.ByCoordinates", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -738.9821672724477, + "Y": 1130.07628020437 + }, + { + "Id": "f588cf20edac424492e5f61cd8b4e248", + "Name": "Number", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -1022.0852820613213, + "Y": 1242.9664755576116 + }, + { + "Id": "ae01d16856e04ee98e942873c3311f1b", + "Name": "Vector.ByCoordinates", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -744.6566481396355, + "Y": 1445.2462913880192 + }, + { + "Id": "bddda9cf3fba49abbc8adbf8970cada6", + "Name": "Plane.XZ", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 242.3437089375593, + "Y": 4392.201123326111 + }, + { + "Id": "53fb98609ab24c28a8d453c51e584542", + "Name": "CoordinateSystem.ByOrigin", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -1062.9812697958928, + "Y": 5783.11298751005 + }, + { + "Id": "16e543ccbaf748269b1c0c8b64e38a14", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -1316.9812697958928, + "Y": 5818.25048751005 + }, + { + "Id": "8533e802506546c88cf46efb60cb30ef", + "Name": "CoordinateSystem.Rotate", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -684.4812697958928, + "Y": 6050.11298751005 + }, + { + "Id": "37395a69d48c4a7b99610a0c96cfbc22", + "Name": "Point.ByCoordinates", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -1062.9812697958928, + "Y": 5995.11298751005 + }, + { + "Id": "01740c040af643349a8d72e79a7c7dd4", + "Name": "Vector.ByCoordinates", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -1062.9812697958928, + "Y": 6207.11298751005 + }, + { + "Id": "a0d2de17c88643ceaa26c85513637113", + "Name": "Number", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -1062.9812697958928, + "Y": 6419.11298751005 + }, + { + "Id": "b6f93229de91434794d004917d47136b", + "Name": "CoordinateSystem.Scale", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -157.19412285968656, + "Y": 5955.11298751005 + }, + { + "Id": "121c70cf049e40b59687d2a0f5a9c373", + "Name": "Number", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -637.1129647934108, + "Y": 5894.11298751005 + }, + { + "Id": "2a792b15395a4536bdd6b37f4746dd54", + "Name": "Geometry.Transform", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 266.3852650279132, + "Y": 5727.536435509724 + }, + { + "Id": "871816cfb04e4293a4d3894dc32beef5", + "Name": "CoordinateSystem.ByOrigin", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -101.08980818475675, + "Y": 5762.954738014015 + }, + { + "Id": "42bd06520fbc49479cf3d6560798c5a3", + "Name": "Plane.ByOriginNormal", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -316.5272055126611, + "Y": 1413.7192409980892 + }, + { + "Id": "bb6672a948a2409ca3a2df7ccbe54a39", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -1009.0561758735483, + "Y": 1444.9352156877837 + }, + { + "Id": "9754cbd66d4842419a6899f372a80aee", + "Name": "List.AllTrue", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 3668.090186539526, + "Y": 2349.668193676224 + }, + { + "Id": "fe8255d9034840d0b6dc415adeca9b18", + "Name": "List Create", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 3426.5949493099765, + "Y": 2344.7216856058335 + }, + { + "Id": "4c96f65c18034a5883dad0e0b1f0feb1", + "Name": "==", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2135.884113436605, + "Y": 1882.2320706056862 + }, + { + "Id": "8c1a173d572444af9c04e90329a7a1cb", + "Name": "Object.Type", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 778.4852619831041, + "Y": 1925.390005717864 + }, + { + "Id": "e6da715afc6e477a9f632953d25296f4", + "Name": "Rectangle.ByWidthLength", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 110.56875449975746, + "Y": 1470.8852242637333 + }, + { + "Id": "352151cfdc2b4ffea00f1861a5ca87ae", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -241.04480946190642, + "Y": 1614.1667854510424 + }, + { + "Id": "9ad938f932794d63b7226ec2d15daffe", + "Name": "PolyCurve.Curves", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 776.8272125460805, + "Y": 1505.1037266567184 + }, + { + "Id": "2d924022b8cf4237993545fceb15a0af", + "Name": "Rectangle.Height", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 778.2602297608281, + "Y": 1649.9141695144833 + }, + { + "Id": "f1874e30107f4b80b6dbfa760eaa88a9", + "Name": "Rectangle.Width", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 776.4306835303565, + "Y": 1791.1392641627622 + }, + { + "Id": "7a45c93d98aa4cbf9bdbb523d997f81c", + "Name": "List Create", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1123.9995006195036, + "Y": 1726.8440228816369 + }, + { + "Id": "ac04f72f1e974580a0085525f8d5f40b", + "Name": "Object.Type", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1475.0775931800808, + "Y": 2329.381143493911 + }, + { + "Id": "4d8c480ae6cd41e78c002a0257d3b043", + "Name": "Rectangle.Width", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1473.0230147273332, + "Y": 2195.13040193881 + }, + { + "Id": "955dfd02cd614c848d7813897cb40519", + "Name": "Rectangle.Height", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1474.8525609578048, + "Y": 2053.905307290531 + }, + { + "Id": "5ed188f22dfc42db884e0293b7abcb48", + "Name": "PolyCurve.Curves", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1473.4195437430571, + "Y": 1909.094864432766 + }, + { + "Id": "fefbc7cbb6604f7499bd5e0c5a50076e", + "Name": "List Create", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1820.5918318164804, + "Y": 2130.8351606576844 + }, + { + "Id": "644b7e0248784e5eaab778f7956aa0f1", + "Name": "Geometry.IsAlmostEqualTo", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2128.3453996399485, + "Y": 1682.259582917451 + }, + { + "Id": "8c8b8d0483aa4043847e989db43f0997", + "Name": "Rectangle.Width", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1413.9135743744703, + "Y": 5388.093864652404 + }, + { + "Id": "c1b5c4bf0861463db65b30ed9dd276f2", + "Name": "List Create", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1759.7439791966965, + "Y": 5061.298371066155 + }, + { + "Id": "1920257c93694121ace91f47df8f02aa", + "Name": "Rectangle.Height", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1415.743120604942, + "Y": 5246.868770004124 + }, + { + "Id": "ba8f87b92c5e4d20b4fff5357073a4ff", + "Name": "PolyCurve.Curves", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1414.3101033901942, + "Y": 5102.058327146359 + }, + { + "Id": "96fe8fbb77ad4ee89c37283f5edf9803", + "Name": "List Create", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1050.157266369435, + "Y": 5056.085829144381 + }, + { + "Id": "757fd443e1534467abd020a874a6a3c1", + "Name": "Rectangle.Height", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 704.4179955107597, + "Y": 4979.1559757772275 + }, + { + "Id": "26ff219f2986461abfdb9d16283d3eec", + "Name": "Rectangle.Width", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 702.5884492802879, + "Y": 5120.381070425506 + }, + { + "Id": "a91f3cc1f32a4585af96b2da169a9f98", + "Name": "PolyCurve.Curves", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 702.9849782960121, + "Y": 4834.345532919463 + }, + { + "Id": "d9b5def5e7b14c3ea5045125b4c5db4a", + "Name": "==", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1998.7162047613974, + "Y": 4870.39543058712 + }, + { + "Id": "be153f359ad84fe7adc12b44b52e1f30", + "Name": "Rectangle.Width", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1470.6335190581854, + "Y": 3858.0539026179813 + }, + { + "Id": "6ef6d64b846242cd84d429d5efe7d5ab", + "Name": "List Create", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1816.4639238804116, + "Y": 3531.258409031732 + }, + { + "Id": "d6fcca0c943646d6b17e7ca625dd7574", + "Name": "Rectangle.Height", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1472.4630652886576, + "Y": 3716.828807969701 + }, + { + "Id": "7eb082052e474b8b8118116fcc3d2c06", + "Name": "PolyCurve.Curves", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1471.0300480739093, + "Y": 3572.0183651119364 + }, + { + "Id": "3271ef4e6fb444c8a9f1556c25618f17", + "Name": "List Create", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1106.8772110531504, + "Y": 3526.045867109958 + }, + { + "Id": "3d6c02aaa2504a7ca8822953d73d1f63", + "Name": "==", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2055.4361494451127, + "Y": 3340.3554685526974 + }, + { + "Id": "5c0756124abd4ef697eb8bc8588e2f84", + "Name": "Rectangle.Height", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 761.137940194475, + "Y": 3449.1160137428046 + }, + { + "Id": "36416026a49e4d33a41eae347c73f9e2", + "Name": "Rectangle.Width", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 759.3083939640032, + "Y": 3590.341108391083 + }, + { + "Id": "dc8983ca16d2440e8370b4367f33518b", + "Name": "PolyCurve.Curves", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 759.7049229797271, + "Y": 3304.30557088504 + }, + { + "Id": "95a3534c71354283821a59af987afe8b", + "Name": "Geometry.IsAlmostEqualTo", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2072.994631753369, + "Y": 3150.5575018183886 + }, + { + "Id": "5d29e73d3de44379968091524e2757ad", + "Name": "Data.ParseJSON", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1272.9405322718694, + "Y": 3087.5435330071427 + }, + { + "Id": "d9e420e2acbf4dcba670afd79fb4e8d4", + "Name": "Data.StringifyJSON", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 981.2166652691399, + "Y": 3087.404517643317 + }, + { + "Id": "7eeda4efb67c45df98830f0d71ba8fe2", + "Name": "Curve.Reverse", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 553.9043891677811, + "Y": 2637.2511792493106 + }, + { + "Id": "0d45e214589b4548be9c01238f748e18", + "Name": "Rectangle.Width", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1437.232683029993, + "Y": 6866.165766555198 + }, + { + "Id": "a00d2b02b5dc43b9be1f4337061042e0", + "Name": "Rectangle.Height", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1439.0622292604653, + "Y": 6724.940671906918 + }, + { + "Id": "0e3fb0a81adf412888c46fc840e7a18c", + "Name": "PolyCurve.Curves", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1437.629212045717, + "Y": 6580.130229049154 + }, + { + "Id": "01d1dd0012d94f18abb7a493dfced29b", + "Name": "List Create", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1783.0630878522193, + "Y": 6539.370272968949 + }, + { + "Id": "a701bdbfe8f94c209f23cbb5802ef435", + "Name": "==", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2022.0353134169204, + "Y": 6348.467332489915 + }, + { + "Id": "5db5340b9f394a8ca7aecc2cd79ffeac", + "Name": "List Create", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1073.476375024958, + "Y": 6534.157731047176 + }, + { + "Id": "9f0a852f687d4745951874f8cd237010", + "Name": "Geometry.IsAlmostEqualTo", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2039.5937957251767, + "Y": 6158.669365755606 + }, + { + "Id": "75b388b8093e4576bf7789100ff8d2d0", + "Name": "Rectangle.Height", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 727.7371041662827, + "Y": 6457.227877680022 + }, + { + "Id": "d8f6c8823c084aaa8ef1a06ee037be4c", + "Name": "Rectangle.Width", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 725.9075579358109, + "Y": 6598.4529723283 + }, + { + "Id": "123113d78d8840828ef3d05e55fbe1b0", + "Name": "PolyCurve.Curves", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 726.304086951535, + "Y": 6312.417434822258 + }, + { + "Id": "7d6801ed11b34a70867f3d19c422de2f", + "Name": "Data.ParseJSON", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1239.539696243677, + "Y": 6095.65539694436 + }, + { + "Id": "a2cc859dc95f40338a42c26558214e0a", + "Name": "Data.StringifyJSON", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 947.8158292409476, + "Y": 6095.5163815805345 + } + ], + "Annotations": [ + { + "Id": "88d10ad0662d49c493acefbd420572f9", + "Title": "All True", + "DescriptionText": "", + "IsExpanded": true, + "WidthAdjustment": 0.0, + "HeightAdjustment": 0.0, + "Nodes": [ + "9754cbd66d4842419a6899f372a80aee" + ], + "HasNestedGroups": false, + "Left": 3658.090186539526, + "Top": 2276.668193676224, + "Width": 196.0, + "Height": 205.0, + "FontSize": 36.0, + "GroupStyleId": "00000000-0000-0000-0000-000000000000", + "InitialTop": 2349.668193676224, + "InitialHeight": 145.0, + "TextblockHeight": 63.0, + "Background": "#FFC1D676" + } + ], + "X": 296.87573432294175, + "Y": 73.89072651596928, + "Zoom": 0.09242323469994854 + } +} \ No newline at end of file diff --git a/test/core/json/JSON_Serialization_Depth_Fail.dyn b/test/core/json/JSON_Serialization_Depth_Fail.dyn new file mode 100644 index 00000000000..25a2749be5b --- /dev/null +++ b/test/core/json/JSON_Serialization_Depth_Fail.dyn @@ -0,0 +1,147 @@ +{ + "Uuid": "4fac373f-9349-4b71-975a-9cf02784050b", + "IsCustomNode": false, + "Description": "", + "Name": "JSON_Serialization_Depth_Fail", + "ElementResolver": { + "ResolutionMap": {} + }, + "Inputs": [], + "Outputs": [], + "Nodes": [ + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "498b579729a04e099c8209d4888fec47", + "NodeType": "CodeBlockNode", + "Inputs": [], + "Outputs": [ + { + "Id": "32dfd39fdd044440aabe4c81155f1622", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "[1,[2,[3,[4,[5,[6,[7,[8,[9,[10,[11,[12,[13,[14,[15,[false]]]]]]]]]]]]]]]];" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "cc45bec3172e40dab4d967e9dd81cbdd", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "ad169e7d7ebc4fe9bd3f3807ad53385a", + "Name": "values", + "Description": "A List of values\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "c92ff66756e04454bc444cad9ed6eb43", + "Name": "json", + "Description": "A JSON string where primitive types (e.g. double, int, boolean), Lists, and Dictionary's will be turned into the associated JSON type.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Data.StringifyJSON@var[]..[]", + "Replication": "Auto", + "Description": "Stringify converts an arbitrary value or a list of arbitrary values to JSON. Replication can be used to apply the operation over a list, producing a list of JSON strings.\n\nData.StringifyJSON (values: var[]..[]): string" + } + ], + "Connectors": [ + { + "Start": "32dfd39fdd044440aabe4c81155f1622", + "End": "ad169e7d7ebc4fe9bd3f3807ad53385a", + "Id": "3775253b954646c9bb26d7ea0db8af10", + "IsHidden": "False" + } + ], + "Dependencies": [], + "NodeLibraryDependencies": [], + "EnableLegacyPolyCurveBehavior": null, + "Thumbnail": "", + "GraphDocumentationURL": null, + "ExtensionWorkspaceData": [ + { + "ExtensionGuid": "28992e1d-abb9-417f-8b1b-05e053bee670", + "Name": "Properties", + "Version": "3.0", + "Data": {} + }, + { + "ExtensionGuid": "DFBD9CC0-DB40-457A-939E-8C8555555A9D", + "Name": "Generative Design", + "Version": "8.0", + "Data": {} + } + ], + "Author": "", + "Linting": { + "activeLinter": "None", + "activeLinterId": "7b75fb44-43fd-4631-a878-29f4d5d8399a", + "warningCount": 0, + "errorCount": 0 + }, + "Bindings": [], + "View": { + "Dynamo": { + "ScaleFactor": 1.0, + "HasRunWithoutCrash": true, + "IsVisibleInDynamoLibrary": true, + "Version": "3.0.0.5795", + "RunType": "Automatic", + "RunPeriod": "1000" + }, + "Camera": { + "Name": "_Background Preview", + "EyeX": -17.0, + "EyeY": 24.0, + "EyeZ": 50.0, + "LookX": 12.0, + "LookY": -13.0, + "LookZ": -58.0, + "UpX": 0.0, + "UpY": 1.0, + "UpZ": 0.0 + }, + "ConnectorPins": [], + "NodeViews": [ + { + "Id": "498b579729a04e099c8209d4888fec47", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 74.5, + "Y": 257.5 + }, + { + "Id": "cc45bec3172e40dab4d967e9dd81cbdd", + "Name": "Data.StringifyJSON", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 855.5, + "Y": 260.5 + } + ], + "Annotations": [], + "X": 0.0, + "Y": 0.0, + "Zoom": 1.0 + } +} \ No newline at end of file diff --git a/test/core/json/Point_JSONParsing.dyn b/test/core/json/Point_JSONParsing.dyn new file mode 100644 index 00000000000..7c6185f6d64 --- /dev/null +++ b/test/core/json/Point_JSONParsing.dyn @@ -0,0 +1,624 @@ +{ + "Uuid": "6bdfb0fe-b31e-4c71-8f79-7fc29c53e3ac", + "IsCustomNode": false, + "Description": "", + "Name": "Point_JSONParsing", + "ElementResolver": { + "ResolutionMap": {} + }, + "Inputs": [], + "Outputs": [], + "Nodes": [ + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "186620d42cf04f3b8c8706a3723d35a5", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "bad565a11dc74d0b93316a47fffec75f", + "Name": "json", + "Description": "A JSON string\n\nstring", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "e01aa4a665764bf9981a48e4b12d042a", + "Name": "result", + "Description": "The result type depends on the content of the input string. The result type can be a primitive value (e.g. string, boolean, double), a List, or a Dictionary.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Data.ParseJSON@string", + "Replication": "Auto", + "Description": "Parse converts an arbitrary JSON string to a value. It is the opposite of JSON.Stringify.\n\nData.ParseJSON (json: string): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "f8f38e2638fb4f5690220969e9889012", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "b584618068164d398fe7dbffe593b0ef", + "Name": "values", + "Description": "A List of values\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "98f08663bdfc44e29970670879c98f81", + "Name": "json", + "Description": "A JSON string where primitive types (e.g. double, int, boolean), Lists, and Dictionary's will be turned into the associated JSON type.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Data.StringifyJSON@var[]..[]", + "Replication": "Auto", + "Description": "Stringify converts an arbitrary value or a list of arbitrary values to JSON. Replication can be used to apply the operation over a list, producing a list of JSON strings.\n\nData.StringifyJSON (values: var[]..[]): string" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "71efc8c5c0c74189901707c30e6d5903", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "64cad8271a2c4236a432b3f8cb9a965e", + "Name": "list", + "Description": "List to be checked on whether all items are true.\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "a90bff347c4e47db904a83067894db1f", + "Name": "bool", + "Description": "True if all items from list are true, false if one or more items is not true", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.List.AllTrue@var[]..[]", + "Replication": "Auto", + "Description": "Determines if all items in the given list is a boolean and has a true value.\n\nList.AllTrue (list: var[]..[]): bool" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "6478eb71263841ae88cc4db9254c8a03", + "NodeType": "CodeBlockNode", + "Inputs": [], + "Outputs": [ + { + "Id": "cc61945c36cc4069b7fee6b71ebde162", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "7a905987d9854e618f53cb5fe7af4a3e", + "Name": "", + "Description": "Value of expression at line 2", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "fcd1fdc26c564952bcc3c3689d23ccc8", + "Name": "", + "Description": "Value of expression at line 3", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "3.1;\n4.3;\n5.99;" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "53daaa8f4b5a4dc6b3b94f72c0211d6d", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "8f88e25b866a47368c75ba7030557f25", + "Name": "x", + "Description": "X coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "5eb8db0a765a4b3db2d0815f47386536", + "Name": "y", + "Description": "Y coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "25a70a53fc4c4fb9a906e47d383ca554", + "Name": "z", + "Description": "Z coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "c1e02c3a15b941d8a0ffd73b4be41bac", + "Name": "Point", + "Description": "Point created by coordinates", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Point.ByCoordinates@double,double,double", + "Replication": "Auto", + "Description": "Form a Point given 3 cartesian coordinates\n\nPoint.ByCoordinates (x: double = 0, y: double = 0, z: double = 0): Point" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "ef76034fab734caca57424315ba6f446", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "9bd67bbba7a640c0a99d942ebf9ca004", + "Name": "geometry", + "Description": "Autodesk.DesignScript.Geometry.Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "8666f73847d64c43911aefdc0f92ac10", + "Name": "other", + "Description": "Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "d86883cd68174705a6fc825ca7b605eb", + "Name": "bool", + "Description": "bool", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Geometry.IsAlmostEqualTo@Autodesk.DesignScript.Geometry.Geometry", + "Replication": "Auto", + "Description": "Check if the two objects have the same representational geometry or numerical values\n\nGeometry.IsAlmostEqualTo (other: Geometry): bool" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "ef50f8bf08c94bf18d859ab9786c573d", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "5630b42228294039b8fd611ff3d43638", + "Name": "x", + "Description": "Basic type object to compare (e.g. bool, int, double, string, etc.)\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "4e8901b9fb474421a388fe7dab67b674", + "Name": "y", + "Description": "Basic type object to compare (e.g. bool, int, double, string, etc.)\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "3334f51850a941d4b47a5c7539ce0c39", + "Name": "bool", + "Description": "Result of equality check", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "==@var[]..[],var[]..[]", + "Replication": "Auto", + "Description": "Compares if x and y are equal\n\n== (x: var[]..[], y: var[]..[]): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "66d9ebaed3ca418ba0d3b1ae71325ce1", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "9b98f1e99baa467ca2ab2b2ef326bd06", + "Name": "object", + "Description": "Object to query type\n\nvar", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "7551dec750804d5fb39d1171949bcd56", + "Name": "string", + "Description": "Type of object.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Object.Type@var", + "Replication": "Auto", + "Description": "Returns the type of object represented as string.\n\nObject.Type (object: var): string" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "65ffb7a484854aafa0880a99fc01c8d5", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "a42d840ee6d141fabedbb300c9fe9467", + "Name": "object", + "Description": "Object to query type\n\nvar", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "9c0c57a3d48b4d928bf517df86ade748", + "Name": "string", + "Description": "Type of object.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Object.Type@var", + "Replication": "Auto", + "Description": "Returns the type of object represented as string.\n\nObject.Type (object: var): string" + }, + { + "ConcreteType": "CoreNodeModels.CreateList, CoreNodeModels", + "VariableInputPorts": true, + "Id": "0be1799f169b4cfbb2b7476b4c5323b7", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "a9d4bc677fdc4ee78550c644de1fc3af", + "Name": "item0", + "Description": "Item Index #0", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "cca4a3b3958e47edb7e947b4e320dcc7", + "Name": "item1", + "Description": "Item Index #1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "4cb1903d04c649eabf7c58714ce646b4", + "Name": "list", + "Description": "A list (type: var[]..[])", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Makes a new list from the given inputs" + } + ], + "Connectors": [ + { + "Start": "e01aa4a665764bf9981a48e4b12d042a", + "End": "8666f73847d64c43911aefdc0f92ac10", + "Id": "933e4b61e3f5460cb70df9393690afa5", + "IsHidden": "False" + }, + { + "Start": "e01aa4a665764bf9981a48e4b12d042a", + "End": "9b98f1e99baa467ca2ab2b2ef326bd06", + "Id": "a46ab66382fc475e82b36c847165ddf8", + "IsHidden": "False" + }, + { + "Start": "98f08663bdfc44e29970670879c98f81", + "End": "bad565a11dc74d0b93316a47fffec75f", + "Id": "7772aed300174d1b814266749d9cc731", + "IsHidden": "False" + }, + { + "Start": "cc61945c36cc4069b7fee6b71ebde162", + "End": "8f88e25b866a47368c75ba7030557f25", + "Id": "3674ede944b94886b18f2be866d6f0cf", + "IsHidden": "False" + }, + { + "Start": "7a905987d9854e618f53cb5fe7af4a3e", + "End": "5eb8db0a765a4b3db2d0815f47386536", + "Id": "3db7696482554d0c8c0a10b6f12b085e", + "IsHidden": "False" + }, + { + "Start": "fcd1fdc26c564952bcc3c3689d23ccc8", + "End": "25a70a53fc4c4fb9a906e47d383ca554", + "Id": "a9a5f83c8551404897f7f68747e0d582", + "IsHidden": "False" + }, + { + "Start": "c1e02c3a15b941d8a0ffd73b4be41bac", + "End": "b584618068164d398fe7dbffe593b0ef", + "Id": "26d3a71a9acc4eb1af0c78a8c966a330", + "IsHidden": "False" + }, + { + "Start": "c1e02c3a15b941d8a0ffd73b4be41bac", + "End": "9bd67bbba7a640c0a99d942ebf9ca004", + "Id": "b0e3bf7f06e149eda3572a32598b3ffe", + "IsHidden": "False" + }, + { + "Start": "c1e02c3a15b941d8a0ffd73b4be41bac", + "End": "a42d840ee6d141fabedbb300c9fe9467", + "Id": "285e18217b924339895592aa601417e0", + "IsHidden": "False" + }, + { + "Start": "d86883cd68174705a6fc825ca7b605eb", + "End": "a9d4bc677fdc4ee78550c644de1fc3af", + "Id": "7c079ed0bc30487d9084b6d8aee7b289", + "IsHidden": "False" + }, + { + "Start": "3334f51850a941d4b47a5c7539ce0c39", + "End": "cca4a3b3958e47edb7e947b4e320dcc7", + "Id": "9a29dd283de940ef8ab1f889b82435a3", + "IsHidden": "False" + }, + { + "Start": "7551dec750804d5fb39d1171949bcd56", + "End": "4e8901b9fb474421a388fe7dab67b674", + "Id": "73a206ed450f4d1fb32e445edf4204a1", + "IsHidden": "False" + }, + { + "Start": "9c0c57a3d48b4d928bf517df86ade748", + "End": "5630b42228294039b8fd611ff3d43638", + "Id": "c8d9bb380d1d4c048b764cc415b83201", + "IsHidden": "False" + }, + { + "Start": "4cb1903d04c649eabf7c58714ce646b4", + "End": "64cad8271a2c4236a432b3f8cb9a965e", + "Id": "1ed4e3013e9f4190b0cad923b7688ae0", + "IsHidden": "False" + } + ], + "Dependencies": [], + "NodeLibraryDependencies": [], + "Thumbnail": "", + "GraphDocumentationURL": null, + "ExtensionWorkspaceData": [ + { + "ExtensionGuid": "28992e1d-abb9-417f-8b1b-05e053bee670", + "Name": "Properties", + "Version": "3.0", + "Data": {} + } + ], + "Author": "", + "Linting": { + "activeLinter": "None", + "activeLinterId": "7b75fb44-43fd-4631-a878-29f4d5d8399a", + "warningCount": 0, + "errorCount": 0 + }, + "Bindings": [], + "View": { + "Dynamo": { + "ScaleFactor": 1.0, + "HasRunWithoutCrash": true, + "IsVisibleInDynamoLibrary": true, + "Version": "3.0.0.5795", + "RunType": "Automatic", + "RunPeriod": "1000" + }, + "Camera": { + "Name": "_Background Preview", + "EyeX": -17.0, + "EyeY": 24.0, + "EyeZ": 50.0, + "LookX": 12.0, + "LookY": -13.0, + "LookZ": -58.0, + "UpX": 0.0, + "UpY": 1.0, + "UpZ": 0.0 + }, + "ConnectorPins": [], + "NodeViews": [ + { + "Id": "186620d42cf04f3b8c8706a3723d35a5", + "Name": "Data.ParseJSON", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1417.761683843641, + "Y": 447.16409305995114 + }, + { + "Id": "f8f38e2638fb4f5690220969e9889012", + "Name": "Data.StringifyJSON", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1107.775570011588, + "Y": 446.0985095043583 + }, + { + "Id": "71efc8c5c0c74189901707c30e6d5903", + "Name": "List.AllTrue", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2633.157493068819, + "Y": 302.4620418156378 + }, + { + "Id": "6478eb71263841ae88cc4db9254c8a03", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 446.9831147891284, + "Y": 381.3389574900232 + }, + { + "Id": "53daaa8f4b5a4dc6b3b94f72c0211d6d", + "Name": "Point.ByCoordinates", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 731.1576508656505, + "Y": 338.1531576979569 + }, + { + "Id": "ef76034fab734caca57424315ba6f446", + "Name": "Geometry.IsAlmostEqualTo", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1763.812264165294, + "Y": 310.53467155350177 + }, + { + "Id": "ef50f8bf08c94bf18d859ab9786c573d", + "Name": "==", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2045.0746178062022, + "Y": 623.0548543858345 + }, + { + "Id": "66d9ebaed3ca418ba0d3b1ae71325ce1", + "Name": "Object.Type", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1737.0229795246885, + "Y": 704.9472193096371 + }, + { + "Id": "65ffb7a484854aafa0880a99fc01c8d5", + "Name": "Object.Type", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1740.6023012025223, + "Y": 559.696467301585 + }, + { + "Id": "0be1799f169b4cfbb2b7476b4c5323b7", + "Name": "List Create", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2356.5331859565854, + "Y": 305.58103677736415 + } + ], + "Annotations": [ + { + "Id": "299ea6c97b7040eeba5940b4ec204708", + "Title": "All True", + "DescriptionText": "", + "IsExpanded": true, + "WidthAdjustment": 0.0, + "HeightAdjustment": 0.0, + "Nodes": [ + "71efc8c5c0c74189901707c30e6d5903" + ], + "HasNestedGroups": false, + "Left": 2623.157493068819, + "Top": 229.4620418156378, + "Width": 196.0, + "Height": 205.0, + "FontSize": 36.0, + "GroupStyleId": "00000000-0000-0000-0000-000000000000", + "InitialTop": 302.4620418156378, + "InitialHeight": 145.0, + "TextblockHeight": 63.0, + "Background": "#FFC1D676" + } + ], + "X": -59.57031063848615, + "Y": 584.9812702569752, + "Zoom": 0.21393643261822093 + } +} \ No newline at end of file diff --git a/test/core/json/Solid_Cylinder_JSONParsing.dyn b/test/core/json/Solid_Cylinder_JSONParsing.dyn new file mode 100644 index 00000000000..ba15ed715ad --- /dev/null +++ b/test/core/json/Solid_Cylinder_JSONParsing.dyn @@ -0,0 +1,4004 @@ +{ + "Uuid": "37cc18f8-e26e-4581-8879-b3bec7f4a87f", + "IsCustomNode": false, + "Description": "", + "Name": "Solid_Cylinder_JSONParsing", + "ElementResolver": { + "ResolutionMap": {} + }, + "Inputs": [], + "Outputs": [], + "Nodes": [ + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "4ac4124266f446d793bf77aaa5e48e23", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "602c2938ea1146a78f580dd4e9ca58ce", + "Name": "startPoint", + "Description": "Start point of cylinder\n\nPoint\nDefault value : Autodesk.DesignScript.Geometry.Point.ByCoordinates(0, 0, 0)", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "bbf039eae49b4d0f821a9012ca99d208", + "Name": "endPoint", + "Description": "End point of cylinder\n\nPoint\nDefault value : Autodesk.DesignScript.Geometry.Point.ByCoordinates(0, 0, 1)", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "1c696945e6d945c0bbcc0696784b472c", + "Name": "radius", + "Description": "Radius of cylinder\n\ndouble\nDefault value : 1", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "29ae545e52bf4cfb870da98d8a0623fa", + "Name": "Cylinder", + "Description": "Cylinder created by points and radius", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Cylinder.ByPointsRadius@Autodesk.DesignScript.Geometry.Point,Autodesk.DesignScript.Geometry.Point,double", + "Replication": "Auto", + "Description": "Construct a Solid Cylinder given the bottom and top center point of the Cylinder.\n\nCylinder.ByPointsRadius (startPoint: Point = Autodesk.DesignScript.Geometry.Point.ByCoordinates(0, 0, 0), endPoint: Point = Autodesk.DesignScript.Geometry.Point.ByCoordinates(0, 0, 1), radius: double = 1): Cylinder" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "90207aa2087d490ab799a74dc386468a", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "d084442a59c149e1aab5819db1e11ddd", + "Name": "x", + "Description": "X coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "fe9fd199c86545eea5c0c727b373bfac", + "Name": "y", + "Description": "Y coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "185ba4e7329743c88c12694708607b14", + "Name": "z", + "Description": "Z coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "46c723d44c084f63b5901139f7f561ca", + "Name": "Point", + "Description": "Point created by coordinates", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Point.ByCoordinates@double,double,double", + "Replication": "Auto", + "Description": "Form a Point given 3 cartesian coordinates\n\nPoint.ByCoordinates (x: double = 0, y: double = 0, z: double = 0): Point" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "87f3d5e08dfd442b8ee9992291ef29f0", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "402f5279439a491093ddafe826adad04", + "Name": "x", + "Description": "X coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "6a631dcec8764fcb926857e8741f162d", + "Name": "y", + "Description": "Y coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "9188c3c2c08e4fecbb26099de0121c75", + "Name": "z", + "Description": "Z coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "25cb10d551cd459982b828c8421d247e", + "Name": "Point", + "Description": "Point created by coordinates", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Point.ByCoordinates@double,double,double", + "Replication": "Auto", + "Description": "Form a Point given 3 cartesian coordinates\n\nPoint.ByCoordinates (x: double = 0, y: double = 0, z: double = 0): Point" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "cfa2d76862464e5998696e61e32a053e", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "e129ff3c20bc4536a33a94be253dcac7", + "Name": "json", + "Description": "A JSON string\n\nstring", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "c364adceb8224847baa9aa36f98e5792", + "Name": "result", + "Description": "The result type depends on the content of the input string. The result type can be a primitive value (e.g. string, boolean, double), a List, or a Dictionary.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Data.ParseJSON@string", + "Replication": "Auto", + "Description": "Parse converts an arbitrary JSON string to a value. It is the opposite of JSON.Stringify.\n\nData.ParseJSON (json: string): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "8001be291db14f77aae0d469b4d76866", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "8ae17a32c3e846c4ab53a5e041502524", + "Name": "values", + "Description": "A List of values\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "08d51a74a2fb49649595e21e396bfe52", + "Name": "json", + "Description": "A JSON string where primitive types (e.g. double, int, boolean), Lists, and Dictionary's will be turned into the associated JSON type.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Data.StringifyJSON@var[]..[]", + "Replication": "Auto", + "Description": "Stringify converts an arbitrary value or a list of arbitrary values to JSON. Replication can be used to apply the operation over a list, producing a list of JSON strings.\n\nData.StringifyJSON (values: var[]..[]): string" + }, + { + "ConcreteType": "CoreNodeModels.Input.DoubleInput, CoreNodeModels", + "NumberType": "Double", + "Id": "9275e30f127049c5be70f06e66520a2c", + "NodeType": "NumberInputNode", + "Inputs": [], + "Outputs": [ + { + "Id": "cca04a0603e341f2b2bafcd562e76be6", + "Name": "", + "Description": "Double", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Creates a number", + "InputValue": 2.5 + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "c3491d08a01a43b68c0a8f7eeb2e4304", + "NodeType": "CodeBlockNode", + "Inputs": [], + "Outputs": [ + { + "Id": "e7299a9a56054d35beca11eff024ab0c", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "cdb5399e8a59413285b8cd0da1ff595b", + "Name": "", + "Description": "Value of expression at line 2", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "8a7f07a3f47b4905aa0ff11d351b45b9", + "Name": "", + "Description": "Value of expression at line 3", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "2;\n3.1;\n4.3;" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "4fde9e2ba08147fba5ab2c8bce430148", + "NodeType": "CodeBlockNode", + "Inputs": [], + "Outputs": [ + { + "Id": "9a2b90f6453543e98e466115d6d8ed32", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "3b41b258479a423281594f79e2e38f88", + "Name": "", + "Description": "Value of expression at line 2", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "3d3c0f5d1c1f4fd7a3c7e1922992a04c", + "Name": "", + "Description": "Value of expression at line 3", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "-1;\n5.6;\n12;" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "82ad165d2f59411b9e98776389591c43", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "e4b75642ef7d4bbab711656aaa62786a", + "Name": "geometry", + "Description": "Autodesk.DesignScript.Geometry.Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "8ae7eb33cda84ba29e2a26b59758fcc4", + "Name": "other", + "Description": "Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "683c5e2b685f4772bc5f596e7747bbcf", + "Name": "bool", + "Description": "bool", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Geometry.IsAlmostEqualTo@Autodesk.DesignScript.Geometry.Geometry", + "Replication": "Auto", + "Description": "Check if the two objects have the same representational geometry or numerical values\n\nGeometry.IsAlmostEqualTo (other: Geometry): bool" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "09c7aa43e8ca4d09a691a10c9a0d1386", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "661a577d4d82439d81a3b6d10ffc738a", + "Name": "coordinateSystem", + "Description": "Parent coordinate system\n\nCoordinateSystem\nDefault value : Autodesk.DesignScript.Geometry.CoordinateSystem.ByOrigin(0, 0, 0)", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "51c52bc488094cb7a446795e809dec44", + "Name": "radius", + "Description": "Radius size\n\ndouble\nDefault value : 1", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "2e0800742c4c40a9bae5637352e5577e", + "Name": "height", + "Description": "Cylinder height\n\ndouble\nDefault value : 1", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "ae96e591877244a5a238f42e09cbf8a4", + "Name": "Cylinder", + "Description": "Cylinder created from radius and height", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Cylinder.ByRadiusHeight@Autodesk.DesignScript.Geometry.CoordinateSystem,double,double", + "Replication": "Auto", + "Description": "Construct a Solid Cylinder defined by a parent CoordinateSystem, the radius, and the height of the cylinder\n\nCylinder.ByRadiusHeight (coordinateSystem: CoordinateSystem = Autodesk.DesignScript.Geometry.CoordinateSystem.ByOrigin(0, 0, 0), radius: double = 1, height: double = 1): Cylinder" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "22e53f300eb1475998c3524582853005", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "54826b4ee4634b2292104b007d4028e0", + "Name": "x", + "Description": "X coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "1d2c5973d9d843d5b0bff0396619fd23", + "Name": "y", + "Description": "Y coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "c89f7d1062e147f3b71a474ae397584b", + "Name": "z", + "Description": "Z coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "358c569b10fb49a98727956c5f8d8676", + "Name": "Vector", + "Description": "Vector created by coordinates", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Vector.ByCoordinates@double,double,double", + "Replication": "Auto", + "Description": "Form a Vector by 3 Euclidean coordinates\n\nVector.ByCoordinates (x: double = 0, y: double = 0, z: double = 0): Vector" + }, + { + "ConcreteType": "CoreNodeModels.Input.DoubleInput, CoreNodeModels", + "NumberType": "Double", + "Id": "0bc4537fdaaa49989eae460399fb3b32", + "NodeType": "NumberInputNode", + "Inputs": [], + "Outputs": [ + { + "Id": "14c2eb659c554fb5b278670c57d1167c", + "Name": "", + "Description": "Double", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Creates a number", + "InputValue": 24.0 + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "241bf2a7dfa446fe9ab9d98885faffbb", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "087585b5b54d4ce4a2061865c303ff64", + "Name": "x", + "Description": "double\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "811805415d244b1d941d1ef1d1ab34d8", + "Name": "y", + "Description": "double\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "6874362eb06949e98e00f248bdbfbc4b", + "Name": "z", + "Description": "double\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "fb22aece6bd44a8f8a0fba80f6934b44", + "Name": "CoordinateSystem", + "Description": "CoordinateSystem", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.CoordinateSystem.ByOrigin@double,double,double", + "Replication": "Auto", + "Description": "Create a CoordinateSystem with origin at X, Y, and Z locations, with X and Y Axes set as WCS X and Y Axes.\n\nCoordinateSystem.ByOrigin (x: double = 0, y: double = 0, z: double = 0): CoordinateSystem" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "4da7356557ca463889c7a43a48c3f5e2", + "NodeType": "CodeBlockNode", + "Inputs": [], + "Outputs": [ + { + "Id": "d111df8a46fc44caa3f4b90fda2b54ba", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "13082af8e52f42468ee059e8d801d2e7", + "Name": "", + "Description": "Value of expression at line 2", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "ae170ad9a05c4d0c8d3a0e37b078bede", + "Name": "", + "Description": "Value of expression at line 3", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "2;\n3;\n4;" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "a12836e87b3941e2be2f3f3345d2a280", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "3d03f11d2c154d74aa4460b34f12efa8", + "Name": "coordinateSystem", + "Description": "Autodesk.DesignScript.Geometry.CoordinateSystem", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "04f2acd5c11549cb81418a69876c7810", + "Name": "origin", + "Description": "Origin point\n\nPoint", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "b47ea166cd7e41b99531b0447be823d1", + "Name": "axis", + "Description": "Vector axis for rotation\n\nVector", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "bc5ba4d74ab642c79f7e4414fdc30b78", + "Name": "degrees", + "Description": "Degrees to rotate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "52d3bb672ee34752a7a61a8af5258735", + "Name": "CoordinateSystem", + "Description": "Rotated coordinate system", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.CoordinateSystem.Rotate@Autodesk.DesignScript.Geometry.Point,Autodesk.DesignScript.Geometry.Vector,double", + "Replication": "Auto", + "Description": "Rotates an object around an origin and an axis by a specified degree\n\nCoordinateSystem.Rotate (origin: Point, axis: Vector, degrees: double = 0): CoordinateSystem" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "e2057a3ed3ed4f8caf8b45da2e9c4cb8", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "d8ec788aa8e94cdfa2c61cfc7e40d2e6", + "Name": "x", + "Description": "X coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "d182d12cf246417497946b2a31a73b43", + "Name": "y", + "Description": "Y coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "9314f77dc60a4dc5a2dcd838a090c5fd", + "Name": "z", + "Description": "Z coordinate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "98df6472dc1344bdbb7948e7b4246bd4", + "Name": "Point", + "Description": "Point created by coordinates", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Point.ByCoordinates@double,double,double", + "Replication": "Auto", + "Description": "Form a Point given 3 cartesian coordinates\n\nPoint.ByCoordinates (x: double = 0, y: double = 0, z: double = 0): Point" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "37f0e1cc45554aaebcc9b5bd473edd8f", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "e517ef8de5e949f0b65bd0dd245e92e4", + "Name": "coordinateSystem", + "Description": "Autodesk.DesignScript.Geometry.CoordinateSystem", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "dd81588661dc43948a2e181f15d56033", + "Name": "amount", + "Description": "Amount to scale\n\ndouble\nDefault value : 1", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "b78eb7328f2946c59c46b6b7103196d7", + "Name": "CoordinateSystem", + "Description": "Scaled coordinate system", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.CoordinateSystem.Scale@double", + "Replication": "Auto", + "Description": "Scale uniformly around the origin\n\nCoordinateSystem.Scale (amount: double = 1): CoordinateSystem" + }, + { + "ConcreteType": "CoreNodeModels.Input.DoubleInput, CoreNodeModels", + "NumberType": "Double", + "Id": "3a3710a0e86244319ab0f9660e730787", + "NodeType": "NumberInputNode", + "Inputs": [], + "Outputs": [ + { + "Id": "6161802dedd3457fa3d101bbe9e793b8", + "Name": "", + "Description": "Double", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Creates a number", + "InputValue": 2.3 + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "46b0b4199ab74ca8914a69e3cfda0abd", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "70450a5ca38a41a5ab887c7374a4cc41", + "Name": "x", + "Description": "double\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "fa05b32aeb6248e99bbe9af9e2000cec", + "Name": "y", + "Description": "double\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "cd5e3db11df143c2bbe223602f6221e0", + "Name": "CoordinateSystem", + "Description": "CoordinateSystem", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.CoordinateSystem.ByOrigin@double,double", + "Replication": "Auto", + "Description": "Create a CoordinateSystem with origin at X and Y locations, with X and Y Axes set as WCS X and Y Axes. Z defaults to 0.\n\nCoordinateSystem.ByOrigin (x: double = 0, y: double = 0): CoordinateSystem" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", + "Id": "2c427623e4534c959561640fc4733345", + "NodeType": "CodeBlockNode", + "Inputs": [], + "Outputs": [ + { + "Id": "f4b9923930854650867863fb44886793", + "Name": "", + "Description": "Value of expression at line 1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "4b9e62a4a445493fbeb79aba83c8f17d", + "Name": "", + "Description": "Value of expression at line 2", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Allows for DesignScript code to be authored directly", + "Code": "2.5;\n7;" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "a80a1f03b1184bf2b97a84b1c171905d", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "f4f24929bb974829ab9fdd4fdfac7c74", + "Name": "json", + "Description": "A JSON string\n\nstring", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "fe00a200ab9b468c8ac9315292b20f3a", + "Name": "result", + "Description": "The result type depends on the content of the input string. The result type can be a primitive value (e.g. string, boolean, double), a List, or a Dictionary.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Data.ParseJSON@string", + "Replication": "Auto", + "Description": "Parse converts an arbitrary JSON string to a value. It is the opposite of JSON.Stringify.\n\nData.ParseJSON (json: string): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "1a2fc1b8697f453cbf112895e93d13a7", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "2f78a0b7d3504300bcfde2700709474b", + "Name": "values", + "Description": "A List of values\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "c5eecf1968804eae836d042de76c2e84", + "Name": "json", + "Description": "A JSON string where primitive types (e.g. double, int, boolean), Lists, and Dictionary's will be turned into the associated JSON type.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Data.StringifyJSON@var[]..[]", + "Replication": "Auto", + "Description": "Stringify converts an arbitrary value or a list of arbitrary values to JSON. Replication can be used to apply the operation over a list, producing a list of JSON strings.\n\nData.StringifyJSON (values: var[]..[]): string" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "59fe0d5838ef4bf79db9b70195742323", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "e72970ed4236441e9792d9a4ef584d7f", + "Name": "geometry", + "Description": "Autodesk.DesignScript.Geometry.Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "99091171a1094994abe8e318a1671791", + "Name": "other", + "Description": "Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "3fa227ca889c40bfa1de7c2823f70fb3", + "Name": "bool", + "Description": "bool", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Geometry.IsAlmostEqualTo@Autodesk.DesignScript.Geometry.Geometry", + "Replication": "Auto", + "Description": "Check if the two objects have the same representational geometry or numerical values\n\nGeometry.IsAlmostEqualTo (other: Geometry): bool" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "94ee1cd4e95d45f788159d0c3150dfaf", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "2c744c5ab3aa435cabd73f6795a39074", + "Name": "geometry", + "Description": "Autodesk.DesignScript.Geometry.Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "503ccb8faa4c4bbb8086d35671c91346", + "Name": "mirrorPlane", + "Description": "Plane", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "cabc5d2b77044625b31e70b77cd783dc", + "Name": "Geometry", + "Description": "Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Geometry.Mirror@Autodesk.DesignScript.Geometry.Plane", + "Replication": "Auto", + "Description": "Mirror the object across the input Plane\n\nGeometry.Mirror (mirrorPlane: Plane): Geometry" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "bd6ddacfa87141089d6fef5f4feeec3b", + "NodeType": "FunctionNode", + "Inputs": [], + "Outputs": [ + { + "Id": "feb00abe545849c8890b2929dd81054c", + "Name": "Plane", + "Description": "Plane at XZ plane of world", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Plane.XZ", + "Replication": "Auto", + "Description": "Creates a plane in the world XZ plane\n\nPlane.XZ ( ): Plane" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "a7d35e5c89a6420f9e2b775ff9b5ddc9", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "95c674f6fd9f460b85dcedca5df5ffcd", + "Name": "json", + "Description": "A JSON string\n\nstring", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "9ce415117fbe43a4ba33343010e5a139", + "Name": "result", + "Description": "The result type depends on the content of the input string. The result type can be a primitive value (e.g. string, boolean, double), a List, or a Dictionary.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Data.ParseJSON@string", + "Replication": "Auto", + "Description": "Parse converts an arbitrary JSON string to a value. It is the opposite of JSON.Stringify.\n\nData.ParseJSON (json: string): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "6b3ad7b79f024d46a858318d83e88cf6", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "ecf6433689774d8c9f50502e6cad00de", + "Name": "geometry", + "Description": "Autodesk.DesignScript.Geometry.Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "144366a2ebbb462c85436a2794a75762", + "Name": "other", + "Description": "Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "0ea65b3897374bfa90987a4982fb59ce", + "Name": "bool", + "Description": "bool", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Geometry.IsAlmostEqualTo@Autodesk.DesignScript.Geometry.Geometry", + "Replication": "Auto", + "Description": "Check if the two objects have the same representational geometry or numerical values\n\nGeometry.IsAlmostEqualTo (other: Geometry): bool" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "99f11ecd8d3346698fd6b10c813da38f", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "c18b6acc4efa4fc2beb4e40838c5bb22", + "Name": "values", + "Description": "A List of values\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "6a4c99253f37446fa7ee27a878ca96a3", + "Name": "json", + "Description": "A JSON string where primitive types (e.g. double, int, boolean), Lists, and Dictionary's will be turned into the associated JSON type.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Data.StringifyJSON@var[]..[]", + "Replication": "Auto", + "Description": "Stringify converts an arbitrary value or a list of arbitrary values to JSON. Replication can be used to apply the operation over a list, producing a list of JSON strings.\n\nData.StringifyJSON (values: var[]..[]): string" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "3aa96481d2e644f4a3483294305de1eb", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "686a90204f9d44858af177455b1aaf89", + "Name": "geometry", + "Description": "Autodesk.DesignScript.Geometry.Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "e1c3a65172a94c8b99193d3f7b7b0104", + "Name": "fromCoordinateSystem", + "Description": "CoordinateSystem", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "333383be946646618e72b02b6be537be", + "Name": "contextCoordinateSystem", + "Description": "CoordinateSystem", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "975d2e8d659f4a6da669ce6377dd42f0", + "Name": "Geometry", + "Description": "Transformed Geometry.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Geometry.Transform@Autodesk.DesignScript.Geometry.CoordinateSystem,Autodesk.DesignScript.Geometry.CoordinateSystem", + "Replication": "Auto", + "Description": "Transforms this geometry from source CoordinateSystem to a new context CoordinateSystem.\n\nGeometry.Transform (fromCoordinateSystem: CoordinateSystem, contextCoordinateSystem: CoordinateSystem): Geometry" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "6bc521aaf88d45d7b693826696da12ce", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "07dfa5dfbc994255913fcca13d83d82c", + "Name": "json", + "Description": "A JSON string\n\nstring", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "40a3138e3ced422682f810e5e6591290", + "Name": "result", + "Description": "The result type depends on the content of the input string. The result type can be a primitive value (e.g. string, boolean, double), a List, or a Dictionary.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Data.ParseJSON@string", + "Replication": "Auto", + "Description": "Parse converts an arbitrary JSON string to a value. It is the opposite of JSON.Stringify.\n\nData.ParseJSON (json: string): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "fc6532b4da0b48189963aa13d810b3e7", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "0ad656a7009f4b498ff84597c91ae7fe", + "Name": "values", + "Description": "A List of values\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "3097f0d177984bfbbff60a413fff1d04", + "Name": "json", + "Description": "A JSON string where primitive types (e.g. double, int, boolean), Lists, and Dictionary's will be turned into the associated JSON type.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Data.StringifyJSON@var[]..[]", + "Replication": "Auto", + "Description": "Stringify converts an arbitrary value or a list of arbitrary values to JSON. Replication can be used to apply the operation over a list, producing a list of JSON strings.\n\nData.StringifyJSON (values: var[]..[]): string" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "1436d4034fae43889154306979553206", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "abc63eb470944abab16ba3f371bd6916", + "Name": "geometry", + "Description": "Autodesk.DesignScript.Geometry.Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "8f80ecac5fe246c2870d72930addc12c", + "Name": "other", + "Description": "Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "086feeae789647b2952351dd44d968a4", + "Name": "bool", + "Description": "bool", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Geometry.IsAlmostEqualTo@Autodesk.DesignScript.Geometry.Geometry", + "Replication": "Auto", + "Description": "Check if the two objects have the same representational geometry or numerical values\n\nGeometry.IsAlmostEqualTo (other: Geometry): bool" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "2f538539b881447b82018f608e9c8621", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "25898631ed174e91acc056417477eac0", + "Name": "list", + "Description": "List to get the first item from.\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "42d431cccf294598af8a2c4b16bbcea0", + "Name": "item", + "Description": "First item in the list.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.List.FirstItem@var[]..[]", + "Replication": "Auto", + "Description": "Returns the first item in a list.\n\nList.FirstItem (list: var[]..[]): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "518e4c8b12044ecd872a344b8433f191", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "48d7a96cb5f5430ba4e3cb05875d40ea", + "Name": "topology", + "Description": "Autodesk.DesignScript.Geometry.Topology", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "f159d04e2a314672a0123b87e72511f9", + "Name": "Edge[]", + "Description": "Edge[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Topology.Edges", + "Replication": "Auto", + "Description": "The Edges of the Topology\n\nTopology.Edges: Edge[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "2ae5e3765bb04827b002ba449666e48a", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "325d8ff2ee4f4b75a404361fa38a4adf", + "Name": "edge", + "Description": "Autodesk.DesignScript.Geometry.Edge", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "706b5ff86ded47d79ecb9209771f86cd", + "Name": "Curve", + "Description": "Curve", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Edge.CurveGeometry", + "Replication": "Auto", + "Description": "The underlying Curve making up the Edge\n\nEdge.CurveGeometry: Curve" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "c5eed7360b7e40c5bb7dbf1dc8243de0", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "b7c3e8b39d9543028d712d0b6e13e34e", + "Name": "curve", + "Description": "Autodesk.DesignScript.Geometry.Curve", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "48a9ee0ec52a4794ace4008339468e3d", + "Name": "param", + "Description": "The parameter at which to evaluate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "1c8c313ceef541629818579b82da034d", + "Name": "Point", + "Description": "Point", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Curve.PointAtParameter@double", + "Replication": "Auto", + "Description": "Get a Point on the Curve at a specified parameter between StartParameter() and EndParameter()\n\nCurve.PointAtParameter (param: double = 0): Point" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "92b3754aba264fff8d1d790306033bfc", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "f4144b8e9a3c47e8bb7af5a24bd35962", + "Name": "curve", + "Description": "Autodesk.DesignScript.Geometry.Curve", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "4f61096061cb46b7a8a7604cd65a1e89", + "Name": "param", + "Description": "The parameter at which to evaluate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "84f294d922d440ba8985752e98729ff5", + "Name": "Point", + "Description": "Point", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Curve.PointAtParameter@double", + "Replication": "Auto", + "Description": "Get a Point on the Curve at a specified parameter between StartParameter() and EndParameter()\n\nCurve.PointAtParameter (param: double = 0): Point" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "9429dfcd60f946ceab3fe81e01d320e6", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "32e4c82c802f432296a366d1545eb961", + "Name": "list", + "Description": "List to get the first item from.\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "2ed5a928226743a3bbc951382179552a", + "Name": "item", + "Description": "First item in the list.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.List.FirstItem@var[]..[]", + "Replication": "Auto", + "Description": "Returns the first item in a list.\n\nList.FirstItem (list: var[]..[]): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "070fc5bf3a154522b574adaafeb64ef5", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "bb9880c3bc1746d2881ec0d6ba18159b", + "Name": "edge", + "Description": "Autodesk.DesignScript.Geometry.Edge", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "53896e91e1f244ed92c446e737bcce13", + "Name": "Curve", + "Description": "Curve", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Edge.CurveGeometry", + "Replication": "Auto", + "Description": "The underlying Curve making up the Edge\n\nEdge.CurveGeometry: Curve" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "e97d329275424e3ca240c0295c59fe81", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "487d361c4bfd4826b04e43d07a021ed1", + "Name": "topology", + "Description": "Autodesk.DesignScript.Geometry.Topology", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "b7c597e81b054621aa603104a40192e8", + "Name": "Edge[]", + "Description": "Edge[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Topology.Edges", + "Replication": "Auto", + "Description": "The Edges of the Topology\n\nTopology.Edges: Edge[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "26c1cc4d63564edc85daa3614ce3562c", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "0cba7b62fd964216b0b1a81bbdb05d75", + "Name": "geometry", + "Description": "Autodesk.DesignScript.Geometry.Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "81f32a18a7b14f598516836698c42aa3", + "Name": "other", + "Description": "Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "5e5d43ff43bd448a99e61eb1ab8592b8", + "Name": "bool", + "Description": "bool", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Geometry.IsAlmostEqualTo@Autodesk.DesignScript.Geometry.Geometry", + "Replication": "Auto", + "Description": "Check if the two objects have the same representational geometry or numerical values\n\nGeometry.IsAlmostEqualTo (other: Geometry): bool" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "686dba3be0fa4b7ea84b88fc54beedd0", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "8b22fbbfd8c7448d944006ac99d611ca", + "Name": "curve", + "Description": "Autodesk.DesignScript.Geometry.Curve", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "1e28350500b645f4aa0dd0db65f9f8d6", + "Name": "param", + "Description": "The parameter at which to evaluate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "39d7436d3bd34a7db172e64eae2b1c7d", + "Name": "Point", + "Description": "Point", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Curve.PointAtParameter@double", + "Replication": "Auto", + "Description": "Get a Point on the Curve at a specified parameter between StartParameter() and EndParameter()\n\nCurve.PointAtParameter (param: double = 0): Point" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "77b5bc7b132349038efeb6a233e3b4aa", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "307ee0d20bfc4cdca9dcd891dc3c057f", + "Name": "geometry", + "Description": "Autodesk.DesignScript.Geometry.Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "bcb2ad8ae1b74b1183b2ff407e8a05d3", + "Name": "other", + "Description": "Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "3cdf5e372a994e56874e458532b0e75b", + "Name": "bool", + "Description": "bool", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Geometry.IsAlmostEqualTo@Autodesk.DesignScript.Geometry.Geometry", + "Replication": "Auto", + "Description": "Check if the two objects have the same representational geometry or numerical values\n\nGeometry.IsAlmostEqualTo (other: Geometry): bool" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "d94e46f48d89435580d6df7321aee30f", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "24592bb717f14b8a84a2ead866d773d1", + "Name": "edge", + "Description": "Autodesk.DesignScript.Geometry.Edge", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "fc34539d98a947b0b912d38fea81d325", + "Name": "Curve", + "Description": "Curve", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Edge.CurveGeometry", + "Replication": "Auto", + "Description": "The underlying Curve making up the Edge\n\nEdge.CurveGeometry: Curve" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "60242f7fcd004a7f921955850079d7f0", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "4cc3ecb3210b4488b44b526cc5df64e2", + "Name": "curve", + "Description": "Autodesk.DesignScript.Geometry.Curve", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "3e4ab8adf5bd49beb020aaaf792034fe", + "Name": "param", + "Description": "The parameter at which to evaluate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "675413da647343ca8e4cecad2a5e72f7", + "Name": "Point", + "Description": "Point", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Curve.PointAtParameter@double", + "Replication": "Auto", + "Description": "Get a Point on the Curve at a specified parameter between StartParameter() and EndParameter()\n\nCurve.PointAtParameter (param: double = 0): Point" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "6dfa38f10cc44494941ee543b2e07859", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "cb8caf8812bf4cb3a8e68534ea488ee4", + "Name": "edge", + "Description": "Autodesk.DesignScript.Geometry.Edge", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "373a8fe11ddf4ef6b1656403d4daa8f7", + "Name": "Curve", + "Description": "Curve", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Edge.CurveGeometry", + "Replication": "Auto", + "Description": "The underlying Curve making up the Edge\n\nEdge.CurveGeometry: Curve" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "c965bc7f02b94d6b8f2e4114b513b4ca", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "9e9f6d51fde84b6db41bb47c4b135428", + "Name": "list", + "Description": "List to get the first item from.\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "4b5bbd3100fb4c1b8d9cde9269577e2e", + "Name": "item", + "Description": "First item in the list.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.List.FirstItem@var[]..[]", + "Replication": "Auto", + "Description": "Returns the first item in a list.\n\nList.FirstItem (list: var[]..[]): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "0f3f004d43b34fe29f6fc12da27be9b9", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "744d0ce98ee044ffa372f9f593a85493", + "Name": "list", + "Description": "List to get the first item from.\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "dd6bc14c595f4c66891214424c79f1be", + "Name": "item", + "Description": "First item in the list.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.List.FirstItem@var[]..[]", + "Replication": "Auto", + "Description": "Returns the first item in a list.\n\nList.FirstItem (list: var[]..[]): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "15f158f182924773a261927717c974dc", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "84cae408bac240078bfc93e5a5b5f667", + "Name": "topology", + "Description": "Autodesk.DesignScript.Geometry.Topology", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "f10549d457564efd82dd761fc303b493", + "Name": "Edge[]", + "Description": "Edge[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Topology.Edges", + "Replication": "Auto", + "Description": "The Edges of the Topology\n\nTopology.Edges: Edge[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "888f1006573e4ca28ee55e82f9f5b6c6", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "7c69b728cf9a4c5dbcff93a800bd71bd", + "Name": "topology", + "Description": "Autodesk.DesignScript.Geometry.Topology", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "4dae53a76f23426abf32672f734e9e95", + "Name": "Edge[]", + "Description": "Edge[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Topology.Edges", + "Replication": "Auto", + "Description": "The Edges of the Topology\n\nTopology.Edges: Edge[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "0999ca8cabce4e48bc9ebf7fc583e97b", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "072bb5a70a894ab68537b08ee21ec6b6", + "Name": "curve", + "Description": "Autodesk.DesignScript.Geometry.Curve", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "d634e325163b401d842dbd9f15c62a57", + "Name": "param", + "Description": "The parameter at which to evaluate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "aa79d87c61714330a6bf6c8a1390f297", + "Name": "Point", + "Description": "Point", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Curve.PointAtParameter@double", + "Replication": "Auto", + "Description": "Get a Point on the Curve at a specified parameter between StartParameter() and EndParameter()\n\nCurve.PointAtParameter (param: double = 0): Point" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "7e37eb41b8144143abe087df64996370", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "61c6fb7923204fcf80bbd6c9d0e5db9e", + "Name": "edge", + "Description": "Autodesk.DesignScript.Geometry.Edge", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "73fe2180ab7a4971bc500fa67ba4af0c", + "Name": "Curve", + "Description": "Curve", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Edge.CurveGeometry", + "Replication": "Auto", + "Description": "The underlying Curve making up the Edge\n\nEdge.CurveGeometry: Curve" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "cf4a4f766f5e4aa99f27665268e3a369", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "7d330933040948f09a59d30466d5c625", + "Name": "geometry", + "Description": "Autodesk.DesignScript.Geometry.Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "91f1f1f92af7464a97fd6c0e2eafc241", + "Name": "other", + "Description": "Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "622565f59b2d47a7b94b3307be49c5be", + "Name": "bool", + "Description": "bool", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Geometry.IsAlmostEqualTo@Autodesk.DesignScript.Geometry.Geometry", + "Replication": "Auto", + "Description": "Check if the two objects have the same representational geometry or numerical values\n\nGeometry.IsAlmostEqualTo (other: Geometry): bool" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "45523e6456774e09860aa50ec9d95546", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "abdda2a6c5174860a3059569c65be4a3", + "Name": "list", + "Description": "List to get the first item from.\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "b76485a302e5471ea4a6f6448309327f", + "Name": "item", + "Description": "First item in the list.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.List.FirstItem@var[]..[]", + "Replication": "Auto", + "Description": "Returns the first item in a list.\n\nList.FirstItem (list: var[]..[]): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "3eb8a2c74ebd41a3a6c4e6099f5d79cf", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "f7d19e4df98e42e89b4376205bd3dbb2", + "Name": "curve", + "Description": "Autodesk.DesignScript.Geometry.Curve", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "12fc319b241347c582ac387407d83e06", + "Name": "param", + "Description": "The parameter at which to evaluate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "f29db4fe6b374e58bdb1e54ab6c0413c", + "Name": "Point", + "Description": "Point", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Curve.PointAtParameter@double", + "Replication": "Auto", + "Description": "Get a Point on the Curve at a specified parameter between StartParameter() and EndParameter()\n\nCurve.PointAtParameter (param: double = 0): Point" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "9892a0139d464774abed3c31f9676f0c", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "1e2bc4827dac4b82bf45b374e2e95e6f", + "Name": "edge", + "Description": "Autodesk.DesignScript.Geometry.Edge", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "c6383db72eb244368e1a8a447a72077d", + "Name": "Curve", + "Description": "Curve", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Edge.CurveGeometry", + "Replication": "Auto", + "Description": "The underlying Curve making up the Edge\n\nEdge.CurveGeometry: Curve" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "f16dfe407a104223862529370180456d", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "f9ec60d6657945d28e8655af53b42ea1", + "Name": "list", + "Description": "List to get the first item from.\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "7a5aab9cf91345c88abfeffeebb9633d", + "Name": "item", + "Description": "First item in the list.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.List.FirstItem@var[]..[]", + "Replication": "Auto", + "Description": "Returns the first item in a list.\n\nList.FirstItem (list: var[]..[]): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "351ea75f8181424fb0426e83288a398c", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "bf90e020a9894c42b327db87fffc1696", + "Name": "topology", + "Description": "Autodesk.DesignScript.Geometry.Topology", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "e82b6a5a11cc4921b1ed22e57ef35211", + "Name": "Edge[]", + "Description": "Edge[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Topology.Edges", + "Replication": "Auto", + "Description": "The Edges of the Topology\n\nTopology.Edges: Edge[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "ca17fbfc0bf047b4bc6dd7940ab48447", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "392073a7a34c4ada991943b550990607", + "Name": "topology", + "Description": "Autodesk.DesignScript.Geometry.Topology", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "b6da6e54f1e54a6b9676c3c875a5b5cb", + "Name": "Edge[]", + "Description": "Edge[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Topology.Edges", + "Replication": "Auto", + "Description": "The Edges of the Topology\n\nTopology.Edges: Edge[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "620091b6a86a46d79bcaec906c63ced8", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "28922c8dd7ad4e0aae7b155e5fbf92df", + "Name": "curve", + "Description": "Autodesk.DesignScript.Geometry.Curve", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "d6b958b684c44b1aad4f49acc898db06", + "Name": "param", + "Description": "The parameter at which to evaluate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "7f47012721184887888b041774246d8b", + "Name": "Point", + "Description": "Point", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Curve.PointAtParameter@double", + "Replication": "Auto", + "Description": "Get a Point on the Curve at a specified parameter between StartParameter() and EndParameter()\n\nCurve.PointAtParameter (param: double = 0): Point" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "d3a06d9dd8174d7983d4e7f354876ea8", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "85dd386d9c174f5aaa5e16bc74e7679b", + "Name": "edge", + "Description": "Autodesk.DesignScript.Geometry.Edge", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "998e5096bab4440c9cbbe9a5a6792681", + "Name": "Curve", + "Description": "Curve", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Edge.CurveGeometry", + "Replication": "Auto", + "Description": "The underlying Curve making up the Edge\n\nEdge.CurveGeometry: Curve" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "6ad3c672822d4f3ebd2c96df3174e9eb", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "a8dc99345e854f7f8b08786122cc3b8a", + "Name": "geometry", + "Description": "Autodesk.DesignScript.Geometry.Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "cbabd95f33dd47e18e0e80ed22a6d99c", + "Name": "other", + "Description": "Geometry", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "5ce33ebfc8224a98be330c73f8528cda", + "Name": "bool", + "Description": "bool", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Geometry.IsAlmostEqualTo@Autodesk.DesignScript.Geometry.Geometry", + "Replication": "Auto", + "Description": "Check if the two objects have the same representational geometry or numerical values\n\nGeometry.IsAlmostEqualTo (other: Geometry): bool" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "068346018627424185b1630ba623970b", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "3e6bcd12980e4063b5a6123cd52ce83f", + "Name": "list", + "Description": "List to get the first item from.\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "955a51628b2447cfab26c91f7fd104eb", + "Name": "item", + "Description": "First item in the list.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.List.FirstItem@var[]..[]", + "Replication": "Auto", + "Description": "Returns the first item in a list.\n\nList.FirstItem (list: var[]..[]): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "cf9933bb1d2142ec9e31a64cf64a6c55", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "de1def4308234996ad5085645cd3306b", + "Name": "curve", + "Description": "Autodesk.DesignScript.Geometry.Curve", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "732bb41b139d465d8523e6ddb50a0277", + "Name": "param", + "Description": "The parameter at which to evaluate\n\ndouble\nDefault value : 0", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "18f38dfce14948f49d9ffe996706e67f", + "Name": "Point", + "Description": "Point", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Curve.PointAtParameter@double", + "Replication": "Auto", + "Description": "Get a Point on the Curve at a specified parameter between StartParameter() and EndParameter()\n\nCurve.PointAtParameter (param: double = 0): Point" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "cb74d7934ede4fbca81c4accc81d7b16", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "aeb773f707994663814b5dab885fb389", + "Name": "edge", + "Description": "Autodesk.DesignScript.Geometry.Edge", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "235283d3fc79475484a0cd666d637236", + "Name": "Curve", + "Description": "Curve", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Edge.CurveGeometry", + "Replication": "Auto", + "Description": "The underlying Curve making up the Edge\n\nEdge.CurveGeometry: Curve" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "eebe6accea5943d09d34847c3e74d88b", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "b1e7cd6cb7bc4da2a3163cacaef31bd1", + "Name": "list", + "Description": "List to get the first item from.\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "8e6c1acafcef4e6e8073f8d8da94475f", + "Name": "item", + "Description": "First item in the list.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.List.FirstItem@var[]..[]", + "Replication": "Auto", + "Description": "Returns the first item in a list.\n\nList.FirstItem (list: var[]..[]): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "04453887f28c4e48a069e0e3436dc133", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "ad087c3638174ed2bf7ece9b61e3267d", + "Name": "topology", + "Description": "Autodesk.DesignScript.Geometry.Topology", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "23a8daece1864942b76b66ba5a691f7e", + "Name": "Edge[]", + "Description": "Edge[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Topology.Edges", + "Replication": "Auto", + "Description": "The Edges of the Topology\n\nTopology.Edges: Edge[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "0660c86e5f414fd6ab04b0a567d5209b", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "76db6a4b9f8f4023abbc1d26d3621cc7", + "Name": "topology", + "Description": "Autodesk.DesignScript.Geometry.Topology", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "e485a07f9b214eda8b8ebc578ee63eff", + "Name": "Edge[]", + "Description": "Edge[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Topology.Edges", + "Replication": "Auto", + "Description": "The Edges of the Topology\n\nTopology.Edges: Edge[]" + }, + { + "ConcreteType": "CoreNodeModels.CreateList, CoreNodeModels", + "VariableInputPorts": true, + "Id": "3291662b2ec74e7095e042faeab310fe", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "d9aef971dd3c46be8306597fe0d5734f", + "Name": "item0", + "Description": "Item Index #0", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "8eee7c201812431286c5dbe3d0b2e2db", + "Name": "item1", + "Description": "Item Index #1", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "e99e37b52261453991b69bb4961f00a1", + "Name": "item2", + "Description": "Item Index #2", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "f81846c67dfc49c2974767ff3f20699e", + "Name": "item3", + "Description": "Item Index #3", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "f19413fe1df245fa97b12b00cb9c1e3c", + "Name": "item4", + "Description": "Item Index #4", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "56f491cccc2144d481a941b44bd41498", + "Name": "item5", + "Description": "Item Index #5", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "7baa082935074ea685e1cc771236225b", + "Name": "item6", + "Description": "Item Index #6", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "9e0491fe19d14f228bc220206909ed35", + "Name": "item7", + "Description": "Item Index #7", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "59e0f6b4f9ab49dab5b2924ee7550eb7", + "Name": "item8", + "Description": "Item Index #8", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "a4e35a1b1b344e21aca6a35373dda28d", + "Name": "list", + "Description": "A list (type: var[]..[])", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Makes a new list from the given inputs" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "07366adaf0954529b1ed39b240192c96", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "4b311b70c9484de79bc3ee7bdb44bd85", + "Name": "list", + "Description": "List to be checked on whether all items are true.\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "0d002566877f43f1bd71e59ca7f6998e", + "Name": "bool", + "Description": "True if all items from list are true, false if one or more items is not true", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.List.AllTrue@var[]..[]", + "Replication": "Auto", + "Description": "Determines if all items in the given list is a boolean and has a true value.\n\nList.AllTrue (list: var[]..[]): bool" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "837a810da07f4d278fcef561a593b17b", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "d164de8ead734cd683310df1e6aba345", + "Name": "x", + "Description": "Basic type object to compare (e.g. bool, int, double, string, etc.)\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "b06c45e1f35f42a88d8786fbf61cd3e2", + "Name": "y", + "Description": "Basic type object to compare (e.g. bool, int, double, string, etc.)\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "61645f6dd0a34722890060f2f976665f", + "Name": "bool", + "Description": "Result of equality check", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "==@var[]..[],var[]..[]", + "Replication": "Auto", + "Description": "Compares if x and y are equal\n\n== (x: var[]..[], y: var[]..[]): var[]..[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "f80499cbedb9488f9ac5929e6a86076c", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "5a174fd2945e4218974d61cbe33aab86", + "Name": "object", + "Description": "Object to query type\n\nvar", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "b846fd6aa1794ff2be94b3221067c6ed", + "Name": "string", + "Description": "Type of object.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Object.Type@var", + "Replication": "Auto", + "Description": "Returns the type of object represented as string.\n\nObject.Type (object: var): string" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "44d52303a6aa46e5a06a3d8be4f7a3fb", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "da4eecbcae084954bf04c6879c35485d", + "Name": "object", + "Description": "Object to query type\n\nvar", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "4135e780a22e47449696080883f0febf", + "Name": "string", + "Description": "Type of object.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.Object.Type@var", + "Replication": "Auto", + "Description": "Returns the type of object represented as string.\n\nObject.Type (object: var): string" + } + ], + "Connectors": [ + { + "Start": "29ae545e52bf4cfb870da98d8a0623fa", + "End": "8ae17a32c3e846c4ab53a5e041502524", + "Id": "50d994b07a8a4e63b62412dde9d764ae", + "IsHidden": "False" + }, + { + "Start": "29ae545e52bf4cfb870da98d8a0623fa", + "End": "e4b75642ef7d4bbab711656aaa62786a", + "Id": "bd7578d1bc754f2a81eb0724acbb5c23", + "IsHidden": "False" + }, + { + "Start": "29ae545e52bf4cfb870da98d8a0623fa", + "End": "2c744c5ab3aa435cabd73f6795a39074", + "Id": "d90a6916c8aa4638b7b2e3ba3074db2a", + "IsHidden": "False" + }, + { + "Start": "29ae545e52bf4cfb870da98d8a0623fa", + "End": "686a90204f9d44858af177455b1aaf89", + "Id": "bd6653c7130e4b718b7cd5187ed3c2b5", + "IsHidden": "False" + }, + { + "Start": "29ae545e52bf4cfb870da98d8a0623fa", + "End": "487d361c4bfd4826b04e43d07a021ed1", + "Id": "b9920ed6759844208f190f7eee4c06b9", + "IsHidden": "False" + }, + { + "Start": "29ae545e52bf4cfb870da98d8a0623fa", + "End": "da4eecbcae084954bf04c6879c35485d", + "Id": "def7b78aeab540af95dc4c6852888a50", + "IsHidden": "False" + }, + { + "Start": "46c723d44c084f63b5901139f7f561ca", + "End": "602c2938ea1146a78f580dd4e9ca58ce", + "Id": "b69cd60b8c4547f2b3b2f4f8c7af908c", + "IsHidden": "False" + }, + { + "Start": "25cb10d551cd459982b828c8421d247e", + "End": "bbf039eae49b4d0f821a9012ca99d208", + "Id": "2eec8fba1c5445c8b3a4e264aa7d7701", + "IsHidden": "False" + }, + { + "Start": "c364adceb8224847baa9aa36f98e5792", + "End": "8ae7eb33cda84ba29e2a26b59758fcc4", + "Id": "f5dfdcf7c5304fd8afe94320dd87ca1e", + "IsHidden": "False" + }, + { + "Start": "c364adceb8224847baa9aa36f98e5792", + "End": "48d7a96cb5f5430ba4e3cb05875d40ea", + "Id": "876449f39bc44e2ea55b06df714cb655", + "IsHidden": "False" + }, + { + "Start": "c364adceb8224847baa9aa36f98e5792", + "End": "5a174fd2945e4218974d61cbe33aab86", + "Id": "a4737526ad3044c691253f01ed8467d0", + "IsHidden": "False" + }, + { + "Start": "08d51a74a2fb49649595e21e396bfe52", + "End": "e129ff3c20bc4536a33a94be253dcac7", + "Id": "9cafc5ded95243bc9bcaa174a70fa19b", + "IsHidden": "False" + }, + { + "Start": "cca04a0603e341f2b2bafcd562e76be6", + "End": "1c696945e6d945c0bbcc0696784b472c", + "Id": "a4bbd1f4de46471b9c0daab8db103e78", + "IsHidden": "False" + }, + { + "Start": "e7299a9a56054d35beca11eff024ab0c", + "End": "d084442a59c149e1aab5819db1e11ddd", + "Id": "cdaabf1022004220a75cbce563dd89ef", + "IsHidden": "False" + }, + { + "Start": "cdb5399e8a59413285b8cd0da1ff595b", + "End": "fe9fd199c86545eea5c0c727b373bfac", + "Id": "bd0eb9da441140e1abcb3d66b2f6bca8", + "IsHidden": "False" + }, + { + "Start": "8a7f07a3f47b4905aa0ff11d351b45b9", + "End": "185ba4e7329743c88c12694708607b14", + "Id": "8b4a7e1aaab7462baff62e76a74a60db", + "IsHidden": "False" + }, + { + "Start": "9a2b90f6453543e98e466115d6d8ed32", + "End": "402f5279439a491093ddafe826adad04", + "Id": "a390b588c13e4a34ba34926567fab5fa", + "IsHidden": "False" + }, + { + "Start": "3b41b258479a423281594f79e2e38f88", + "End": "6a631dcec8764fcb926857e8741f162d", + "Id": "9254ed6461d4484a9a7f3abbe2e24b9f", + "IsHidden": "False" + }, + { + "Start": "3d3c0f5d1c1f4fd7a3c7e1922992a04c", + "End": "9188c3c2c08e4fecbb26099de0121c75", + "Id": "256e7a69593e48bc9c5f113ed235137c", + "IsHidden": "False" + }, + { + "Start": "683c5e2b685f4772bc5f596e7747bbcf", + "End": "d9aef971dd3c46be8306597fe0d5734f", + "Id": "6f82af42db5c4a22bda641f8c995f699", + "IsHidden": "False" + }, + { + "Start": "ae96e591877244a5a238f42e09cbf8a4", + "End": "2f78a0b7d3504300bcfde2700709474b", + "Id": "910e3493029d4317a0a0c0df21c363f7", + "IsHidden": "False" + }, + { + "Start": "ae96e591877244a5a238f42e09cbf8a4", + "End": "e72970ed4236441e9792d9a4ef584d7f", + "Id": "ad25498964734c369f05b395be021984", + "IsHidden": "False" + }, + { + "Start": "ae96e591877244a5a238f42e09cbf8a4", + "End": "7c69b728cf9a4c5dbcff93a800bd71bd", + "Id": "15c6d29f5cb5411e93acd00a7de2150f", + "IsHidden": "False" + }, + { + "Start": "358c569b10fb49a98727956c5f8d8676", + "End": "b47ea166cd7e41b99531b0447be823d1", + "Id": "1f31b0ae535943ccb3518018a11ade55", + "IsHidden": "False" + }, + { + "Start": "14c2eb659c554fb5b278670c57d1167c", + "End": "bc5ba4d74ab642c79f7e4414fdc30b78", + "Id": "fc7a53cfbca1469c8ef04d2023ea4d3e", + "IsHidden": "False" + }, + { + "Start": "fb22aece6bd44a8f8a0fba80f6934b44", + "End": "3d03f11d2c154d74aa4460b34f12efa8", + "Id": "888b4f5ab87e46ffb634c736f77dad5e", + "IsHidden": "False" + }, + { + "Start": "d111df8a46fc44caa3f4b90fda2b54ba", + "End": "54826b4ee4634b2292104b007d4028e0", + "Id": "2421584340f14c9a97f5033f0bf36a9b", + "IsHidden": "False" + }, + { + "Start": "d111df8a46fc44caa3f4b90fda2b54ba", + "End": "087585b5b54d4ce4a2061865c303ff64", + "Id": "09eb8d97a81d4fb087e31df641b17aa2", + "IsHidden": "False" + }, + { + "Start": "13082af8e52f42468ee059e8d801d2e7", + "End": "811805415d244b1d941d1ef1d1ab34d8", + "Id": "c840b54444b84efda6784adf3f79bcf7", + "IsHidden": "False" + }, + { + "Start": "ae170ad9a05c4d0c8d3a0e37b078bede", + "End": "1d2c5973d9d843d5b0bff0396619fd23", + "Id": "0ffd2d79191549d29c4a2882fc526bee", + "IsHidden": "False" + }, + { + "Start": "ae170ad9a05c4d0c8d3a0e37b078bede", + "End": "6874362eb06949e98e00f248bdbfbc4b", + "Id": "e2ae75f1cb1b44eba12dbb4cf5e06437", + "IsHidden": "False" + }, + { + "Start": "52d3bb672ee34752a7a61a8af5258735", + "End": "e517ef8de5e949f0b65bd0dd245e92e4", + "Id": "bb828cabdd76432e8b1301abdd4b179e", + "IsHidden": "False" + }, + { + "Start": "52d3bb672ee34752a7a61a8af5258735", + "End": "661a577d4d82439d81a3b6d10ffc738a", + "Id": "5ea481825f6c4b0489e0ec9a408b924f", + "IsHidden": "False" + }, + { + "Start": "98df6472dc1344bdbb7948e7b4246bd4", + "End": "04f2acd5c11549cb81418a69876c7810", + "Id": "767b0328245a4705972b9a6de561e80b", + "IsHidden": "False" + }, + { + "Start": "b78eb7328f2946c59c46b6b7103196d7", + "End": "333383be946646618e72b02b6be537be", + "Id": "189a1903e8ac42b390f634efee363087", + "IsHidden": "False" + }, + { + "Start": "6161802dedd3457fa3d101bbe9e793b8", + "End": "dd81588661dc43948a2e181f15d56033", + "Id": "597db597034349af8655612e2bd529e7", + "IsHidden": "False" + }, + { + "Start": "cd5e3db11df143c2bbe223602f6221e0", + "End": "e1c3a65172a94c8b99193d3f7b7b0104", + "Id": "7343fc3f9e9d4d86aa7089fa8cfe58a6", + "IsHidden": "False" + }, + { + "Start": "f4b9923930854650867863fb44886793", + "End": "51c52bc488094cb7a446795e809dec44", + "Id": "31177d9d12544f23bba34a5efe9e36c0", + "IsHidden": "False" + }, + { + "Start": "4b9e62a4a445493fbeb79aba83c8f17d", + "End": "2e0800742c4c40a9bae5637352e5577e", + "Id": "7d148626845b4f26a7dc82cc6a62f94a", + "IsHidden": "False" + }, + { + "Start": "fe00a200ab9b468c8ac9315292b20f3a", + "End": "99091171a1094994abe8e318a1671791", + "Id": "2df88663b8e0483fa229cf7ae2beb060", + "IsHidden": "False" + }, + { + "Start": "fe00a200ab9b468c8ac9315292b20f3a", + "End": "84cae408bac240078bfc93e5a5b5f667", + "Id": "02d9128e3ff94d40bd40e3690583a030", + "IsHidden": "False" + }, + { + "Start": "c5eecf1968804eae836d042de76c2e84", + "End": "f4f24929bb974829ab9fdd4fdfac7c74", + "Id": "8b97e7ae402041e784c86f29870d5309", + "IsHidden": "False" + }, + { + "Start": "3fa227ca889c40bfa1de7c2823f70fb3", + "End": "e99e37b52261453991b69bb4961f00a1", + "Id": "2590050a679d48cf8f2972c407c8eaad", + "IsHidden": "False" + }, + { + "Start": "cabc5d2b77044625b31e70b77cd783dc", + "End": "c18b6acc4efa4fc2beb4e40838c5bb22", + "Id": "8d2054e42fe94ba5842c1672cf7ee5da", + "IsHidden": "False" + }, + { + "Start": "cabc5d2b77044625b31e70b77cd783dc", + "End": "ecf6433689774d8c9f50502e6cad00de", + "Id": "7115878dcd9c4a44851b38840a17e97f", + "IsHidden": "False" + }, + { + "Start": "cabc5d2b77044625b31e70b77cd783dc", + "End": "392073a7a34c4ada991943b550990607", + "Id": "a82d5fded7b8453aa17e3d7579243151", + "IsHidden": "False" + }, + { + "Start": "feb00abe545849c8890b2929dd81054c", + "End": "503ccb8faa4c4bbb8086d35671c91346", + "Id": "fa7695ced79341049d4ea6d1b332b7db", + "IsHidden": "False" + }, + { + "Start": "9ce415117fbe43a4ba33343010e5a139", + "End": "144366a2ebbb462c85436a2794a75762", + "Id": "f21bfba7960145c5b59ce05190561ef5", + "IsHidden": "False" + }, + { + "Start": "9ce415117fbe43a4ba33343010e5a139", + "End": "bf90e020a9894c42b327db87fffc1696", + "Id": "38a6105f961e468d8936a58d4ca62cba", + "IsHidden": "False" + }, + { + "Start": "0ea65b3897374bfa90987a4982fb59ce", + "End": "f19413fe1df245fa97b12b00cb9c1e3c", + "Id": "ff2da6d5c6b14be59d0b13d9185d18c1", + "IsHidden": "False" + }, + { + "Start": "6a4c99253f37446fa7ee27a878ca96a3", + "End": "95c674f6fd9f460b85dcedca5df5ffcd", + "Id": "6f2be91ffd8e42c1a4e0f67fca1c825e", + "IsHidden": "False" + }, + { + "Start": "975d2e8d659f4a6da669ce6377dd42f0", + "End": "0ad656a7009f4b498ff84597c91ae7fe", + "Id": "ab006e05b28545c4a39524e1e2e77ac3", + "IsHidden": "False" + }, + { + "Start": "975d2e8d659f4a6da669ce6377dd42f0", + "End": "abc63eb470944abab16ba3f371bd6916", + "Id": "d4c3730e770346458cf8a611a4d09180", + "IsHidden": "False" + }, + { + "Start": "975d2e8d659f4a6da669ce6377dd42f0", + "End": "76db6a4b9f8f4023abbc1d26d3621cc7", + "Id": "e0a68a0eafa647d4b88b5bb5ddd7e4b8", + "IsHidden": "False" + }, + { + "Start": "40a3138e3ced422682f810e5e6591290", + "End": "8f80ecac5fe246c2870d72930addc12c", + "Id": "889ff56d3f7d41658db8dcca4d2641f3", + "IsHidden": "False" + }, + { + "Start": "40a3138e3ced422682f810e5e6591290", + "End": "ad087c3638174ed2bf7ece9b61e3267d", + "Id": "2c1bac72a239433b9cb521c02df262ce", + "IsHidden": "False" + }, + { + "Start": "3097f0d177984bfbbff60a413fff1d04", + "End": "07dfa5dfbc994255913fcca13d83d82c", + "Id": "ada9e8dd9e5a4216b685dd91264e5bc8", + "IsHidden": "False" + }, + { + "Start": "086feeae789647b2952351dd44d968a4", + "End": "7baa082935074ea685e1cc771236225b", + "Id": "3a7ab6e674e64b4f9d4f2fcb65092443", + "IsHidden": "False" + }, + { + "Start": "42d431cccf294598af8a2c4b16bbcea0", + "End": "325d8ff2ee4f4b75a404361fa38a4adf", + "Id": "ac8faf7c3d4c4412b5f555ea534ef41c", + "IsHidden": "False" + }, + { + "Start": "f159d04e2a314672a0123b87e72511f9", + "End": "25898631ed174e91acc056417477eac0", + "Id": "d31998ee15e1430eb1629862689b1dbf", + "IsHidden": "False" + }, + { + "Start": "706b5ff86ded47d79ecb9209771f86cd", + "End": "b7c3e8b39d9543028d712d0b6e13e34e", + "Id": "ec242ac4209b4dd7b4e987fb7b6d8395", + "IsHidden": "False" + }, + { + "Start": "1c8c313ceef541629818579b82da034d", + "End": "81f32a18a7b14f598516836698c42aa3", + "Id": "b590a1f751134e168079639dfcc1804d", + "IsHidden": "False" + }, + { + "Start": "84f294d922d440ba8985752e98729ff5", + "End": "0cba7b62fd964216b0b1a81bbdb05d75", + "Id": "7a7ffc1a4a914a0e9e7fcd8e073fdddf", + "IsHidden": "False" + }, + { + "Start": "2ed5a928226743a3bbc951382179552a", + "End": "bb9880c3bc1746d2881ec0d6ba18159b", + "Id": "33ff84b3091e403bb96dac70095ecab7", + "IsHidden": "False" + }, + { + "Start": "53896e91e1f244ed92c446e737bcce13", + "End": "f4144b8e9a3c47e8bb7af5a24bd35962", + "Id": "e385b9bb2a354ddfa14f7a836a6d0088", + "IsHidden": "False" + }, + { + "Start": "b7c597e81b054621aa603104a40192e8", + "End": "32e4c82c802f432296a366d1545eb961", + "Id": "bd3f117e5d3e491bbfe70f24abfb169c", + "IsHidden": "False" + }, + { + "Start": "5e5d43ff43bd448a99e61eb1ab8592b8", + "End": "8eee7c201812431286c5dbe3d0b2e2db", + "Id": "79b29dec9c7c43f2b894943870ea1cd8", + "IsHidden": "False" + }, + { + "Start": "39d7436d3bd34a7db172e64eae2b1c7d", + "End": "bcb2ad8ae1b74b1183b2ff407e8a05d3", + "Id": "dfee302f6daf49bb865d57b37e1ad6c3", + "IsHidden": "False" + }, + { + "Start": "3cdf5e372a994e56874e458532b0e75b", + "End": "f81846c67dfc49c2974767ff3f20699e", + "Id": "6c01d75f719a4924b29ef9e368753aaf", + "IsHidden": "False" + }, + { + "Start": "fc34539d98a947b0b912d38fea81d325", + "End": "8b22fbbfd8c7448d944006ac99d611ca", + "Id": "0cb8668474fd431c94cde377e667265d", + "IsHidden": "False" + }, + { + "Start": "675413da647343ca8e4cecad2a5e72f7", + "End": "307ee0d20bfc4cdca9dcd891dc3c057f", + "Id": "0185d5f9d82e44f480ac5fb4838b9a84", + "IsHidden": "False" + }, + { + "Start": "373a8fe11ddf4ef6b1656403d4daa8f7", + "End": "4cc3ecb3210b4488b44b526cc5df64e2", + "Id": "0f26f648b1904f50b6a40bf2ddc4fa39", + "IsHidden": "False" + }, + { + "Start": "4b5bbd3100fb4c1b8d9cde9269577e2e", + "End": "24592bb717f14b8a84a2ead866d773d1", + "Id": "d158832b33e34afd9d78c0e2e6c6b8d9", + "IsHidden": "False" + }, + { + "Start": "dd6bc14c595f4c66891214424c79f1be", + "End": "cb8caf8812bf4cb3a8e68534ea488ee4", + "Id": "36962e3b4aee40ef9b1fc2897bf9b53b", + "IsHidden": "False" + }, + { + "Start": "f10549d457564efd82dd761fc303b493", + "End": "744d0ce98ee044ffa372f9f593a85493", + "Id": "ed7cbbbb528647f68dcf117da9ea94c1", + "IsHidden": "False" + }, + { + "Start": "4dae53a76f23426abf32672f734e9e95", + "End": "9e9f6d51fde84b6db41bb47c4b135428", + "Id": "b826badf7b474f1a92e58e452bdb4895", + "IsHidden": "False" + }, + { + "Start": "aa79d87c61714330a6bf6c8a1390f297", + "End": "91f1f1f92af7464a97fd6c0e2eafc241", + "Id": "37f4c2ab809e454f8adfcb7206a8e600", + "IsHidden": "False" + }, + { + "Start": "73fe2180ab7a4971bc500fa67ba4af0c", + "End": "072bb5a70a894ab68537b08ee21ec6b6", + "Id": "9adfe62483e245eb9edf643d8df07186", + "IsHidden": "False" + }, + { + "Start": "622565f59b2d47a7b94b3307be49c5be", + "End": "56f491cccc2144d481a941b44bd41498", + "Id": "0f1fb4042c224ac5b9b8f52b195eac95", + "IsHidden": "False" + }, + { + "Start": "b76485a302e5471ea4a6f6448309327f", + "End": "61c6fb7923204fcf80bbd6c9d0e5db9e", + "Id": "e7a26abaeef1499fb7bed91b2719576e", + "IsHidden": "False" + }, + { + "Start": "f29db4fe6b374e58bdb1e54ab6c0413c", + "End": "7d330933040948f09a59d30466d5c625", + "Id": "13411bb1a0fb4df396cc1cce6116355c", + "IsHidden": "False" + }, + { + "Start": "c6383db72eb244368e1a8a447a72077d", + "End": "f7d19e4df98e42e89b4376205bd3dbb2", + "Id": "5ac97a3c2bf44b11a57c4ec82d4564da", + "IsHidden": "False" + }, + { + "Start": "7a5aab9cf91345c88abfeffeebb9633d", + "End": "1e2bc4827dac4b82bf45b374e2e95e6f", + "Id": "9fa6728198a74f26831d63c4075a964c", + "IsHidden": "False" + }, + { + "Start": "e82b6a5a11cc4921b1ed22e57ef35211", + "End": "f9ec60d6657945d28e8655af53b42ea1", + "Id": "74046770b65b4f74bbf85f1c1e321524", + "IsHidden": "False" + }, + { + "Start": "b6da6e54f1e54a6b9676c3c875a5b5cb", + "End": "abdda2a6c5174860a3059569c65be4a3", + "Id": "76f153d1a19e4fa1bcc4670bb41677ba", + "IsHidden": "False" + }, + { + "Start": "7f47012721184887888b041774246d8b", + "End": "cbabd95f33dd47e18e0e80ed22a6d99c", + "Id": "08639dfc96ad4453b760349e5cde852d", + "IsHidden": "False" + }, + { + "Start": "998e5096bab4440c9cbbe9a5a6792681", + "End": "28922c8dd7ad4e0aae7b155e5fbf92df", + "Id": "4d731d1a315043868d1b7019dc1b37ce", + "IsHidden": "False" + }, + { + "Start": "5ce33ebfc8224a98be330c73f8528cda", + "End": "9e0491fe19d14f228bc220206909ed35", + "Id": "b787419ba0084dd6947f744ce648636c", + "IsHidden": "False" + }, + { + "Start": "955a51628b2447cfab26c91f7fd104eb", + "End": "85dd386d9c174f5aaa5e16bc74e7679b", + "Id": "3ff9532a8cc44b87be4e8e0423f0ce34", + "IsHidden": "False" + }, + { + "Start": "18f38dfce14948f49d9ffe996706e67f", + "End": "a8dc99345e854f7f8b08786122cc3b8a", + "Id": "32e67007e68c4b4fb497068f652bc8f5", + "IsHidden": "False" + }, + { + "Start": "235283d3fc79475484a0cd666d637236", + "End": "de1def4308234996ad5085645cd3306b", + "Id": "b8f89a19bf6d494b9ad20cbebfb3dd25", + "IsHidden": "False" + }, + { + "Start": "8e6c1acafcef4e6e8073f8d8da94475f", + "End": "aeb773f707994663814b5dab885fb389", + "Id": "3bfe99c4cf8543649fc9318b73d0be2a", + "IsHidden": "False" + }, + { + "Start": "23a8daece1864942b76b66ba5a691f7e", + "End": "b1e7cd6cb7bc4da2a3163cacaef31bd1", + "Id": "76bec7a09f1a473c866c43da8ea8a29b", + "IsHidden": "False" + }, + { + "Start": "e485a07f9b214eda8b8ebc578ee63eff", + "End": "3e6bcd12980e4063b5a6123cd52ce83f", + "Id": "70980e5291cf42c5aefb28e4a32aeb4a", + "IsHidden": "False" + }, + { + "Start": "a4e35a1b1b344e21aca6a35373dda28d", + "End": "4b311b70c9484de79bc3ee7bdb44bd85", + "Id": "b1bac1f6510d4bdbb662efbbd6f47053", + "IsHidden": "False" + }, + { + "Start": "61645f6dd0a34722890060f2f976665f", + "End": "59e0f6b4f9ab49dab5b2924ee7550eb7", + "Id": "d7eca5b0e26b40bd9266d7cb2ae84657", + "IsHidden": "False" + }, + { + "Start": "b846fd6aa1794ff2be94b3221067c6ed", + "End": "b06c45e1f35f42a88d8786fbf61cd3e2", + "Id": "2649e023157040e1a16813d50711127a", + "IsHidden": "False" + }, + { + "Start": "4135e780a22e47449696080883f0febf", + "End": "d164de8ead734cd683310df1e6aba345", + "Id": "ebbc9cd0fcff4447b81cc56f71fc278e", + "IsHidden": "False" + } + ], + "Dependencies": [], + "NodeLibraryDependencies": [], + "Thumbnail": "", + "GraphDocumentationURL": null, + "ExtensionWorkspaceData": [ + { + "ExtensionGuid": "28992e1d-abb9-417f-8b1b-05e053bee670", + "Name": "Properties", + "Version": "3.0", + "Data": {} + } + ], + "Author": "", + "Linting": { + "activeLinter": "None", + "activeLinterId": "7b75fb44-43fd-4631-a878-29f4d5d8399a", + "warningCount": 0, + "errorCount": 0 + }, + "Bindings": [], + "View": { + "Dynamo": { + "ScaleFactor": 1.0, + "HasRunWithoutCrash": true, + "IsVisibleInDynamoLibrary": true, + "Version": "3.0.0.5795", + "RunType": "Automatic", + "RunPeriod": "1000" + }, + "Camera": { + "Name": "_Background Preview", + "EyeX": -37.443233489990234, + "EyeY": 59.30361557006836, + "EyeZ": 38.009483337402344, + "LookX": 32.443233489990234, + "LookY": -48.30361557006836, + "LookZ": -46.009483337402344, + "UpX": 0.27276378870010376, + "UpY": 0.8808925151824951, + "UpZ": -0.38681814074516296 + }, + "ConnectorPins": [], + "NodeViews": [ + { + "Id": "4ac4124266f446d793bf77aaa5e48e23", + "Name": "Cylinder.ByPointsRadius", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 571.7070472414721, + "Y": 260.5450436938777 + }, + { + "Id": "90207aa2087d490ab799a74dc386468a", + "Name": "Point.ByCoordinates", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 242.85134378432804, + "Y": 145.9644420010735 + }, + { + "Id": "87f3d5e08dfd442b8ee9992291ef29f0", + "Name": "Point.ByCoordinates", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 244.11314795157557, + "Y": 363.5931175294786 + }, + { + "Id": "cfa2d76862464e5998696e61e32a053e", + "Name": "Data.ParseJSON", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1328.2035610390294, + "Y": 282.06613460504275 + }, + { + "Id": "8001be291db14f77aae0d469b4d76866", + "Name": "Data.StringifyJSON", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 992.1127062667026, + "Y": 278.9723366965128 + }, + { + "Id": "9275e30f127049c5be70f06e66520a2c", + "Name": "Number", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 243.99034242652795, + "Y": 590.8964194019468 + }, + { + "Id": "c3491d08a01a43b68c0a8f7eeb2e4304", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -96.44308251076563, + "Y": 165.35925822768957 + }, + { + "Id": "4fde9e2ba08147fba5ab2c8bce430148", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -100.0240006461596, + "Y": 392.44917166154664 + }, + { + "Id": "82ad165d2f59411b9e98776389591c43", + "Name": "Geometry.IsAlmostEqualTo", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1685.3113286170512, + "Y": 38.531690444910964 + }, + { + "Id": "09c7aa43e8ca4d09a691a10c9a0d1386", + "Name": "Cylinder.ByRadiusHeight", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 524.28349509189, + "Y": 1108.4376894050176 + }, + { + "Id": "22e53f300eb1475998c3524582853005", + "Name": "Vector.ByCoordinates", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -1393.6462196771256, + "Y": 1491.0050858692118 + }, + { + "Id": "0bc4537fdaaa49989eae460399fb3b32", + "Name": "Number", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -1393.6462196771256, + "Y": 1703.0050858692118 + }, + { + "Id": "241bf2a7dfa446fe9ab9d98885faffbb", + "Name": "CoordinateSystem.ByOrigin", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -1393.6462196771256, + "Y": 1067.0050858692118 + }, + { + "Id": "4da7356557ca463889c7a43a48c3f5e2", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -1647.6462196771256, + "Y": 1102.1425858692116 + }, + { + "Id": "a12836e87b3941e2be2f3f3345d2a280", + "Name": "CoordinateSystem.Rotate", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -1015.1462196771256, + "Y": 1334.0050858692118 + }, + { + "Id": "e2057a3ed3ed4f8caf8b45da2e9c4cb8", + "Name": "Point.ByCoordinates", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -1393.6462196771256, + "Y": 1279.0050858692118 + }, + { + "Id": "37f0e1cc45554aaebcc9b5bd473edd8f", + "Name": "CoordinateSystem.Scale", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -192.29660936751975, + "Y": 3004.4166955765813 + }, + { + "Id": "3a3710a0e86244319ab0f9660e730787", + "Name": "Number", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -407.2346881957146, + "Y": 3070.2558286270955 + }, + { + "Id": "46b0b4199ab74ca8914a69e3cfda0abd", + "Name": "CoordinateSystem.ByOrigin", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -130.25651127375204, + "Y": 2834.9959110846353 + }, + { + "Id": "2c427623e4534c959561640fc4733345", + "Name": "Code Block", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 217.51616185360444, + "Y": 1152.9727378795442 + }, + { + "Id": "a80a1f03b1184bf2b97a84b1c171905d", + "Name": "Data.ParseJSON", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1324.4305556586758, + "Y": 1148.1744776359737 + }, + { + "Id": "1a2fc1b8697f453cbf112895e93d13a7", + "Name": "Data.StringifyJSON", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 989.278416516464, + "Y": 1147.896826617789 + }, + { + "Id": "59fe0d5838ef4bf79db9b70195742323", + "Name": "Geometry.IsAlmostEqualTo", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1681.5383232366976, + "Y": 904.6400334758421 + }, + { + "Id": "94ee1cd4e95d45f788159d0c3150dfaf", + "Name": "Geometry.Mirror", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 510.7608517817539, + "Y": 2053.6644933045495 + }, + { + "Id": "bd6ddacfa87141089d6fef5f4feeec3b", + "Name": "Plane.XZ", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 282.76815106964546, + "Y": 2113.4699587585224 + }, + { + "Id": "a7d35e5c89a6420f9e2b775ff9b5ddc9", + "Name": "Data.ParseJSON", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1250.7674244789405, + "Y": 2138.7700626145484 + }, + { + "Id": "6b3ad7b79f024d46a858318d83e88cf6", + "Name": "Geometry.IsAlmostEqualTo", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1607.8751920569623, + "Y": 1895.2356184544167 + }, + { + "Id": "99f11ecd8d3346698fd6b10c813da38f", + "Name": "Data.StringifyJSON", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 915.6152853367287, + "Y": 2138.4924115963636 + }, + { + "Id": "3aa96481d2e644f4a3483294305de1eb", + "Name": "Geometry.Transform", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 476.631912522457, + "Y": 2866.882759717318 + }, + { + "Id": "6bc521aaf88d45d7b693826696da12ce", + "Name": "Data.ParseJSON", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1252.688124646015, + "Y": 2939.6287472547247 + }, + { + "Id": "fc6532b4da0b48189963aa13d810b3e7", + "Name": "Data.StringifyJSON", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 917.5359855038031, + "Y": 2939.35109623654 + }, + { + "Id": "1436d4034fae43889154306979553206", + "Name": "Geometry.IsAlmostEqualTo", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1609.7958922240366, + "Y": 2696.0943030945928 + }, + { + "Id": "2f538539b881447b82018f608e9c8621", + "Name": "List.FirstItem", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1954.3959845564268, + "Y": 511.6012340830674 + }, + { + "Id": "518e4c8b12044ecd872a344b8433f191", + "Name": "Topology.Edges", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1680.5959224210999, + "Y": 511.6012340830674 + }, + { + "Id": "2ae5e3765bb04827b002ba449666e48a", + "Name": "Edge.CurveGeometry", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2180.131029463028, + "Y": 512.3945318290205 + }, + { + "Id": "c5eed7360b7e40c5bb7dbf1dc8243de0", + "Name": "Curve.PointAtParameter", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2487.4837380425224, + "Y": 514.5037082399791 + }, + { + "Id": "92b3754aba264fff8d1d790306033bfc", + "Name": "Curve.PointAtParameter", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2498.784082617034, + "Y": 364.7167371058979 + }, + { + "Id": "9429dfcd60f946ceab3fe81e01d320e6", + "Name": "List.FirstItem", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1965.6963291309382, + "Y": 361.8142629489862 + }, + { + "Id": "070fc5bf3a154522b574adaafeb64ef5", + "Name": "Edge.CurveGeometry", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2191.4313740375396, + "Y": 362.60756069493937 + }, + { + "Id": "e97d329275424e3ca240c0295c59fe81", + "Name": "Topology.Edges", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1691.8962669956113, + "Y": 361.8142629489862 + }, + { + "Id": "26c1cc4d63564edc85daa3614ce3562c", + "Name": "Geometry.IsAlmostEqualTo", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2854.754990132943, + "Y": 441.60674320941064 + }, + { + "Id": "686dba3be0fa4b7ea84b88fc54beedd0", + "Name": "Curve.PointAtParameter", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2528.4746635440483, + "Y": 1369.9652342900367 + }, + { + "Id": "77b5bc7b132349038efeb6a233e3b4aa", + "Name": "Geometry.IsAlmostEqualTo", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2895.745915634469, + "Y": 1297.0682692594683 + }, + { + "Id": "d94e46f48d89435580d6df7321aee30f", + "Name": "Edge.CurveGeometry", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2221.1219549645534, + "Y": 1367.856057879078 + }, + { + "Id": "60242f7fcd004a7f921955850079d7f0", + "Name": "Curve.PointAtParameter", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2533.546347370625, + "Y": 1203.983745211324 + }, + { + "Id": "6dfa38f10cc44494941ee543b2e07859", + "Name": "Edge.CurveGeometry", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2232.422299539065, + "Y": 1218.0690867449969 + }, + { + "Id": "c965bc7f02b94d6b8f2e4114b513b4ca", + "Name": "List.FirstItem", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1995.3869100579527, + "Y": 1367.0627601331248 + }, + { + "Id": "0f3f004d43b34fe29f6fc12da27be9b9", + "Name": "List.FirstItem", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2006.687254632464, + "Y": 1217.2757889990437 + }, + { + "Id": "15f158f182924773a261927717c974dc", + "Name": "Topology.Edges", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1732.887192497137, + "Y": 1217.2757889990437 + }, + { + "Id": "888f1006573e4ca28ee55e82f9f5b6c6", + "Name": "Topology.Edges", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1721.5868479226256, + "Y": 1367.0627601331248 + }, + { + "Id": "0999ca8cabce4e48bc9ebf7fc583e97b", + "Name": "Curve.PointAtParameter", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2486.1365820856454, + "Y": 2313.1059358851244 + }, + { + "Id": "7e37eb41b8144143abe087df64996370", + "Name": "Edge.CurveGeometry", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2178.7838735061505, + "Y": 2310.9967594741656 + }, + { + "Id": "cf4a4f766f5e4aa99f27665268e3a369", + "Name": "Geometry.IsAlmostEqualTo", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2853.407834176066, + "Y": 2240.2089708545554 + }, + { + "Id": "45523e6456774e09860aa50ec9d95546", + "Name": "List.FirstItem", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1953.0488285995496, + "Y": 2310.2034617282125 + }, + { + "Id": "3eb8a2c74ebd41a3a6c4e6099f5d79cf", + "Name": "Curve.PointAtParameter", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2491.2082659122216, + "Y": 2147.1244468064115 + }, + { + "Id": "9892a0139d464774abed3c31f9676f0c", + "Name": "Edge.CurveGeometry", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2190.084218080662, + "Y": 2161.2097883400843 + }, + { + "Id": "f16dfe407a104223862529370180456d", + "Name": "List.FirstItem", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1964.3491731740608, + "Y": 2160.416490594131 + }, + { + "Id": "351ea75f8181424fb0426e83288a398c", + "Name": "Topology.Edges", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1690.5491110387338, + "Y": 2160.416490594131 + }, + { + "Id": "ca17fbfc0bf047b4bc6dd7940ab48447", + "Name": "Topology.Edges", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1679.2487664642224, + "Y": 2310.2034617282125 + }, + { + "Id": "620091b6a86a46d79bcaec906c63ced8", + "Name": "Curve.PointAtParameter", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2525.1037182497703, + "Y": 3198.389168720207 + }, + { + "Id": "d3a06d9dd8174d7983d4e7f354876ea8", + "Name": "Edge.CurveGeometry", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2217.7510096702754, + "Y": 3196.2799923092484 + }, + { + "Id": "6ad3c672822d4f3ebd2c96df3174e9eb", + "Name": "Geometry.IsAlmostEqualTo", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2892.374970340191, + "Y": 3125.4922036896382 + }, + { + "Id": "068346018627424185b1630ba623970b", + "Name": "List.FirstItem", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1992.0159647636742, + "Y": 3195.4866945632953 + }, + { + "Id": "cf9933bb1d2142ec9e31a64cf64a6c55", + "Name": "Curve.PointAtParameter", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2530.1754020763465, + "Y": 3032.4076796414943 + }, + { + "Id": "cb74d7934ede4fbca81c4accc81d7b16", + "Name": "Edge.CurveGeometry", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2229.051354244787, + "Y": 3046.493021175167 + }, + { + "Id": "eebe6accea5943d09d34847c3e74d88b", + "Name": "List.FirstItem", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 2003.3163093381854, + "Y": 3045.699723429214 + }, + { + "Id": "04453887f28c4e48a069e0e3436dc133", + "Name": "Topology.Edges", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1729.5162472028587, + "Y": 3045.699723429214 + }, + { + "Id": "0660c86e5f414fd6ab04b0a567d5209b", + "Name": "Topology.Edges", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1718.215902628347, + "Y": 3195.4866945632953 + }, + { + "Id": "3291662b2ec74e7095e042faeab310fe", + "Name": "List Create", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 3690.804243531248, + "Y": 1610.4584976386545 + }, + { + "Id": "07366adaf0954529b1ed39b240192c96", + "Name": "List.AllTrue", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 4012.241279360191, + "Y": 1609.6948772376595 + }, + { + "Id": "837a810da07f4d278fcef561a593b17b", + "Name": "==", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1751.3783138254178, + "Y": -231.02387433430158 + }, + { + "Id": "f80499cbedb9488f9ac5929e6a86076c", + "Name": "Object.Type", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1443.326675543904, + "Y": -149.1315094104989 + }, + { + "Id": "44d52303a6aa46e5a06a3d8be4f7a3fb", + "Name": "Object.Type", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 1446.9059972217378, + "Y": -294.382261418551 + } + ], + "Annotations": [ + { + "Id": "4193cc6792584e54a262eac56443df19", + "Title": "All True For Cylinder", + "DescriptionText": "", + "IsExpanded": true, + "WidthAdjustment": 0.0, + "HeightAdjustment": 0.0, + "Nodes": [ + "07366adaf0954529b1ed39b240192c96" + ], + "HasNestedGroups": false, + "Left": 4002.241279360191, + "Top": 1450.1948772376595, + "Width": 195.99999999999955, + "Height": 291.5, + "FontSize": 36.0, + "GroupStyleId": "00000000-0000-0000-0000-000000000000", + "InitialTop": 1609.6948772376595, + "InitialHeight": 145.0, + "TextblockHeight": 149.5, + "Background": "#FFC1D676" + } + ], + "X": 278.82945234851957, + "Y": 252.94331192032047, + "Zoom": 0.1426371938798125 + } +} \ No newline at end of file diff --git a/test/core/json/TestColor.bmp b/test/core/json/TestColor.bmp new file mode 100644 index 00000000000..bb3f9d51e0e Binary files /dev/null and b/test/core/json/TestColor.bmp differ diff --git a/test/core/warning/CombinedBuildAndRuntimeWarning.dyn b/test/core/warning/CombinedBuildAndRuntimeWarning.dyn new file mode 100644 index 00000000000..c6df673e0b7 --- /dev/null +++ b/test/core/warning/CombinedBuildAndRuntimeWarning.dyn @@ -0,0 +1,260 @@ +{ + "Uuid": "97a400ee-94fa-42f2-aeaf-eccee08b09d0", + "IsCustomNode": false, + "Description": "", + "Name": "CombinedBuildAndRuntimeWarning", + "ElementResolver": { + "ResolutionMap": {} + }, + "Inputs": [], + "Outputs": [], + "Nodes": [ + { + "ConcreteType": "CoreNodeModels.Remember, CoreNodeModels", + "Cache": "", + "Id": "68d59d31924a4bd9ad8bedf6ad3d6ba8", + "NodeType": "ExtensionNode", + "Inputs": [ + { + "Id": "cdddb90e19104b228d767cfbb80aee7e", + "Name": ">", + "Description": "Data to sample and store in the file.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "3cf56d53b34140f3b6e0d2364761b4f7", + "Name": ">", + "Description": "Data", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled", + "Description": "Store data passing through this node to the Dynamo file. Return the stored data if the input is null." + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "7cbc1c468eeb4212af0aff74bd0cef00", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "3bc7bf2fc7ac48a8a0120fdc84836f04", + "Name": "width", + "Description": "Width of cuboid\n\ndouble\nDefault value : 1", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "d992692be6b84aa19166d48e4866527f", + "Name": "length", + "Description": "Length of cuboid\n\ndouble\nDefault value : 1", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "82110a4632424e839fa76ad5e11bd23b", + "Name": "height", + "Description": "Height of cuboid\n\ndouble\nDefault value : 1", + "UsingDefaultValue": true, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "9954d36df8c3426fa002cf0b023f986e", + "Name": "Cuboid", + "Description": "Cuboid created by lengths", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Cuboid.ByLengths@double,double,double", + "Replication": "Auto", + "Description": "Create a Cuboid centered at WCS origin, with width, length, and height.\n\nCuboid.ByLengths (width: double = 1, length: double = 1, height: double = 1): Cuboid" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "8462a9c342cf4d34bd712a1d40d36d08", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "0de8cca8b3e1483f97965ed1e8a1e369", + "Name": "topology", + "Description": "Autodesk.DesignScript.Geometry.Topology", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "aef89188e8c54ee4a0dff43f2ffde441", + "Name": "Vertex[]", + "Description": "Vertex[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "Autodesk.DesignScript.Geometry.Topology.Vertices", + "Replication": "Auto", + "Description": "The Vertices of the Topology\n\nTopology.Vertices: Vertex[]" + }, + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "Id": "fa0a1055b0404964bfb03c0f1b63b03c", + "NodeType": "FunctionNode", + "Inputs": [ + { + "Id": "f18736ff029549c3bd2de86ba8a19b31", + "Name": "list", + "Description": "List to get the first item from.\n\nvar[]..[]", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "2feda6bf839940eebf92be324f9896be", + "Name": "item", + "Description": "First item in the list.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "FunctionSignature": "DSCore.List.FirstItem@var[]..[]", + "Replication": "Auto", + "Description": "Returns the first item in a list.\n\nList.FirstItem (list: var[]..[]): var[]..[]" + } + ], + "Connectors": [ + { + "Start": "9954d36df8c3426fa002cf0b023f986e", + "End": "0de8cca8b3e1483f97965ed1e8a1e369", + "Id": "6fa48a366ab24c0db20aa151d7b0ebf4", + "IsHidden": "False" + }, + { + "Start": "aef89188e8c54ee4a0dff43f2ffde441", + "End": "f18736ff029549c3bd2de86ba8a19b31", + "Id": "7644549c527e4ec6b8f1372f8f989972", + "IsHidden": "False" + }, + { + "Start": "2feda6bf839940eebf92be324f9896be", + "End": "cdddb90e19104b228d767cfbb80aee7e", + "Id": "2c5f9460c66a4ff18eaaf0506c434dad", + "IsHidden": "False" + } + ], + "Dependencies": [], + "NodeLibraryDependencies": [], + "Thumbnail": "", + "GraphDocumentationURL": null, + "ExtensionWorkspaceData": [ + { + "ExtensionGuid": "28992e1d-abb9-417f-8b1b-05e053bee670", + "Name": "Properties", + "Version": "3.0", + "Data": {} + } + ], + "Author": "", + "Linting": { + "activeLinter": "None", + "activeLinterId": "7b75fb44-43fd-4631-a878-29f4d5d8399a", + "warningCount": 0, + "errorCount": 0 + }, + "Bindings": [], + "View": { + "Dynamo": { + "ScaleFactor": 1.0, + "HasRunWithoutCrash": true, + "IsVisibleInDynamoLibrary": true, + "Version": "3.0.0.5795", + "RunType": "Automatic", + "RunPeriod": "1000" + }, + "Camera": { + "Name": "_Background Preview", + "EyeX": -17.0, + "EyeY": 24.0, + "EyeZ": 50.0, + "LookX": 12.0, + "LookY": -13.0, + "LookZ": -58.0, + "UpX": 0.0, + "UpY": 1.0, + "UpZ": 0.0 + }, + "ConnectorPins": [], + "NodeViews": [ + { + "Id": "68d59d31924a4bd9ad8bedf6ad3d6ba8", + "Name": "Remember", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 687.3333333333334, + "Y": 113.33333333333334 + }, + { + "Id": "7cbc1c468eeb4212af0aff74bd0cef00", + "Name": "Cuboid.ByLengths", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": -226.66666666666663, + "Y": 113.33333333333331 + }, + { + "Id": "8462a9c342cf4d34bd712a1d40d36d08", + "Name": "Topology.Vertices", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 82.0, + "Y": 113.33333333333331 + }, + { + "Id": "fa0a1055b0404964bfb03c0f1b63b03c", + "Name": "List.FirstItem", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "ShowGeometry": true, + "X": 411.0, + "Y": 113.33333333333331 + } + ], + "Annotations": [], + "X": -45.56275110587575, + "Y": 100.51976809533903, + "Zoom": 0.6468656130924141 + } +} \ No newline at end of file diff --git a/test/pkgs/package with native assembly/bin/nativeassembly.dll b/test/pkgs/package with native assembly/bin/nativeassembly.dll new file mode 100644 index 00000000000..f37cbf13b69 Binary files /dev/null and b/test/pkgs/package with native assembly/bin/nativeassembly.dll differ diff --git a/test/pkgs/package with native assembly/pkg.json b/test/pkgs/package with native assembly/pkg.json new file mode 100644 index 00000000000..42c66b92bc5 --- /dev/null +++ b/test/pkgs/package with native assembly/pkg.json @@ -0,0 +1 @@ +{"license":"","file_hash":null,"name":"package with native assembly","version":"1.0.0","description":"package","group":"","keywords":null,"dependencies":[],"contents":"","engine_version":"2.1.0.7733","engine":"dynamo","engine_metadata":"","site_url":"","repository_url":"","contains_binaries":true,"node_libraries":[]} \ No newline at end of file diff --git a/test/settings/DynamoSettings-NewSettings.xml b/test/settings/DynamoSettings-NewSettings.xml index 2a7bde2b2cd..4ae2b3afca4 100644 --- a/test/settings/DynamoSettings-NewSettings.xml +++ b/test/settings/DynamoSettings-NewSettings.xml @@ -46,6 +46,12 @@ C:\ProgramData\Dynamo\Dynamo Core\2.16\packages true + + + a6f6ab04-752c-4b17-8360-2e563bea7c23 + 588c8174ea314ee3945243a19457796f|[1|f9ec27ad6b584c0babf7055a787df6ad|1] + + C:\ E:\ @@ -61,12 +67,14 @@ true true false + false true 99 5 true false false + true false true @@ -128,6 +136,7 @@ 1 + true diff --git a/tools/NuGet/BuildPackages.bat b/tools/NuGet/BuildPackages.bat index a91a285bd79..d6ba089a87a 100644 --- a/tools/NuGet/BuildPackages.bat +++ b/tools/NuGet/BuildPackages.bat @@ -37,6 +37,13 @@ for /f %%f in ('cscript //Nologo ..\install\GetFileVersion.vbs %harvestPath%\Dyn setlocal DisableDelayedExpansion set version=%Major%.%Minor%.%Build%-beta%Revision% +:: Get target framework from build.xml +for /f %%f in ('cscript //Nologo .\GetTargetFramework.vbs ..\..\src\build.xml') do ( + setlocal EnableDelayedExpansion + set targetFramework=%%f +) +setlocal DisableDelayedExpansion + :: Clean files generated from the previous run if exist *.nupkg ( del *.nupkg ) @@ -45,8 +52,8 @@ for %%f in (%1\*.nuspec) do ( :: Check if nuspec file name containing "Symbols" echo %%f|find "Symbols" >nul :: When nuget pack symbols, set to release path where the symbol files live - if errorlevel 1 ( nuget pack %%f -basepath %harvestPath% -properties Version=%version%) else (nuget pack %%f -basepath %releasePath% -properties Version=%version%) + if errorlevel 1 ( nuget pack %%f -basepath %harvestPath% -properties Version=%version%;TargetFramework=%targetFramework%) else (nuget pack %%f -basepath %releasePath% -properties Version=%version%;TargetFramework=%targetFramework%) if not exist %%~nf.%version%.nupkg ( exit /b 1 ) -) \ No newline at end of file +) diff --git a/tools/NuGet/GetTargetFramework.vbs b/tools/NuGet/GetTargetFramework.vbs new file mode 100644 index 00000000000..d1e13193a60 --- /dev/null +++ b/tools/NuGet/GetTargetFramework.vbs @@ -0,0 +1,6 @@ +Set arguments = WScript.Arguments +Set xmlDoc = CreateObject("Msxml2.DOMDocument") +xmlDoc.load(arguments(0)) +Set dotnet = xmlDoc.selectSingleNode("/Project/PropertyGroup/DotNet") +Wscript.Echo dotnet.text +Wscript.Quit diff --git a/tools/NuGet/template-artifactory/DynamoVisualProgramming.DynamoCoreRuntime.nuspec b/tools/NuGet/template-artifactory/DynamoVisualProgramming.DynamoCoreRuntime.nuspec index f24f2ed13b2..d3a0b445a30 100644 --- a/tools/NuGet/template-artifactory/DynamoVisualProgramming.DynamoCoreRuntime.nuspec +++ b/tools/NuGet/template-artifactory/DynamoVisualProgramming.DynamoCoreRuntime.nuspec @@ -13,13 +13,13 @@ Built targeting Windows Net6 with exclusion of test libraries and symbol files. Copyright Autodesk 2023 - + - + diff --git a/tools/NuGet/template-artifactory/DynamoVisualProgramming.DynamoCoreSymbols.nuspec b/tools/NuGet/template-artifactory/DynamoVisualProgramming.DynamoCoreSymbols.nuspec index df785739765..ffd5b605baf 100644 --- a/tools/NuGet/template-artifactory/DynamoVisualProgramming.DynamoCoreSymbols.nuspec +++ b/tools/NuGet/template-artifactory/DynamoVisualProgramming.DynamoCoreSymbols.nuspec @@ -12,13 +12,13 @@ This package bundles all symbol files from the Dynamo bin folder. Copyright Autodesk 2023 - + - - + + diff --git a/tools/NuGet/template-artifactory/DynamoVisualProgramming.Tests.nuspec b/tools/NuGet/template-artifactory/DynamoVisualProgramming.Tests.nuspec index 801531cc3d2..2e1ccddb92c 100644 --- a/tools/NuGet/template-artifactory/DynamoVisualProgramming.Tests.nuspec +++ b/tools/NuGet/template-artifactory/DynamoVisualProgramming.Tests.nuspec @@ -16,16 +16,16 @@ This package contains all that is required to get up and running creating tests for Dynamo libraries. Copyright Autodesk 2023 - + - - - + + + diff --git a/tools/NuGet/template-nuget/DynamoVisualProgramming.Core.nuspec b/tools/NuGet/template-nuget/DynamoVisualProgramming.Core.nuspec index 99e7907668a..bd2127d8cd4 100644 --- a/tools/NuGet/template-nuget/DynamoVisualProgramming.Core.nuspec +++ b/tools/NuGet/template-nuget/DynamoVisualProgramming.Core.nuspec @@ -26,7 +26,7 @@ Copyright Autodesk 2023 - + @@ -36,25 +36,25 @@ - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + - - + + diff --git a/tools/NuGet/template-nuget/DynamoVisualProgramming.DynamoCoreNodes.nuspec b/tools/NuGet/template-nuget/DynamoVisualProgramming.DynamoCoreNodes.nuspec index 5e082bd1d0a..26bcb36c694 100644 --- a/tools/NuGet/template-nuget/DynamoVisualProgramming.DynamoCoreNodes.nuspec +++ b/tools/NuGet/template-nuget/DynamoVisualProgramming.DynamoCoreNodes.nuspec @@ -20,7 +20,7 @@ Copyright Autodesk 2023 - + @@ -28,18 +28,18 @@ - - - - - - - - - - - - + + + + + + + + + + + + diff --git a/tools/NuGet/template-nuget/DynamoVisualProgramming.Tests.nuspec b/tools/NuGet/template-nuget/DynamoVisualProgramming.Tests.nuspec index 801531cc3d2..2e1ccddb92c 100644 --- a/tools/NuGet/template-nuget/DynamoVisualProgramming.Tests.nuspec +++ b/tools/NuGet/template-nuget/DynamoVisualProgramming.Tests.nuspec @@ -16,16 +16,16 @@ This package contains all that is required to get up and running creating tests for Dynamo libraries. Copyright Autodesk 2023 - + - - - + + + diff --git a/tools/NuGet/template-nuget/DynamoVisualProgramming.WpfUILibrary.nuspec b/tools/NuGet/template-nuget/DynamoVisualProgramming.WpfUILibrary.nuspec index 500865df450..84a8254e081 100644 --- a/tools/NuGet/template-nuget/DynamoVisualProgramming.WpfUILibrary.nuspec +++ b/tools/NuGet/template-nuget/DynamoVisualProgramming.WpfUILibrary.nuspec @@ -23,7 +23,7 @@ - + @@ -31,9 +31,9 @@ - - - + + + diff --git a/tools/NuGet/template-nuget/DynamoVisualProgramming.ZeroTouchLibrary.nuspec b/tools/NuGet/template-nuget/DynamoVisualProgramming.ZeroTouchLibrary.nuspec index 0a5eba75278..b756cebe764 100644 --- a/tools/NuGet/template-nuget/DynamoVisualProgramming.ZeroTouchLibrary.nuspec +++ b/tools/NuGet/template-nuget/DynamoVisualProgramming.ZeroTouchLibrary.nuspec @@ -15,17 +15,17 @@ This package contains all that is required to get up and running building zero touch libraries for the Dynamo Visual Programming language. Copyright Autodesk 2023 - + - - - - + + + +