diff --git a/.github/workflows/lighthouse.yml b/.github/workflows/lighthouse.yml index 2363bf85..b8d55496 100644 --- a/.github/workflows/lighthouse.yml +++ b/.github/workflows/lighthouse.yml @@ -14,6 +14,8 @@ jobs: uses: actions/setup-dotnet@v4 with: dotnet-version: '8.0.x' + - name: setup dotnet ef + run: dotnet tool install --tool-path .\.dotnet-tools dotnet-ef --version 8.0.6 - name: setup node uses: actions/setup-node@v4 with: @@ -35,7 +37,7 @@ jobs: with: install: localdb - name: migrate - run: dotnet ef database update --project web/web.csproj + run: .\.dotnet-tools\dotnet-ef database update --project web/web.csproj - name: run Lighthouse CI run: | npm install -g @lhci/cli@0.9.x diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 37f5aee1..3977e3be 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -16,13 +16,18 @@ jobs: with: fetch-depth: 0 persist-credentials: false + - name: setup node + uses: actions/setup-node@v4 + with: + node-version: '20.x' + - name: install node deps + run: npm install --ignore-scripts --no-audit --no-fund - name: Semantic Release - uses: cycjimmy/semantic-release-action@v3 + uses: cycjimmy/semantic-release-action@e0b75dd3b943e75f6bea693cc69caf82c26c0571 with: - semantic_version: 18 - extra_plugins: | - @semantic-release/changelog@6 - @semantic-release/exec - @semantic-release/git@10 + semantic_version: 24 env: + NPM_CONFIG_LEGACY_PEER_DEPS: true + NPM_CONFIG_AUDIT: false + NPM_CONFIG_FUND: false GITHUB_TOKEN: ${{ secrets.RELEASE_PAT }} diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index 6be93578..bd101485 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -20,7 +20,7 @@ jobs: node-version: '18.x' - name: install node deps - run: npm install + run: npm install --ignore-scripts --no-audit --no-fund - name: lint run: npm run lint @@ -38,12 +38,14 @@ jobs: uses: actions/setup-dotnet@v4 with: dotnet-version: '8.0.x' + - name: setup dotnet ef + run: dotnet tool install --tool-path .\.dotnet-tools dotnet-ef --version 8.0.6 - name: setup node uses: actions/setup-node@v4 with: node-version: '18.x' - name: install node deps - run: npm install + run: npm install --ignore-scripts --no-audit --no-fund - name: node build run: npm run build - name: create settings file @@ -59,7 +61,7 @@ jobs: with: install: localdb - name: migrate - run: dotnet ef database update --project web/web.csproj + run: .\.dotnet-tools\dotnet-ef database update --project web/web.csproj integration_tests: name: 'integration tests' @@ -85,7 +87,7 @@ jobs: distribution: 'microsoft' java-version: '17' - name: install node deps - run: npm install + run: npm install --ignore-scripts --no-audit --no-fund - name: node build run: npm run build - name: install dotnet deps @@ -203,7 +205,7 @@ jobs: distribution: 'microsoft' java-version: '17' - name: install node deps - run: npm install + run: npm install --ignore-scripts --no-audit --no-fund - name: node build run: npm run build - name: install dotnet deps diff --git a/.github/workflows/update.yaml b/.github/workflows/update.yaml index 016f9bb6..939745fa 100644 --- a/.github/workflows/update.yaml +++ b/.github/workflows/update.yaml @@ -18,7 +18,7 @@ jobs: git fetch origin ${{github.ref_name}}:${{github.ref_name}} git reset --hard ${{github.ref_name}} - name: Create Pull Request - uses: peter-evans/create-pull-request@v6.0.0 + uses: peter-evans/create-pull-request@v6.0.5 with: labels: automated pr branch: ${{github.ref_name}} @@ -36,7 +36,7 @@ jobs: git fetch origin ${{github.ref_name}}:${{github.ref_name}} git reset --hard ${{github.ref_name}} - name: Create Pull Request - uses: peter-evans/create-pull-request@v6.0.0 + uses: peter-evans/create-pull-request@v6.0.5 with: labels: automated pr branch: ${{github.ref_name}} diff --git a/Dockerfile b/Dockerfile index e5169dd2..0e902bf2 100644 --- a/Dockerfile +++ b/Dockerfile @@ -34,13 +34,6 @@ ARG USER \ # create config RUN echo "{\"Demo\": true, \"solr\": {\"atlas_address\": \"$SOLR/solr/atlas\", \"atlas_lookups_address\": \"$SOLR/solr/atlas_lookups\"},\"ConnectionStrings\": {\"AtlasDatabase\": \"Server=$HOST;Database=atlas;User Id=$USER; Password=$PASSWORD; MultipleActiveResultSets=true;TrustServerCertificate=YES\"}, \"footer\": {\"links\":{\"Status\": {\"Status\": \"https://status.atlas.bi/status/atlas\", \"Documentation\": \"https://atlas.bi\", \"Source Code\": \"https://github.com/atlas-bi/atlas-bi-library\" }},\"subtitle\": \"Atlas was created by the Riverside Healthcare Analytics team.\"}}" > appsettings.cust.json -# migrate -RUN dotnet tool install --global dotnet-ef \ - && export PATH="$PATH:/root/.dotnet/tools" \ - && dotnet tool restore - -RUN export PATH="$PATH:/root/.dotnet/tools" && dotnet ef database update --project web.csproj -v - RUN dotnet publish -c Release -o out web.csproj FROM mcr.microsoft.com/dotnet/sdk:8.0-alpine diff --git a/package.json b/package.json index ddb4b9c0..3b5846de 100644 --- a/package.json +++ b/package.json @@ -9,59 +9,59 @@ "@fontsource/source-code-pro": "^5.0.0", "@fortawesome/fontawesome-free": "^6.4.0", "@rollup/plugin-babel": "^6.0.3", - "@rollup/plugin-commonjs": "^25.0.2", + "@rollup/plugin-commonjs": "^28.0.0", "@rollup/plugin-json": "^6.0.0", "@rollup/plugin-multi-entry": "^6.0.0", - "@rollup/plugin-node-resolve": "^15.1.0", + "@rollup/plugin-node-resolve": "^16.0.0", "@rollup/plugin-terser": "^0.4.3", "@semantic-release/changelog": "^6.0.3", - "@semantic-release/commit-analyzer": "11.1.0", - "@semantic-release/exec": "6.0.3", + "@semantic-release/commit-analyzer": "13.0.0", + "@semantic-release/exec": "7.1.0", "@semantic-release/git": "10.0.1", - "@semantic-release/github": "^9.0.0", - "@semantic-release/npm": "^11.0.0", - "@semantic-release/release-notes-generator": "12.1.0", + "@semantic-release/github": "^11.0.0", + "@semantic-release/npm": "^12.0.0", + "@semantic-release/release-notes-generator": "14.0.0", "@toycode/markdown-it-class": "1.2.4", - "bulma": "0.9.4", + "bulma": "1.0.1", "bulma-checkradio": "2.1.3", "bulma-steps-component": "github:atlas-bi/bulma-steps", "bulma-switch": "2.0.4", "chart.js": "2.9.4", "commitizen": "^4.3.0", "cz-conventional-changelog": "3.3.0", - "date-fns": "^3.0.0", + "date-fns": "^4.0.0", "dompurify": "3.0.0", - "es6-symbol": "3.1.3", - "eslint": "^8.43.0", + "es6-symbol": "3.1.4", + "eslint": "^9.0.0", "fancy-log": "2.0.0", "focus-within": "3.0.2", "fontawesome-subset": "^4.4.0", - "gulp": "4.0.2", + "gulp": "5.0.0", "gulp-autoprefixer": "8.0.0", "gulp-concat": "2.6.1", "gulp-cssnano": "2.1.3", "gulp-postcss": "10.0.0", - "gulp-purgecss": "5.0.0", + "gulp-purgecss": "7.0.2", "gulp-rename": "2.0.0", "gulp-replace": "^1.1.4", - "gulp-sass": "5.1.0", + "gulp-sass": "6.0.0", "gulp-uglify": "3.0.2", "jsnlog": "2.30.0", "lint-staged": "^15.0.0", - "markdown-it": "14.0.0", - "npm-run-all2": "^6.0.0", + "markdown-it": "14.1.0", + "npm-run-all2": "^7.0.0", "open": "8.4.2", "postcss": "^8.4.24", "prettier": "^3.0.0", "proxy-polyfill": "0.3.2", "regenerator-runtime": "^0.14.0", "rollup": "^4.0.0", - "semantic-release": "^23.0.0", + "semantic-release": "^24.0.0", "stylelint": "^16.0.2", "stylelint-config-prettier-scss": "1.0.0", - "stylelint-config-standard-scss": "^13.0.0", + "stylelint-config-standard-scss": "^14.0.0", "stylelint-scss": "^6.0.0", - "xo": "^0.57.0" + "xo": "^0.58.0" }, "homepage": "https://demo.atlas.bi", "license": "AGPL-3.0-or-later", @@ -164,7 +164,7 @@ "unicorn/prefer-at": "warn" } }, - "version": "3.15.1", + "version": "3.15.26", "dependencies": { "sass": "^1.63.6" } diff --git a/solr.Dockerfile b/solr.Dockerfile index fde52afc..572cebe2 100644 --- a/solr.Dockerfile +++ b/solr.Dockerfile @@ -12,52 +12,78 @@ FROM python:3.12-alpine as search WORKDIR /app -ARG USER -ARG PASSWORD -ARG HOST -# copy site -COPY ["./web/solr", "./"] # startup search and load data -RUN apk add --no-cache openjdk11 bash lsof python3-dev curl gcc git py3-pip gcc libc-dev g++ libffi-dev libxml2 unixodbc-dev && \ +RUN apk add --no-cache openjdk11 bash lsof procps python3-dev curl gcc git py3-pip gcc libc-dev g++ libffi-dev libxml2 unixodbc-dev && \ pip3 install pyodbc pysolr pytz python-dotenv # install sql server driver RUN curl -O https://download.microsoft.com/download/b/9/f/b9f3cce4-3925-46d4-9f46-da08869c6486/msodbcsql18_18.1.1.1-1_amd64.apk && \ apk add --allow-untrusted msodbcsql18_18.1.1.1-1_amd64.apk -# pull solr etl -RUN mkdir etl && cd etl && git clone --depth 1 https://github.com/atlas-bi/Solr-Search-ETL.git . +# Copy site +COPY ["./web/solr", "./"] -# create settings -RUN cd etl && echo "SOLRURL = \"http://localhost:8983/solr/atlas\"" > .env && \ - echo "SOLRLOOKUPURL = \"http://localhost:8983/solr/atlas_lookups\"" >> .env && \ - echo "ATLASDATABASE = \"DRIVER={ODBC Driver 18 for SQL Server};SERVER=$HOST;DATABASE=atlas;UID=$USER;PWD=$PASSWORD;TrustServerCertificate=YES\"" >> .env +# Pull solr etl +RUN mkdir etl && cd etl && git clone --depth 1 https://github.com/atlas-bi/Solr-Search-ETL.git . -# load search +# Permissions RUN chmod -R 777 bin -RUN bin/solr start -force -noprompt -v && \ - cd etl && \ - python3 -c "import time; time.sleep(30)" && \ - python3 atlas_collections.py && \ - python3 atlas_groups.py && \ - python3 atlas_initiatives.py && \ - python3 atlas_lookups.py && \ - python3 atlas_reports.py && \ - python3 atlas_terms.py && \ - python3 atlas_users.py - -FROM alpine:latest -WORKDIR /app -RUN apk add --no-cache openjdk11 bash lsof -COPY --from=search ["/app", "./"] - -ARG USER -ARG PASSWORD -ARG HOST -# create config +# Create startup script +RUN echo '#!/bin/bash' > /start.sh && \ + echo 'set -e' >> /start.sh && \ + echo 'echo "Starting startup script..."' >> /start.sh && \ + echo 'PORT=${PORT:-8983}' >> /start.sh && \ + echo 'cd /app/etl' >> /start.sh && \ + echo 'echo "Generating .env..."' >> /start.sh && \ + echo 'echo "Debug: HOST=$HOST USER=$USER"' >> /start.sh && \ + echo 'export SOLRURL="http://localhost:$PORT/solr/atlas"' >> /start.sh && \ + echo 'export SOLRLOOKUPURL="http://localhost:$PORT/solr/atlas_lookups"' >> /start.sh && \ + echo 'echo "SOLRURL = \"$SOLRURL\"" > .env' >> /start.sh && \ + echo 'echo "SOLRLOOKUPURL = \"$SOLRLOOKUPURL\"" >> .env' >> /start.sh && \ + echo 'export ATLASDATABASE="DRIVER={ODBC Driver 18 for SQL Server};SERVER=$HOST;DATABASE=atlas;UID=$USER;PWD=$PASSWORD;TrustServerCertificate=YES;LoginTimeout=60"' >> /start.sh && \ + echo 'echo "ATLASDATABASE = \"$ATLASDATABASE\"" >> .env' >> /start.sh && \ + echo 'cd /app' >> /start.sh && \ + echo 'echo "Starting Solr (foreground mode, managed by container)..."' >> /start.sh && \ + echo 'bin/solr start -force -noprompt -f -p $PORT & SOLR_PID=$!' >> /start.sh && \ + echo 'echo "Solr PID: $SOLR_PID"' >> /start.sh && \ + echo 'echo "Waiting for Solr..."' >> /start.sh && \ + echo 'sleep 15' >> /start.sh && \ + echo 'echo "Checking SQL Server connectivity..."' >> /start.sh && \ + echo 'set +e' >> /start.sh && \ + echo 'python3 -u -c "import pyodbc, os, time; ' >> /start.sh && \ + echo 'conn_str = os.environ.get(\"ATLASDATABASE\"); ' >> /start.sh && \ + echo 'if not conn_str: print(\"Error: ATLASDATABASE env var is missing\"); exit(1); ' >> /start.sh && \ + echo 'print(f\"Attempting connection to SQL Server...\"); ' >> /start.sh && \ + echo 'for i in range(30): ' >> /start.sh && \ + echo ' try: ' >> /start.sh && \ + echo ' pyodbc.connect(conn_str); ' >> /start.sh && \ + echo ' print(\"Successfully connected to SQL Server\"); ' >> /start.sh && \ + echo ' exit(0); ' >> /start.sh && \ + echo ' except Exception as e: ' >> /start.sh && \ + echo ' print(f\"Connection attempt {i+1} failed: {e}\"); ' >> /start.sh && \ + echo ' time.sleep(5); ' >> /start.sh && \ + echo 'print(\"Could not connect to SQL Server after retries\"); ' >> /start.sh && \ + echo 'exit(1)"' >> /start.sh && \ + echo 'DB_CHECK_EXIT=$?' >> /start.sh && \ + echo 'set -e' >> /start.sh && \ + echo 'if [ $DB_CHECK_EXIT -eq 0 ]; then' >> /start.sh && \ + echo ' echo "Running ETL..."' >> /start.sh && \ + echo ' cd /app/etl' >> /start.sh && \ + echo ' python3 -u atlas_collections.py || echo "Failed atlas_collections.py"' >> /start.sh && \ + echo ' python3 -u atlas_groups.py || echo "Failed atlas_groups.py"' >> /start.sh && \ + echo ' python3 -u atlas_initiatives.py || echo "Failed atlas_initiatives.py"' >> /start.sh && \ + echo ' python3 -u atlas_lookups.py || echo "Failed atlas_lookups.py"' >> /start.sh && \ + echo ' python3 -u atlas_reports.py || echo "Failed atlas_reports.py"' >> /start.sh && \ + echo ' python3 -u atlas_terms.py || echo "Failed atlas_terms.py"' >> /start.sh && \ + echo ' python3 -u atlas_users.py || echo "Failed atlas_users.py"' >> /start.sh && \ + echo 'else' >> /start.sh && \ + echo ' echo "Skipping ETL due to DB connection failure"' >> /start.sh && \ + echo 'fi' >> /start.sh && \ + echo 'cd /app' >> /start.sh && \ + echo 'echo "Solr is running; waiting on PID $SOLR_PID..."' >> /start.sh && \ + echo 'wait $SOLR_PID' >> /start.sh && \ + chmod +x /start.sh -RUN chmod -R 777 bin -# in release 2022.02.2 we need to change the name from atlas_dotnet to atlas_web -CMD bin/solr start -force -noprompt -f -p $PORT +CMD ["/start.sh"] diff --git a/web.Tests/web.Tests.csproj b/web.Tests/web.Tests.csproj index f7f0aca3..28fbc803 100644 --- a/web.Tests/web.Tests.csproj +++ b/web.Tests/web.Tests.csproj @@ -13,25 +13,25 @@ - - + + - - - - - + + + + + runtime; build; native; contentfiles; analyzers; buildtransitive all - - + + runtime; build; native; contentfiles; analyzers; buildtransitive all - + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/web/Program.cs b/web/Program.cs index 42361cdf..db42d261 100644 --- a/web/Program.cs +++ b/web/Program.cs @@ -20,8 +20,11 @@ using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Caching.Memory; +using Microsoft.Extensions.FileProviders; using Microsoft.Net.Http.Headers; using SolrNet; +using System.Data.SqlClient; +using System.Text.RegularExpressions; using WebMarkupMin.AspNet.Common.Compressors; using WebMarkupMin.AspNetCore5; @@ -356,6 +359,98 @@ var signingCertificate in entityDescriptor.IdPSsoDescriptor.SigningCertificates IMemoryCache cache = scope.ServiceProvider.GetRequiredService(); Atlas_WebContext context = scope.ServiceProvider.GetRequiredService(); + if (context.Database.IsRelational()) + { + try + { + context.Database.Migrate(); + } + catch (SqlException ex) when (ex.Number == 4060) + { + var connStr = app.Configuration.GetConnectionString("AtlasDatabase"); + var csb = new SqlConnectionStringBuilder(connStr) { InitialCatalog = "master" }; + + using (var conn = new SqlConnection(csb.ConnectionString)) + { + conn.Open(); + using var cmd = conn.CreateCommand(); + cmd.CommandText = "IF DB_ID(N'atlas') IS NULL CREATE DATABASE [atlas];"; + cmd.ExecuteNonQuery(); + } + + context.Database.Migrate(); + } + } + + var seedDemoRaw = app.Configuration["SEED_DEMO"] ?? Environment.GetEnvironmentVariable("SEED_DEMO"); + var shouldSeedDemo = + !string.IsNullOrWhiteSpace(seedDemoRaw) + && ( + string.Equals(seedDemoRaw, "true", StringComparison.OrdinalIgnoreCase) + || string.Equals(seedDemoRaw, "1", StringComparison.OrdinalIgnoreCase) + || string.Equals(seedDemoRaw, "yes", StringComparison.OrdinalIgnoreCase) + ); + + if (shouldSeedDemo) + { + const string seedMarkerName = "demo_seed_applied"; + var alreadySeeded = context.GlobalSiteSettings.Any(x => x.Name == seedMarkerName); + + if (!alreadySeeded) + { + var seedScriptPath = Path.Combine(AppContext.BaseDirectory, "atlas-demo-seed_script.sql"); + if (File.Exists(seedScriptPath)) + { + var seedSql = File.ReadAllText(seedScriptPath); + var batches = Regex.Split( + seedSql, + @"^\s*GO\s*$", + RegexOptions.Multiline | RegexOptions.IgnoreCase, + TimeSpan.FromSeconds(5) + ); + + using var connection = new SqlConnection(app.Configuration.GetConnectionString("AtlasDatabase")); + connection.Open(); + + using var tx = connection.BeginTransaction(); + try + { + foreach (var batch in batches) + { + var sql = batch?.Trim(); + if (string.IsNullOrWhiteSpace(sql)) + { + continue; + } + + using var cmd = connection.CreateCommand(); + cmd.Transaction = tx; + cmd.CommandTimeout = 60000; + cmd.CommandText = sql; + cmd.ExecuteNonQuery(); + } + + context.GlobalSiteSettings.Add( + new GlobalSiteSetting + { + Name = seedMarkerName, + Description = "", + Value = DateTimeOffset.UtcNow.ToString("O") + } + ); + context.SaveChanges(); + + tx.Commit(); + } + catch + { + tx.Rollback(); + throw; + } + } + } + } + // load override css var css = context .GlobalSiteSettings.Where(x => x.Name == "global_css") diff --git a/web/atlas-demo-seed_script.sql b/web/atlas-demo-seed_script.sql index 4b60e283..c9e6f1d2 100644 --- a/web/atlas-demo-seed_script.sql +++ b/web/atlas-demo-seed_script.sql @@ -2,335 +2,415 @@ USE [atlas] GO -- insert seed records -insert into [atlas].app.UserRoleLinks (UserId, UserRolesId) values (1,1) -GO -- thanks http://random-name-generator.info/index.php?n=100&g=1&st=3 -insert into dbo.[User] (Username, FullName, FirstName, LastName, Department, Title, Email) values - ('Hertha-Barham','Hertha Barham','Hertha','Barham','Accident and Emergency','Boss','hBarham@my_hosptital.rocks'), -('Amada-Tisdale','Amada Tisdale','Amada','Tisdale','Accident and Emergency','Worker','aTisdale@my_hosptital.rocks'), -('Bryce-Bayne','Bryce Bayne','Bryce','Bayne','Accident and Emergency','Manager','bBayne@my_hosptital.rocks'), -('Hae-Weiner','Hae Weiner','Hae','Weiner','Accident and Emergency','Mr Cool','hWeiner@my_hosptital.rocks'), -('Shonda-Purcell','Shonda Purcell','Shonda','Purcell','Accident and Emergency','Do it right','sPurcell@my_hosptital.rocks'), -('Earle-Archuleta','Earle Archuleta','Earle','Archuleta','Accident and Emergency','First at Work','eArchuleta@my_hosptital.rocks'), -('Garth-Cornwell','Garth Cornwell','Garth','Cornwell','Accident and Emergency','Worker','gCornwell@my_hosptital.rocks'), -('Mardell-Crews','Mardell Crews','Mardell','Crews','Accident and Emergency','Worker','mCrews@my_hosptital.rocks'), -('Jade-Wiggins','Jade Wiggins','Jade','Wiggins','Accident and Emergency','Worker','jWiggins@my_hosptital.rocks'), -('Marylee-Rauch','Marylee Rauch','Marylee','Rauch','Accident and Emergency','Worker','mRauch@my_hosptital.rocks'), -('Magda-Shook','Magda Shook','Magda','Shook','Accident and Emergency','Worker','mShook@my_hosptital.rocks'), -('Nannie-Redmond','Nannie Redmond','Nannie','Redmond','Accident and Emergency','Boss','nRedmond@my_hosptital.rocks'), -('Candance-Singer','Candance Singer','Candance','Singer','Accident and Emergency','Worker','cSinger@my_hosptital.rocks'), -('Renata-Bigelow','Renata Bigelow','Renata','Bigelow','Accident and Emergency','Manager','rBigelow@my_hosptital.rocks'), -('Eve-Wilkinson','Eve Wilkinson','Eve','Wilkinson','Accident and Emergency','Mr Cool','eWilkinson@my_hosptital.rocks'), -('Tiesha-Chavis','Tiesha Chavis','Tiesha','Chavis','Admissions','Do it right','tChavis@my_hosptital.rocks'), -('Bernardine-Scherer','Bernardine Scherer','Bernardine','Scherer','Admissions','First at Work','bScherer@my_hosptital.rocks'), -('Stefania-Wakefield','Stefania Wakefield','Stefania','Wakefield','Admissions','Worker','sWakefield@my_hosptital.rocks'), -('Roselia-Hoskins','Roselia Hoskins','Roselia','Hoskins','Admissions','Worker','rHoskins@my_hosptital.rocks'), -('Hyun-Rockwell','Hyun Rockwell','Hyun','Rockwell','Admissions','Worker','hRockwell@my_hosptital.rocks'), -('Marcelina-Brinson','Marcelina Brinson','Marcelina','Brinson','Admissions','Worker','mBrinson@my_hosptital.rocks'), -('Grazyna-Peter','Grazyna Peter','Grazyna','Peter','Admissions','Worker','gPeter@my_hosptital.rocks'), -('Yuko-Manley','Yuko Manley','Yuko','Manley','Admissions','Boss','yManley@my_hosptital.rocks'), -('Lizzie-Olivas','Lizzie Olivas','Lizzie','Olivas','Admissions','Worker','lOlivas@my_hosptital.rocks'), -('Barbar-Durand','Barbar Durand','Barbar','Durand','Admissions','Manager','bDurand@my_hosptital.rocks'), -('Jung-Romano','Jung Romano','Jung','Romano','Admissions','Mr Cool','jRomano@my_hosptital.rocks'), -('Theola-Blanchette','Theola Blanchette','Theola','Blanchette','Cardiology','Do it right','tBlanchette@my_hosptital.rocks'), -('Patrick-Watters','Patrick Watters','Patrick','Watters','Cardiology','First at Work','pWatters@my_hosptital.rocks'), -('Camila-Theriault','Camila Theriault','Camila','Theriault','Cardiology','Worker','cTheriault@my_hosptital.rocks'), -('Golda-Henke','Golda Henke','Golda','Henke','Cardiology','Worker','gHenke@my_hosptital.rocks'), -('Alysia-Casteel','Alysia Casteel','Alysia','Casteel','Cardiology','Worker','aCasteel@my_hosptital.rocks'), -('Livia-Crayton','Livia Crayton','Livia','Crayton','Oncology','Worker','lCrayton@my_hosptital.rocks'), -('Matilde-Alonzo','Matilde Alonzo','Matilde','Alonzo','Oncology','Worker','mAlonzo@my_hosptital.rocks'), -('Cleora-Parnell','Cleora Parnell','Cleora','Parnell','Oncology','Boss','cParnell@my_hosptital.rocks'), -('Willette-Marr','Willette Marr','Willette','Marr','Oncology','Worker','wMarr@my_hosptital.rocks'), -('Eddie-Pereira','Eddie Pereira','Eddie','Pereira','Oncology','Manager','ePereira@my_hosptital.rocks'), -('Evelin-Petersen','Evelin Petersen','Evelin','Petersen','Oncology','Mr Cool','ePetersen@my_hosptital.rocks'), -('Michaela-Mckeown','Michaela Mckeown','Michaela','Mckeown','Oncology','Do it right','mMckeown@my_hosptital.rocks'), -('Reyna-Blum','Reyna Blum','Reyna','Blum','Pharmacy','First at Work','rBlum@my_hosptital.rocks'), -('Gail-Sapp','Gail Sapp','Gail','Sapp','Pharmacy','Worker','gSapp@my_hosptital.rocks'), -('Giselle-Sams','Giselle Sams','Giselle','Sams','Pharmacy','Worker','gSams@my_hosptital.rocks'), -('Rhona-Whiting','Rhona Whiting','Rhona','Whiting','Pharmacy','Worker','rWhiting@my_hosptital.rocks'), -('Merrill-Hirsch','Merrill Hirsch','Merrill','Hirsch','Pharmacy','Worker','mHirsch@my_hosptital.rocks'), -('Vina-Winchester','Vina Winchester','Vina','Winchester','Pharmacy','Worker','vWinchester@my_hosptital.rocks'), -('Ronnie-Nickerson','Ronnie Nickerson','Ronnie','Nickerson','Pharmacy','Boss','rNickerson@my_hosptital.rocks'), -('Corrine-Landry','Corrine Landry','Corrine','Landry','Pharmacy','Worker','cLandry@my_hosptital.rocks'), -('Andrew-Janssen','Andrew Janssen','Andrew','Janssen','Radiotherapy','Manager','aJanssen@my_hosptital.rocks'), -('Fatimah-Sheehan','Fatimah Sheehan','Fatimah','Sheehan','Radiotherapy','Mr Cool','fSheehan@my_hosptital.rocks'), -('Andrea-Rainey','Andrea Rainey','Andrea','Rainey','Radiotherapy','Do it right','aRainey@my_hosptital.rocks'), -('John-Knutson','John Knutson','John','Knutson','Radiotherapy','First at Work','jKnutson@my_hosptital.rocks'), -('Andre-Meredith','Andre Meredith','Andre','Meredith','Radiotherapy','Worker','aMeredith@my_hosptital.rocks'), -('Dalene-Binkley','Dalene Binkley','Dalene','Binkley','Radiotherapy','Worker','dBinkley@my_hosptital.rocks'), -('Shaquana-Neeley','Shaquana Neeley','Shaquana','Neeley','Radiotherapy','Worker','sNeeley@my_hosptital.rocks'), -('Willy-Jarvis','Willy Jarvis','Willy','Jarvis','Radiotherapy','Worker','wJarvis@my_hosptital.rocks'), -('Dirk-Palma','Dirk Palma','Dirk','Palma','Radiotherapy','Worker','dPalma@my_hosptital.rocks'), -('Raphael-Albers','Raphael Albers','Raphael','Albers','Radiotherapy','Boss','rAlbers@my_hosptital.rocks'), -('Kenya-Durham','Kenya Durham','Kenya','Durham','Radiotherapy','Worker','kDurham@my_hosptital.rocks'), -('Nikole-Janes','Nikole Janes','Nikole','Janes','Radiotherapy','Manager','nJanes@my_hosptital.rocks'), -('Nigel-Grove','Nigel Grove','Nigel','Grove','Urology','Mr Cool','nGrove@my_hosptital.rocks'), -('Wynona-Lancaster','Wynona Lancaster','Wynona','Lancaster','Urology','Do it right','wLancaster@my_hosptital.rocks'), -('Delorse-Pence','Delorse Pence','Delorse','Pence','Urology','First at Work','dPence@my_hosptital.rocks'), -('Claudie-Irwin','Claudie Irwin','Claudie','Irwin','Urology','Worker','cIrwin@my_hosptital.rocks'), -('Roxane-Moreau','Roxane Moreau','Roxane','Moreau','Urology','Worker','rMoreau@my_hosptital.rocks'), -('Jae-Clements','Jae Clements','Jae','Clements','Urology','Worker','jClements@my_hosptital.rocks'), -('Milagro-Montalvo','Milagro Montalvo','Milagro','Montalvo','Urology','Worker','mMontalvo@my_hosptital.rocks'), -('Lang-Dowling','Lang Dowling','Lang','Dowling','Urology','Worker','lDowling@my_hosptital.rocks'), -('Myles-Fulton','Myles Fulton','Myles','Fulton','Analytics','Boss','mFulton@my_hosptital.rocks'), -('Otelia-Bernstein','Otelia Bernstein','Otelia','Bernstein','Analytics','Worker','oBernstein@my_hosptital.rocks'), -('Crystle-Homer','Crystle Homer','Crystle','Homer','Analytics','Manager','cHomer@my_hosptital.rocks'), -('Lawana-Herron','Lawana Herron','Lawana','Herron','Analytics','Mr Cool','lHerron@my_hosptital.rocks'), -('Ollie-Pinto','Ollie Pinto','Ollie','Pinto','Analytics','Do it right','oPinto@my_hosptital.rocks'), -('Stefani-Schwab','Stefani Schwab','Stefani','Schwab','Analytics','First at Work','sSchwab@my_hosptital.rocks'), -('Nereida-Minor','Nereida Minor','Nereida','Minor','Analytics','Worker','nMinor@my_hosptital.rocks'), -('Kirby-Strother','Kirby Strother','Kirby','Strother','Analytics','Worker','kStrother@my_hosptital.rocks'), -('Erinn-Spooner','Erinn Spooner','Erinn','Spooner','Analytics','Worker','eSpooner@my_hosptital.rocks'), -('Youlanda-Driver','Youlanda Driver','Youlanda','Driver','Analytics','Worker','yDriver@my_hosptital.rocks'), -('Ashlyn-Schulze','Ashlyn Schulze','Ashlyn','Schulze','Analytics','Worker','aSchulze@my_hosptital.rocks'), -('Brianne-Lemmon','Brianne Lemmon','Brianne','Lemmon','Analytics','Boss','bLemmon@my_hosptital.rocks'), -('Bebe-Ahern','Bebe Ahern','Bebe','Ahern','Analytics','Worker','bAhern@my_hosptital.rocks'), -('Leigh-Bolen','Leigh Bolen','Leigh','Bolen','Ophthalmology','Manager','lBolen@my_hosptital.rocks'), -('Shila-Pryor','Shila Pryor','Shila','Pryor','Ophthalmology','Mr Cool','sPryor@my_hosptital.rocks'), -('Particia-Estrella','Particia Estrella','Particia','Estrella','Ophthalmology','Do it right','pEstrella@my_hosptital.rocks'), -('Cheree-Seifert','Cheree Seifert','Cheree','Seifert','Ophthalmology','First at Work','cSeifert@my_hosptital.rocks'), -('Christi-Lear','Christi Lear','Christi','Lear','Ophthalmology','Worker','cLear@my_hosptital.rocks'), -('Dannie-Kenney','Dannie Kenney','Dannie','Kenney','Ophthalmology','Worker','dKenney@my_hosptital.rocks'), -('Jarod-Tan','Jarod Tan','Jarod','Tan','Ophthalmology','Worker','jTan@my_hosptital.rocks'), -('Alejandra-Bedard','Alejandra Bedard','Alejandra','Bedard','Orthopaedics','Worker','aBedard@my_hosptital.rocks'), -('Jerrie-Joyce','Jerrie Joyce','Jerrie','Joyce','Orthopaedics','Worker','jJoyce@my_hosptital.rocks'), -('Tiny-Rohr','Tiny Rohr','Tiny','Rohr','Orthopaedics','Boss','tRohr@my_hosptital.rocks'), -('Donnetta-Grice','Donnetta Grice','Donnetta','Grice','Orthopaedics','Worker','dGrice@my_hosptital.rocks'), -('Ruthanne-Cranford','Ruthanne Cranford','Ruthanne','Cranford','Orthopaedics','Manager','rCranford@my_hosptital.rocks'), -('Annis-Turk','Annis Turk','Annis','Turk','Orthopaedics','Mr Cool','aTurk@my_hosptital.rocks'), -('Ilona-Lassiter','Ilona Lassiter','Ilona','Lassiter','Orthopaedics','Do it right','iLassiter@my_hosptital.rocks'), -('Daren-Ladd','Daren Ladd','Daren','Ladd','Orthopaedics','First at Work','dLadd@my_hosptital.rocks'), -('Jenae-Woodbury','Jenae Woodbury','Jenae','Woodbury','Orthopaedics','Worker','jWoodbury@my_hosptital.rocks'), -('Ashanti-Pritchett','Ashanti Pritchett','Ashanti','Pritchett','Orthopaedics','Worker','aPritchett@my_hosptital.rocks'), -('Martina-Dawkins','Martina Dawkins','Martina','Dawkins','Orthopaedics','Worker','mDawkins@my_hosptital.rocks'), -('Oma-Esposito','Oma Esposito','Oma','Esposito','Orthopaedics','Worker','oEsposito@my_hosptital.rocks'), -('Carisa-Forbes','Carisa Forbes','Carisa','Forbes','Orthopaedics','Worker','cForbes@my_hosptital.rocks'), -('Marti-Winter','Marti Winter','Marti','Winter','Orthopaedics','Boss','mWinter@my_hosptital.rocks') +DECLARE @SeedUsers TABLE ( + SeedUserId int IDENTITY(1,1) NOT NULL, + Username nvarchar(max) NULL, + FullName nvarchar(max) NULL, + FirstName nvarchar(max) NULL, + LastName nvarchar(max) NULL, + Department nvarchar(max) NULL, + Title nvarchar(max) NULL, + Email nvarchar(max) NULL +); + +insert into @SeedUsers (Username, FullName, FirstName, LastName, Department, Title, Email) values + ('Hertha-Barham','Hertha Barham','Hertha','Barham','Accident and Emergency','Boss','hBarham@my_hosptital.rocks'), + ('Amada-Tisdale','Amada Tisdale','Amada','Tisdale','Accident and Emergency','Worker','aTisdale@my_hosptital.rocks'), + ('Bryce-Bayne','Bryce Bayne','Bryce','Bayne','Accident and Emergency','Manager','bBayne@my_hosptital.rocks'), + ('Hae-Weiner','Hae Weiner','Hae','Weiner','Accident and Emergency','Mr Cool','hWeiner@my_hosptital.rocks'), + ('Shonda-Purcell','Shonda Purcell','Shonda','Purcell','Accident and Emergency','Do it right','sPurcell@my_hosptital.rocks'), + ('Earle-Archuleta','Earle Archuleta','Earle','Archuleta','Accident and Emergency','First at Work','eArchuleta@my_hosptital.rocks'), + ('Garth-Cornwell','Garth Cornwell','Garth','Cornwell','Accident and Emergency','Worker','gCornwell@my_hosptital.rocks'), + ('Mardell-Crews','Mardell Crews','Mardell','Crews','Accident and Emergency','Worker','mCrews@my_hosptital.rocks'), + ('Jade-Wiggins','Jade Wiggins','Jade','Wiggins','Accident and Emergency','Worker','jWiggins@my_hosptital.rocks'), + ('Marylee-Rauch','Marylee Rauch','Marylee','Rauch','Accident and Emergency','Worker','mRauch@my_hosptital.rocks'), + ('Magda-Shook','Magda Shook','Magda','Shook','Accident and Emergency','Worker','mShook@my_hosptital.rocks'), + ('Nannie-Redmond','Nannie Redmond','Nannie','Redmond','Accident and Emergency','Boss','nRedmond@my_hosptital.rocks'), + ('Candance-Singer','Candance Singer','Candance','Singer','Accident and Emergency','Worker','cSinger@my_hosptital.rocks'), + ('Renata-Bigelow','Renata Bigelow','Renata','Bigelow','Accident and Emergency','Manager','rBigelow@my_hosptital.rocks'), + ('Eve-Wilkinson','Eve Wilkinson','Eve','Wilkinson','Accident and Emergency','Mr Cool','eWilkinson@my_hosptital.rocks'), + ('Tiesha-Chavis','Tiesha Chavis','Tiesha','Chavis','Admissions','Do it right','tChavis@my_hosptital.rocks'), + ('Bernardine-Scherer','Bernardine Scherer','Bernardine','Scherer','Admissions','First at Work','bScherer@my_hosptital.rocks'), + ('Stefania-Wakefield','Stefania Wakefield','Stefania','Wakefield','Admissions','Worker','sWakefield@my_hosptital.rocks'), + ('Roselia-Hoskins','Roselia Hoskins','Roselia','Hoskins','Admissions','Worker','rHoskins@my_hosptital.rocks'), + ('Hyun-Rockwell','Hyun Rockwell','Hyun','Rockwell','Admissions','Worker','hRockwell@my_hosptital.rocks'), + ('Marcelina-Brinson','Marcelina Brinson','Marcelina','Brinson','Admissions','Worker','mBrinson@my_hosptital.rocks'), + ('Grazyna-Peter','Grazyna Peter','Grazyna','Peter','Admissions','Worker','gPeter@my_hosptital.rocks'), + ('Yuko-Manley','Yuko Manley','Yuko','Manley','Admissions','Boss','yManley@my_hosptital.rocks'), + ('Lizzie-Olivas','Lizzie Olivas','Lizzie','Olivas','Admissions','Worker','lOlivas@my_hosptital.rocks'), + ('Barbar-Durand','Barbar Durand','Barbar','Durand','Admissions','Manager','bDurand@my_hosptital.rocks'), + ('Jung-Romano','Jung Romano','Jung','Romano','Admissions','Mr Cool','jRomano@my_hosptital.rocks'), + ('Theola-Blanchette','Theola Blanchette','Theola','Blanchette','Cardiology','Do it right','tBlanchette@my_hosptital.rocks'), + ('Patrick-Watters','Patrick Watters','Patrick','Watters','Cardiology','First at Work','pWatters@my_hosptital.rocks'), + ('Camila-Theriault','Camila Theriault','Camila','Theriault','Cardiology','Worker','cTheriault@my_hosptital.rocks'), + ('Golda-Henke','Golda Henke','Golda','Henke','Cardiology','Worker','gHenke@my_hosptital.rocks'), + ('Alysia-Casteel','Alysia Casteel','Alysia','Casteel','Cardiology','Worker','aCasteel@my_hosptital.rocks'), + ('Livia-Crayton','Livia Crayton','Livia','Crayton','Oncology','Worker','lCrayton@my_hosptital.rocks'), + ('Matilde-Alonzo','Matilde Alonzo','Matilde','Alonzo','Oncology','Worker','mAlonzo@my_hosptital.rocks'), + ('Cleora-Parnell','Cleora Parnell','Cleora','Parnell','Oncology','Boss','cParnell@my_hosptital.rocks'), + ('Willette-Marr','Willette Marr','Willette','Marr','Oncology','Worker','wMarr@my_hosptital.rocks'), + ('Eddie-Pereira','Eddie Pereira','Eddie','Pereira','Oncology','Manager','ePereira@my_hosptital.rocks'), + ('Evelin-Petersen','Evelin Petersen','Evelin','Petersen','Oncology','Mr Cool','ePetersen@my_hosptital.rocks'), + ('Michaela-Mckeown','Michaela Mckeown','Michaela','Mckeown','Oncology','Do it right','mMckeown@my_hosptital.rocks'), + ('Reyna-Blum','Reyna Blum','Reyna','Blum','Pharmacy','First at Work','rBlum@my_hosptital.rocks'), + ('Gail-Sapp','Gail Sapp','Gail','Sapp','Pharmacy','Worker','gSapp@my_hosptital.rocks'), + ('Giselle-Sams','Giselle Sams','Giselle','Sams','Pharmacy','Worker','gSams@my_hosptital.rocks'), + ('Rhona-Whiting','Rhona Whiting','Rhona','Whiting','Pharmacy','Worker','rWhiting@my_hosptital.rocks'), + ('Merrill-Hirsch','Merrill Hirsch','Merrill','Hirsch','Pharmacy','Worker','mHirsch@my_hosptital.rocks'), + ('Vina-Winchester','Vina Winchester','Vina','Winchester','Pharmacy','Worker','vWinchester@my_hosptital.rocks'), + ('Ronnie-Nickerson','Ronnie Nickerson','Ronnie','Nickerson','Pharmacy','Boss','rNickerson@my_hosptital.rocks'), + ('Corrine-Landry','Corrine Landry','Corrine','Landry','Pharmacy','Worker','cLandry@my_hosptital.rocks'), + ('Andrew-Janssen','Andrew Janssen','Andrew','Janssen','Radiotherapy','Manager','aJanssen@my_hosptital.rocks'), + ('Fatimah-Sheehan','Fatimah Sheehan','Fatimah','Sheehan','Radiotherapy','Mr Cool','fSheehan@my_hosptital.rocks'), + ('Andrea-Rainey','Andrea Rainey','Andrea','Rainey','Radiotherapy','Do it right','aRainey@my_hosptital.rocks'), + ('John-Knutson','John Knutson','John','Knutson','Radiotherapy','First at Work','jKnutson@my_hosptital.rocks'), + ('Andre-Meredith','Andre Meredith','Andre','Meredith','Radiotherapy','Worker','aMeredith@my_hosptital.rocks'), + ('Dalene-Binkley','Dalene Binkley','Dalene','Binkley','Radiotherapy','Worker','dBinkley@my_hosptital.rocks'), + ('Shaquana-Neeley','Shaquana Neeley','Shaquana','Neeley','Radiotherapy','Worker','sNeeley@my_hosptital.rocks'), + ('Willy-Jarvis','Willy Jarvis','Willy','Jarvis','Radiotherapy','Worker','wJarvis@my_hosptital.rocks'), + ('Dirk-Palma','Dirk Palma','Dirk','Palma','Radiotherapy','Worker','dPalma@my_hosptital.rocks'), + ('Raphael-Albers','Raphael Albers','Raphael','Albers','Radiotherapy','Boss','rAlbers@my_hosptital.rocks'), + ('Kenya-Durham','Kenya Durham','Kenya','Durham','Radiotherapy','Worker','kDurham@my_hosptital.rocks'), + ('Nikole-Janes','Nikole Janes','Nikole','Janes','Radiotherapy','Manager','nJanes@my_hosptital.rocks'), + ('Nigel-Grove','Nigel Grove','Nigel','Grove','Urology','Mr Cool','nGrove@my_hosptital.rocks'), + ('Wynona-Lancaster','Wynona Lancaster','Wynona','Lancaster','Urology','Do it right','wLancaster@my_hosptital.rocks'), + ('Delorse-Pence','Delorse Pence','Delorse','Pence','Urology','First at Work','dPence@my_hosptital.rocks'), + ('Claudie-Irwin','Claudie Irwin','Claudie','Irwin','Urology','Worker','cIrwin@my_hosptital.rocks'), + ('Roxane-Moreau','Roxane Moreau','Roxane','Moreau','Urology','Worker','rMoreau@my_hosptital.rocks'), + ('Jae-Clements','Jae Clements','Jae','Clements','Urology','Worker','jClements@my_hosptital.rocks'), + ('Milagro-Montalvo','Milagro Montalvo','Milagro','Montalvo','Urology','Worker','mMontalvo@my_hosptital.rocks'), + ('Lang-Dowling','Lang Dowling','Lang','Dowling','Urology','Worker','lDowling@my_hosptital.rocks'), + ('Myles-Fulton','Myles Fulton','Myles','Fulton','Analytics','Boss','mFulton@my_hosptital.rocks'), + ('Otelia-Bernstein','Otelia Bernstein','Otelia','Bernstein','Analytics','Worker','oBernstein@my_hosptital.rocks'), + ('Crystle-Homer','Crystle Homer','Crystle','Homer','Analytics','Manager','cHomer@my_hosptital.rocks'), + ('Lawana-Herron','Lawana Herron','Lawana','Herron','Analytics','Mr Cool','lHerron@my_hosptital.rocks'), + ('Ollie-Pinto','Ollie Pinto','Ollie','Pinto','Analytics','Do it right','oPinto@my_hosptital.rocks'), + ('Stefani-Schwab','Stefani Schwab','Stefani','Schwab','Analytics','First at Work','sSchwab@my_hosptital.rocks'), + ('Nereida-Minor','Nereida Minor','Nereida','Minor','Analytics','Worker','nMinor@my_hosptital.rocks'), + ('Kirby-Strother','Kirby Strother','Kirby','Strother','Analytics','Worker','kStrother@my_hosptital.rocks'), + ('Erinn-Spooner','Erinn Spooner','Erinn','Spooner','Analytics','Worker','eSpooner@my_hosptital.rocks'), + ('Youlanda-Driver','Youlanda Driver','Youlanda','Driver','Analytics','Worker','yDriver@my_hosptital.rocks'), + ('Ashlyn-Schulze','Ashlyn Schulze','Ashlyn','Schulze','Analytics','Worker','aSchulze@my_hosptital.rocks'), + ('Brianne-Lemmon','Brianne Lemmon','Brianne','Lemmon','Analytics','Boss','bLemmon@my_hosptital.rocks'), + ('Bebe-Ahern','Bebe Ahern','Bebe','Ahern','Analytics','Worker','bAhern@my_hosptital.rocks'), + ('Leigh-Bolen','Leigh Bolen','Leigh','Bolen','Ophthalmology','Manager','lBolen@my_hosptital.rocks'), + ('Shila-Pryor','Shila Pryor','Shila','Pryor','Ophthalmology','Mr Cool','sPryor@my_hosptital.rocks'), + ('Particia-Estrella','Particia Estrella','Particia','Estrella','Ophthalmology','Do it right','pEstrella@my_hosptital.rocks'), + ('Cheree-Seifert','Cheree Seifert','Cheree','Seifert','Ophthalmology','First at Work','cSeifert@my_hosptital.rocks'), + ('Christi-Lear','Christi Lear','Christi','Lear','Ophthalmology','Worker','cLear@my_hosptital.rocks'), + ('Dannie-Kenney','Dannie Kenney','Dannie','Kenney','Ophthalmology','Worker','dKenney@my_hosptital.rocks'), + ('Jarod-Tan','Jarod Tan','Jarod','Tan','Ophthalmology','Worker','jTan@my_hosptital.rocks'), + ('Alejandra-Bedard','Alejandra Bedard','Alejandra','Bedard','Orthopaedics','Worker','aBedard@my_hosptital.rocks'), + ('Jerrie-Joyce','Jerrie Joyce','Jerrie','Joyce','Orthopaedics','Worker','jJoyce@my_hosptital.rocks'), + ('Tiny-Rohr','Tiny Rohr','Tiny','Rohr','Orthopaedics','Boss','tRohr@my_hosptital.rocks'), + ('Donnetta-Grice','Donnetta Grice','Donnetta','Grice','Orthopaedics','Worker','dGrice@my_hosptital.rocks'), + ('Ruthanne-Cranford','Ruthanne Cranford','Ruthanne','Cranford','Orthopaedics','Manager','rCranford@my_hosptital.rocks'), + ('Annis-Turk','Annis Turk','Annis','Turk','Orthopaedics','Mr Cool','aTurk@my_hosptital.rocks'), + ('Ilona-Lassiter','Ilona Lassiter','Ilona','Lassiter','Orthopaedics','Do it right','iLassiter@my_hosptital.rocks'), + ('Daren-Ladd','Daren Ladd','Daren','Ladd','Orthopaedics','First at Work','dLadd@my_hosptital.rocks'), + ('Jenae-Woodbury','Jenae Woodbury','Jenae','Woodbury','Orthopaedics','Worker','jWoodbury@my_hosptital.rocks'), + ('Ashanti-Pritchett','Ashanti Pritchett','Ashanti','Pritchett','Orthopaedics','Worker','aPritchett@my_hosptital.rocks'), + ('Martina-Dawkins','Martina Dawkins','Martina','Dawkins','Orthopaedics','Worker','mDawkins@my_hosptital.rocks'), + ('Oma-Esposito','Oma Esposito','Oma','Esposito','Orthopaedics','Worker','oEsposito@my_hosptital.rocks'), + ('Carisa-Forbes','Carisa Forbes','Carisa','Forbes','Orthopaedics','Worker','cForbes@my_hosptital.rocks'), + ('Marti-Winter','Marti Winter','Marti','Winter','Orthopaedics','Boss','mWinter@my_hosptital.rocks') + +SET IDENTITY_INSERT dbo.[User] ON; +insert into dbo.[User] (UserID, Username, FullName, FirstName, LastName, Department, Title, Email) +select su.SeedUserId, su.Username, su.FullName, su.FirstName, su.LastName, su.Department, su.Title, su.Email +from @SeedUsers su +where not exists ( + select 1 + from dbo.[User] u + where u.UserID = su.SeedUserId +); +SET IDENTITY_INSERT dbo.[User] OFF; GO -insert into [atlas].app.UserRoleLinks (UserId, UserRolesId) values -(1,2), -(2,2), -(3,3), -(4,3), -(5,4), -(6,4), -(7,5), -(8,5), -(9,2), -(10,2), -(11,3), -(12,3), -(13,4), -(14,4), -(15,5), -(16,5), -(17,2), -(18,2), -(19,3), -(20,3), -(21,4), -(22,4), -(23,5), -(24,5), -(25,2), -(26,2), -(27,3), -(28,3), -(29,4), -(30,4), -(31,5), -(32,5), -(33,2), -(34,2), -(35,3), -(36,3), -(37,4), -(38,4), -(39,5), -(40,5), -(41,2), -(42,2), -(43,3), -(44,3), -(45,4), -(46,4), -(47,5), -(48,5), -(49,2), -(50,2), -(51,3), -(52,3), -(53,4), -(54,4), -(55,5), -(56,5), -(57,2), -(58,2), -(59,3), -(60,3), -(61,4), -(62,4), -(63,5), -(64,5), -(65,2), -(66,2), -(67,3), -(68,3), -(69,4), -(70,4), -(71,5), -(72,5), -(73,2), -(74,2), -(75,3), -(76,3), -(77,4), -(78,4), -(79,5), -(80,5), -(81,2), -(82,2), -(83,3), -(84,3), -(85,4), -(86,4), -(87,5), -(88,5), -(89,2), -(90,2), -(91,3), -(92,3), -(93,4), -(94,4), -(95,5), -(96,5), -(97,4), -(98,4), -(99,5), -(100,5) + +insert into [atlas].app.UserRoleLinks (UserId, UserRolesId) +select u.UserID, v.UserRolesId +from ( + values + ('Hertha-Barham', 1), + ('Hertha-Barham', 2), + ('Amada-Tisdale', 2), + ('Bryce-Bayne', 3), + ('Hae-Weiner', 3), + ('Shonda-Purcell', 4), + ('Earle-Archuleta', 4), + ('Garth-Cornwell', 5), + ('Mardell-Crews', 5), + ('Jade-Wiggins', 2), + ('Marylee-Rauch', 2), + ('Magda-Shook', 3), + ('Nannie-Redmond', 3), + ('Candance-Singer', 4), + ('Renata-Bigelow', 4), + ('Eve-Wilkinson', 5), + ('Tiesha-Chavis', 5), + ('Bernardine-Scherer', 2), + ('Stefania-Wakefield', 2), + ('Roselia-Hoskins', 3), + ('Hyun-Rockwell', 3), + ('Marcelina-Brinson', 4), + ('Grazyna-Peter', 4), + ('Yuko-Manley', 5), + ('Lizzie-Olivas', 5), + ('Theola-Blanchette', 2), + ('Patrick-Watters', 2), + ('Camila-Theriault', 3), + ('Golda-Henke', 3), + ('Alysia-Casteel', 4), + ('Livia-Crayton', 4), + ('Matilde-Alonzo', 5), + ('Cleora-Parnell', 5), + ('Willette-Marr', 2), + ('Eddie-Pereira', 2), + ('Evelin-Petersen', 3), + ('Michaela-Mckeown', 3), + ('Reyna-Blum', 4), + ('Gail-Sapp', 4), + ('Giselle-Sams', 5), + ('Rhona-Whiting', 5), + ('Merrill-Hirsch', 2), + ('Vina-Winchester', 2), + ('Ronnie-Nickerson', 3), + ('Corrine-Landry', 3), + ('Andrew-Janssen', 4), + ('Fatimah-Sheehan', 4), + ('Andrea-Rainey', 5), + ('John-Knutson', 5), + ('Andre-Meredith', 2), + ('Dalene-Binkley', 2), + ('Shaquana-Neeley', 3), + ('Willy-Jarvis', 3), + ('Dirk-Palma', 4), + ('Raphael-Albers', 4), + ('Kenya-Durham', 5), + ('Nikole-Janes', 5), + ('Nigel-Grove', 2), + ('Wynona-Lancaster', 2), + ('Delorse-Pence', 3), + ('Claudie-Irwin', 3), + ('Roxane-Moreau', 4), + ('Jae-Clements', 4), + ('Milagro-Montalvo', 5), + ('Lang-Dowling', 5), + ('Myles-Fulton', 2), + ('Otelia-Bernstein', 2), + ('Crystle-Homer', 3), + ('Lawana-Herron', 3), + ('Ollie-Pinto', 4), + ('Stefani-Schwab', 4), + ('Nereida-Minor', 5), + ('Kirby-Strother', 5), + ('Erinn-Spooner', 2), + ('Youlanda-Driver', 2), + ('Ashlyn-Schulze', 3), + ('Brianne-Lemmon', 3), + ('Bebe-Ahern', 4), + ('Leigh-Bolen', 4), + ('Shila-Pryor', 5), + ('Particia-Estrella', 5), + ('Cheree-Seifert', 2), + ('Christi-Lear', 2), + ('Dannie-Kenney', 3), + ('Jarod-Tan', 3), + ('Alejandra-Bedard', 4), + ('Jerrie-Joyce', 4), + ('Tiny-Rohr', 5), + ('Donnetta-Grice', 5), + ('Ruthanne-Cranford', 2), + ('Annis-Turk', 2), + ('Ilona-Lassiter', 3), + ('Daren-Ladd', 3), + ('Jenae-Woodbury', 4), + ('Ashanti-Pritchett', 4), + ('Martina-Dawkins', 5), + ('Oma-Esposito', 5), + ('Carisa-Forbes', 2), + ('Marti-Winter', 2) +) v(Username, UserRolesId) +inner join dbo.[User] u on u.Username = v.Username +where not exists ( + select 1 + from [atlas].app.UserRoleLinks url + where url.UserId = u.UserID and url.UserRolesId = v.UserRolesId +); GO -insert into [atlas].dbo.UserGroups (AccountName, GroupName, GroupEmail, GroupType) VALUES -('Accident and Emergency Group','Accident and Emergency Group (Group)','Accident_and_Emergency@my_hospital.rocks','Email Distribution'), -('Admissions Group','Admissions Group (Group)','Admissions@my_hospital.rocks','Email Distribution'), -('Cardiology Group','Cardiology Group (Group)','Cardiology@my_hospital.rocks','Email Distribution'), -('Oncology Group','Oncology Group (Group)','Oncology@my_hospital.rocks','Email Distribution'), -('Pharmacy Group','Pharmacy Group (Group)','Pharmacy@my_hospital.rocks','Email Distribution'), -('Radiotherapy Group','Radiotherapy Group (Group)','Radiotherapy@my_hospital.rocks','Email Distribution'), -('Urology Group','Urology Group (Group)','Urology@my_hospital.rocks','Email Distribution'), -('Analytics Group','Analytics Group (Group)','Analytics@my_hospital.rocks','Email Distribution'), -('Ophthalmology Group','Ophthalmology Group (Group)','Ophthalmology@my_hospital.rocks','Email Distribution'), -('Orthopaedics Group','Orthopaedics Group (Group)','Orthopaedics@my_hospital.rocks','Email Distribution') +insert into [atlas].dbo.UserGroups (AccountName, GroupName, GroupEmail, GroupType) +select v.AccountName, v.GroupName, v.GroupEmail, v.GroupType +from ( + values + ('Accident and Emergency Group','Accident and Emergency Group (Group)','Accident_and_Emergency@my_hospital.rocks','Email Distribution'), + ('Admissions Group','Admissions Group (Group)','Admissions@my_hospital.rocks','Email Distribution'), + ('Cardiology Group','Cardiology Group (Group)','Cardiology@my_hospital.rocks','Email Distribution'), + ('Oncology Group','Oncology Group (Group)','Oncology@my_hospital.rocks','Email Distribution'), + ('Pharmacy Group','Pharmacy Group (Group)','Pharmacy@my_hospital.rocks','Email Distribution'), + ('Radiotherapy Group','Radiotherapy Group (Group)','Radiotherapy@my_hospital.rocks','Email Distribution'), + ('Urology Group','Urology Group (Group)','Urology@my_hospital.rocks','Email Distribution'), + ('Analytics Group','Analytics Group (Group)','Analytics@my_hospital.rocks','Email Distribution'), + ('Ophthalmology Group','Ophthalmology Group (Group)','Ophthalmology@my_hospital.rocks','Email Distribution'), + ('Orthopaedics Group','Orthopaedics Group (Group)','Orthopaedics@my_hospital.rocks','Email Distribution') +) v(AccountName, GroupName, GroupEmail, GroupType) +where not exists ( + select 1 + from [atlas].dbo.UserGroups ug + where ug.GroupName = v.GroupName +); GO -<<<<<<< HEAD -insert into [atlas].dbo.UserGroupsMembership (UserId,GroupId) values -======= -insert into [Data_Governance_Pub].dbo.UserGroupsMembership (UserId,GroupId) values ->>>>>>> dev -(1,1), -(2,1), -(3,1), -(4,1), -(5,1), -(6,1), -(7,1), -(8,1), -(9,1), -(10,1), -(11,1), -(12,1), -(13,1), -(14,1), -(15,1), -(16,2), -(17,2), -(18,2), -(19,2), -(20,2), -(21,2), -(22,2), -(23,2), -(24,2), -(25,2), -(26,2), -(27,3), -(28,3), -(29,3), -(30,3), -(31,3), -(32,4), -(33,4), -(34,4), -(35,4), -(36,4), -(37,4), -(38,4), -(39,5), -(40,5), -(41,5), -(42,5), -(43,5), -(44,5), -(45,5), -(46,5), -(47,6), -(48,6), -(49,6), -(50,6), -(51,6), -(52,6), -(53,6), -(54,6), -(55,6), -(56,6), -(57,6), -(58,6), -(59,7), -(60,7), -(61,7), -(62,7), -(63,7), -(64,7), -(65,7), -(66,7), -(67,8), -(68,8), -(69,8), -(70,8), -(71,8), -(72,8), -(73,8), -(74,8), -(75,8), -(76,8), -(77,8), -(78,8), -(79,8), -(80,9), -(81,9), -(82,9), -(83,9), -(84,9), -(85,9), -(86,9), -(87,10), -(88,10), -(89,10), -(90,10), -(91,10), -(92,10), -(93,10), -(94,10), -(95,10), -(96,10), -(97,10), -(98,10), -(99,10), -(100,10) + +insert into [atlas].dbo.UserGroupsMembership (UserId, GroupId) +select v.UserId, ug.GroupId +from ( + values + (1,1), + (2,1), + (3,1), + (4,1), + (5,1), + (6,1), + (7,1), + (8,1), + (9,1), + (10,1), + (11,1), + (12,1), + (13,1), + (14,1), + (15,1), + (16,2), + (17,2), + (18,2), + (19,2), + (20,2), + (21,2), + (22,2), + (23,2), + (24,2), + (25,2), + (26,2), + (27,3), + (28,3), + (29,3), + (30,3), + (31,3), + (32,4), + (33,4), + (34,4), + (35,4), + (36,4), + (37,4), + (38,4), + (39,5), + (40,5), + (41,5), + (42,5), + (43,5), + (44,5), + (45,5), + (46,5), + (47,6), + (48,6), + (49,6), + (50,6), + (51,6), + (52,6), + (53,6), + (54,6), + (55,6), + (56,6), + (57,6), + (58,6), + (59,7), + (60,7), + (61,7), + (62,7), + (63,7), + (64,7), + (65,7), + (66,7), + (67,8), + (68,8), + (69,8), + (70,8), + (71,8), + (72,8), + (73,8), + (74,8), + (75,8), + (76,8), + (77,8), + (78,8), + (79,8), + (80,9), + (81,9), + (82,9), + (83,9), + (84,9), + (85,9), + (86,9), + (87,10), + (88,10), + (89,10), + (90,10), + (91,10), + (92,10), + (93,10), + (94,10), + (95,10), + (96,10), + (97,10), + (98,10), + (99,10), + (100,10) +) v(UserId, SeedGroupNum) +inner join [atlas].dbo.UserGroups ug + on ug.GroupName = case v.SeedGroupNum + when 1 then 'Accident and Emergency Group (Group)' + when 2 then 'Admissions Group (Group)' + when 3 then 'Cardiology Group (Group)' + when 4 then 'Oncology Group (Group)' + when 5 then 'Pharmacy Group (Group)' + when 6 then 'Radiotherapy Group (Group)' + when 7 then 'Urology Group (Group)' + when 8 then 'Analytics Group (Group)' + when 9 then 'Ophthalmology Group (Group)' + when 10 then 'Orthopaedics Group (Group)' + end +where not exists ( + select 1 + from [atlas].dbo.UserGroupsMembership ugm + where ugm.UserId = v.UserId and ugm.GroupId = ug.GroupId +); GO -- demo reports -insert into reportobject (ReportObjectBizKey, SourceServer, SourceDB, SourceTable, Name, Description, DetailedDescription, ReportObjectTypeID, AuthorUserID, LastModifiedByUserID, LastModifiedDate, ReportObjectURL, EpicMasterFile, EpicRecordID, ReportServerCatalogID, DefaultVisibilityYN, OrphanedReportObjectYN, ReportServerPath) values +DECLARE @SeedReportObjects TABLE ( + SeedReportObjectId int IDENTITY(1,1) NOT NULL, + ReportObjectBizKey nvarchar(max) NULL, + SourceServer nvarchar(max) NULL, + SourceDB nvarchar(max) NULL, + SourceTable nvarchar(max) NULL, + Name nvarchar(max) NULL, + Description nvarchar(max) NULL, + DetailedDescription nvarchar(max) NULL, + ReportObjectTypeID int NULL, + AuthorUserID int NULL, + LastModifiedByUserID int NULL, + LastModifiedDate datetime NULL, + ReportObjectURL nvarchar(max) NULL, + EpicMasterFile nvarchar(max) NULL, + EpicRecordID nvarchar(max) NULL, + ReportServerCatalogID int NULL, + DefaultVisibilityYN nvarchar(max) NULL, + OrphanedReportObjectYN nvarchar(max) NULL, + ReportServerPath nvarchar(max) NULL +); + +insert into @SeedReportObjects (ReportObjectBizKey, SourceServer, SourceDB, SourceTable, Name, Description, DetailedDescription, ReportObjectTypeID, AuthorUserID, LastModifiedByUserID, LastModifiedDate, ReportObjectURL, EpicMasterFile, EpicRecordID, ReportServerCatalogID, DefaultVisibilityYN, OrphanedReportObjectYN, ReportServerPath) values ('123456789','my_server_01','otherreport','component','Workqueue Monitoring - Users Supervised WQs','This component shows information about workqueues that are supervised by the logged in user.','','3','64','75','2019-12-03 06:13:49.008','http://google.com','ABC','1','','Y','N','http://test'), ('123456790','my_server_01','otherreport','report','Billing Workqueue Monitoring - Users Supervised Workqueues','Identifies workqueues supervised by the report user. It is intended to give users an overview of the health of their supervised workqueues. ','','17','80','31','2019-11-14 12:50:54.649','http://google.com','EFG','2','','Y','N','http://test'), ('123456791','my_server_01','otherreport','report','User Pt WQ Contacts Added Today ','This report is for My Account Errors for Today component. It will show any errors that were not resolved in 48 hours.','','20','83','51','2019-09-23 00:43:53.215','http://google.com','HIJ','3','','Y','N','http://test'), @@ -380,8 +460,40 @@ insert into reportobject (ReportObjectBizKey, SourceServer, SourceDB, SourceTabl ('123456835','my_server_02','reportserver','report','Hours in Observation','Length of stay for patients in observaton','','17','17','11','2019-08-27 13:46:17.112','http://google.com','EFG','47','','N','Y','http://test'), ('123456836','my_server_02','reportserver','catalog','New ECW Transactions','','','20','61','19','2019-07-01 01:13:21.759','http://google.com','HIJ','48','','N','Y','http://test'), ('123456837','my_server_02','reportserver','report','IP Central Line Days','This report will show all patients with an active CVC (central venous catheter) or PICC (peripherally inserted central catheter) line.','','21','98','59','2019-06-14 00:10:32.341','http://google.com','ABC','49','','N','Y','http://test'), -('123456838','my_server_01','reportserver','catalog','IP Readmission Rates by Year and Month - MEDICARE','','','28','44','80','2019-11-27 00:37:18.289','http://google.com','EFG','50','','N','Y','http://test') +('123456838','my_server_01','reportserver','catalog','IP Readmission Rates by Year and Month - MEDICARE','','','28','44','80','2019-11-27 00:37:18.289','http://google.com','EFG','50','','N','Y','http://test'); + +IF COL_LENGTH('dbo.ReportObject', 'ReportObjectID') IS NOT NULL +BEGIN + SET IDENTITY_INSERT dbo.ReportObject ON; + insert into dbo.ReportObject (ReportObjectID, ReportObjectBizKey, SourceServer, SourceDB, SourceTable, Name, Description, DetailedDescription, ReportObjectTypeID, AuthorUserID, LastModifiedByUserID, LastModifiedDate, ReportObjectURL, EpicMasterFile, EpicRecordID, ReportServerCatalogID, DefaultVisibilityYN, OrphanedReportObjectYN, ReportServerPath) + select sro.SeedReportObjectId, sro.ReportObjectBizKey, sro.SourceServer, sro.SourceDB, sro.SourceTable, sro.Name, sro.Description, sro.DetailedDescription, sro.ReportObjectTypeID, sro.AuthorUserID, sro.LastModifiedByUserID, sro.LastModifiedDate, sro.ReportObjectURL, sro.EpicMasterFile, sro.EpicRecordID, sro.ReportServerCatalogID, sro.DefaultVisibilityYN, sro.OrphanedReportObjectYN, sro.ReportServerPath + from @SeedReportObjects sro + where not exists ( + select 1 + from dbo.ReportObject ro + where ro.ReportObjectID = sro.SeedReportObjectId + ); + SET IDENTITY_INSERT dbo.ReportObject OFF; +END +ELSE IF COL_LENGTH('dbo.ReportObject', 'ReportObjectId') IS NOT NULL +BEGIN + SET IDENTITY_INSERT dbo.ReportObject ON; + insert into dbo.ReportObject (ReportObjectId, ReportObjectBizKey, SourceServer, SourceDB, SourceTable, Name, Description, DetailedDescription, ReportObjectTypeID, AuthorUserID, LastModifiedByUserID, LastModifiedDate, ReportObjectURL, EpicMasterFile, EpicRecordID, ReportServerCatalogID, DefaultVisibilityYN, OrphanedReportObjectYN, ReportServerPath) + select sro.SeedReportObjectId, sro.ReportObjectBizKey, sro.SourceServer, sro.SourceDB, sro.SourceTable, sro.Name, sro.Description, sro.DetailedDescription, sro.ReportObjectTypeID, sro.AuthorUserID, sro.LastModifiedByUserID, sro.LastModifiedDate, sro.ReportObjectURL, sro.EpicMasterFile, sro.EpicRecordID, sro.ReportServerCatalogID, sro.DefaultVisibilityYN, sro.OrphanedReportObjectYN, sro.ReportServerPath + from @SeedReportObjects sro + where not exists ( + select 1 + from dbo.ReportObject ro + where ro.ReportObjectId = sro.SeedReportObjectId + ); + SET IDENTITY_INSERT dbo.ReportObject OFF; +END +ELSE +BEGIN + THROW 50001, 'Seed failed: neither dbo.ReportObject.ReportObjectID nor dbo.ReportObject.ReportObjectId exists.', 1; +END GO + -- documentation insert into app.ReportObject_doc (ReportObjectId, OperationalOwnerUserID, Requester, DeveloperDescription, KeyAssumptions, OrganizationalValueID, EstimatedRunFrequencyID, FragilityID, ExecutiveVisibilityYN, MaintenanceScheduleID, LastUpdateDateTime, CreatedDateTime, CreatedBy, UpdatedBy) values (1,'11','60','This component displays a list of workqueues supervised by the user running the report. Data is populated by the report. See reports Atlas entry for a list of dashboards where it appears.','','1','5','1','Y','1','2020-05-02 17:02:10.805','2020-02-14 05:28:16.101','29','85'), @@ -696,10 +808,20 @@ Not equal to SENIOR LIFE COMMUNITIES','3','3','1','N','1','2019-09-30 06:40:59.0 NOTE: This methodology differs from that used by for readmission reporting.','3','3','3','N','3','2019-04-20 02:13:57.531','2019-09-01 23:22:05.291','64','29') GO -- maint log -insert into app.MaintenanceLog ([MaintainerID],[MaintenanceDate],[Comment],[MaintenanceLogStatusID]) values -(11,'2019-11-25 10:57:31.925','Report looks good.',1), -(84,'2020-02-27 06:37:04.856','Report looks good.',1), -(19,'2020-07-30 21:06:43.467','Report looks good.',1), +if object_id('tempdb..#SeedMaintenanceLog') is not null drop table #SeedMaintenanceLog; +create table #SeedMaintenanceLog ( + SeedId int identity(1,1) not null, + MaintainerID int null, + MaintenanceDate datetime null, + Comment nvarchar(max) null, + MaintenanceLogStatusID int null +); + +insert into #SeedMaintenanceLog (MaintainerID, MaintenanceDate, Comment, MaintenanceLogStatusID) +values + (11,'2019-11-25 10:57:31.925','Report looks good.',1), + (84,'2020-02-27 06:37:04.856','Report looks good.',1), + (19,'2020-07-30 21:06:43.467','Report looks good.',1), (37,'2019-05-27 13:21:07.329','Report looks good.',1), (5,'2020-07-05 13:11:46.575','Report looks good.',1), (26,'2020-05-10 09:39:17.471','Report looks good.',1), @@ -817,143 +939,296 @@ insert into app.MaintenanceLog ([MaintainerID],[MaintenanceDate],[Comment],[Main (78,'2020-02-21 18:22:50.347','Report updated to current standard.',2), (56,'2020-01-29 16:06:05.669','Report updated to current standard.',2), (84,'2020-02-18 22:31:21.376','Report updated to current standard.',2), -(24,'2019-09-17 20:06:28.113','Report updated to current standard.',2), -(23,'2019-07-18 23:30:41.107','Report updated to current standard.',2), -(47,'2019-11-28 17:32:55.783','Report updated to current standard.',2), -(59,'2019-07-31 21:54:41.079','Report updated to current standard.',2) -GO -insert into [app].[ReportObjectDocMaintenanceLogs] ([ReportObjectID],[MaintenanceLogID]) values -(43,1), -(22,2), -(29,3), -(47,4), -(19,5), -(9,6), -(19,7), -(10,8), -(38,9), -(42,10), -(47,11), -(1,12), -(20,13), -(7,14), -(15,15), -(19,16), -(8,17), -(35,18), -(28,19), -(50,20), -(29,21), -(4,22), -(2,23), -(35,24), -(3,25), -(14,26), -(36,27), -(6,28), -(37,29), -(17,30), -(17,31), -(35,32), -(43,33), -(17,34), -(12,35), -(11,36), -(17,37), -(35,38), -(6,39), -(15,40), -(4,41), -(32,42), -(26,43), -(6,44), -(9,45), -(50,46), -(34,47), -(10,48), -(38,49), -(26,50), -(44,51), -(38,52), -(32,53), -(32,54), -(45,55), -(49,56), -(3,57), -(5,58), -(31,59), -(36,60), -(22,61), -(26,62), -(23,63), -(17,64), -(37,65), -(47,66), -(37,67), -(13,68), -(47,69), -(1,70), -(21,71), -(20,72), -(27,73), -(18,74), -(21,75), -(45,76), -(28,77), -(25,78), -(20,79), -(47,80), -(3,81), -(20,82), -(44,83), -(10,84), -(33,85), -(35,86), -(37,87), -(16,88), -(28,89), -(49,90), -(33,91), -(39,92), -(32,93), -(35,94), -(23,95), -(41,96), -(33,97), -(49,98), -(50,99), -(20,100), -(35,101), -(43,102), -(5,103), -(43,104), -(3,105), -(4,106), -(2,107), -(13,108), -(46,109), -(50,110), -(9,111), -(20,112), -(28,113), -(47,114), -(32,115), -(11,116), -(33,117), -(19,118), -(29,119), -(2,120), -(7,121), -(4,122) -GO - -insert into app.reportobjectdocfragilitytags (ReportObjectID, FragilityTagID) values -(8,26), -(49,2), -(39,8), -(43,26), -(7,3), -(30,17), + (24,'2019-09-17 20:06:28.113','Report updated to current standard.',2), + (23,'2019-07-18 23:30:41.107','Report updated to current standard.',2), + (47,'2019-11-28 17:32:55.783','Report updated to current standard.',2), + (59,'2019-07-31 21:54:41.079','Report updated to current standard.',2); + + declare @MaintenanceLogFkColumn sysname; + declare @ReportObjectDocIdColumn sysname; + + select top (1) @MaintenanceLogFkColumn = pc.name + from sys.foreign_key_columns fkc + join sys.columns pc + on pc.object_id = fkc.parent_object_id + and pc.column_id = fkc.parent_column_id + where fkc.parent_object_id = object_id('app.MaintenanceLog') + and fkc.referenced_object_id = object_id('app.ReportObject_doc'); + + select top (1) @ReportObjectDocIdColumn = c.name + from sys.columns c + where c.object_id = object_id('app.ReportObject_doc') + and c.name in ('ReportObjectID','ReportObjectId'); + + if @MaintenanceLogFkColumn is not null and @ReportObjectDocIdColumn is not null + begin + declare @sql nvarchar(max); + set @sql = N' + insert into app.MaintenanceLog ([' + replace(@MaintenanceLogFkColumn, ']', ']]') + N'],[MaintainerID],[MaintenanceDate],[Comment],[MaintenanceLogStatusID]) + select ro.ReportObjectID, s.MaintainerID, s.MaintenanceDate, s.Comment, s.MaintenanceLogStatusID + from #SeedMaintenanceLog s + cross apply ( + select top (1) cast(rod.[' + replace(@ReportObjectDocIdColumn, ']', ']]') + N'] as int) as ReportObjectID + from app.ReportObject_doc rod + order by rod.[' + replace(@ReportObjectDocIdColumn, ']', ']]') + N'] + ) ro + where not exists ( + select 1 + from app.MaintenanceLog ml + where ml.[' + replace(@MaintenanceLogFkColumn, ']', ']]') + N'] = ro.ReportObjectID + and ml.MaintainerID = s.MaintainerID + and ml.MaintenanceDate = s.MaintenanceDate + and ml.Comment = s.Comment + and ml.MaintenanceLogStatusID = s.MaintenanceLogStatusID + ); + '; + exec sp_executesql @sql; + end + else + begin + insert into app.MaintenanceLog ([MaintainerID],[MaintenanceDate],[Comment],[MaintenanceLogStatusID]) + select s.MaintainerID, s.MaintenanceDate, s.Comment, s.MaintenanceLogStatusID + from #SeedMaintenanceLog s + where not exists ( + select 1 + from app.MaintenanceLog ml + where ml.MaintainerID = s.MaintainerID + and ml.MaintenanceDate = s.MaintenanceDate + and ml.Comment = s.Comment + and ml.MaintenanceLogStatusID = s.MaintenanceLogStatusID + ); + end + GO +if object_id('app.ReportObjectDocMaintenanceLogs','U') is not null + and object_id('app.ReportObject_doc','U') is not null + and object_id('app.MaintenanceLog','U') is not null + begin + declare @ReportObjectDocMaintenanceLogsReportObjectFkColumn sysname; + declare @ReportObjectDocMaintenanceLogsMaintenanceLogFkColumn sysname; + + select top (1) @ReportObjectDocMaintenanceLogsReportObjectFkColumn = pc.name + from sys.foreign_key_columns fkc + join sys.columns pc + on pc.object_id = fkc.parent_object_id + and pc.column_id = fkc.parent_column_id + where fkc.parent_object_id = object_id('app.ReportObjectDocMaintenanceLogs') + and fkc.referenced_object_id = object_id('app.ReportObject_doc'); + + select top (1) @ReportObjectDocMaintenanceLogsMaintenanceLogFkColumn = pc.name + from sys.foreign_key_columns fkc + join sys.columns pc + on pc.object_id = fkc.parent_object_id + and pc.column_id = fkc.parent_column_id + where fkc.parent_object_id = object_id('app.ReportObjectDocMaintenanceLogs') + and fkc.referenced_object_id = object_id('app.MaintenanceLog'); + + if @ReportObjectDocMaintenanceLogsReportObjectFkColumn is not null + and @ReportObjectDocMaintenanceLogsMaintenanceLogFkColumn is not null + begin + declare @sqlRODML nvarchar(max); + set @sqlRODML = N' + insert into [app].[ReportObjectDocMaintenanceLogs] ([' + replace(@ReportObjectDocMaintenanceLogsReportObjectFkColumn, ']', ']]') + N'],[' + replace(@ReportObjectDocMaintenanceLogsMaintenanceLogFkColumn, ']', ']]') + N']) + select v.ReportObjectID, v.MaintenanceLogID + from ( + values + (43,1), + (22,2), + (29,3), + (47,4), + (19,5), + (9,6), + (19,7), + (10,8), + (38,9), + (42,10), + (47,11), + (1,12), + (20,13), + (7,14), + (15,15), + (19,16), + (8,17), + (35,18), + (28,19), + (50,20), + (29,21), + (4,22), + (2,23), + (35,24), + (3,25), + (14,26), + (36,27), + (6,28), + (37,29), + (17,30), + (17,31), + (35,32), + (43,33), + (17,34), + (12,35), + (11,36), + (17,37), + (35,38), + (6,39), + (15,40), + (4,41), + (32,42), + (26,43), + (6,44), + (9,45), + (50,46), + (34,47), + (10,48), + (38,49), + (26,50), + (44,51), + (38,52), + (32,53), + (32,54), + (45,55), + (49,56), + (3,57), + (5,58), + (31,59), + (36,60), + (22,61), + (26,62), + (23,63), + (17,64), + (37,65), + (47,66), + (37,67), + (13,68), + (47,69), + (1,70), + (21,71), + (20,72), + (27,73), + (18,74), + (21,75), + (45,76), + (28,77), + (25,78), + (20,79), + (47,80), + (3,81), + (20,82), + (44,83), + (10,84), + (33,85), + (35,86), + (37,87), + (16,88), + (28,89), + (49,90), + (33,91), + (39,92), + (32,93), + (35,94), + (23,95), + (41,96), + (33,97), + (49,98), + (50,99), + (20,100), + (35,101), + (43,102), + (5,103), + (43,104), + (3,105), + (4,106), + (2,107), + (13,108), + (46,109), + (50,110), + (9,111), + (20,112), + (28,113), + (47,114), + (32,115), + (11,116), + (33,117), + (19,118), + (29,119), + (2,120), + (7,121), + (4,122) + ) v(ReportObjectID, MaintenanceLogID) + where exists ( + select 1 + from app.ReportObject_doc rod + where rod.ReportObjectId = v.ReportObjectID + ) + and exists ( + select 1 + from app.MaintenanceLog ml + where ml.MaintenanceLogID = v.MaintenanceLogID + ) + and not exists ( + select 1 + from [app].[ReportObjectDocMaintenanceLogs] l + where l.[' + replace(@ReportObjectDocMaintenanceLogsReportObjectFkColumn, ']', ']]') + N'] = v.ReportObjectID + and l.[' + replace(@ReportObjectDocMaintenanceLogsMaintenanceLogFkColumn, ']', ']]') + N'] = v.MaintenanceLogID + ); + '; + exec sp_executesql @sqlRODML; + end + end + GO + + if object_id('app.reportobjectdocfragilitytags','U') is not null + and object_id('app.ReportObject_doc','U') is not null + begin + declare @ReportObjectDocFragilityTagsReportObjectFkColumn sysname; + declare @ReportObjectDocFragilityTagsFragilityTagFkColumn sysname; + + select top (1) @ReportObjectDocFragilityTagsReportObjectFkColumn = pc.name + from sys.foreign_key_columns fkc + join sys.columns pc + on pc.object_id = fkc.parent_object_id + and pc.column_id = fkc.parent_column_id + where fkc.parent_object_id = object_id('app.reportobjectdocfragilitytags') + and fkc.referenced_object_id = object_id('app.ReportObject_doc'); + + select top (1) @ReportObjectDocFragilityTagsFragilityTagFkColumn = pc.name + from sys.foreign_key_columns fkc + join sys.foreign_keys fk + on fk.object_id = fkc.constraint_object_id + join sys.objects ro + on ro.object_id = fkc.referenced_object_id + join sys.columns pc + on pc.object_id = fkc.parent_object_id + and pc.column_id = fkc.parent_column_id + where fkc.parent_object_id = object_id('app.reportobjectdocfragilitytags') + and fkc.referenced_object_id <> object_id('app.ReportObject_doc') + and ro.name like '%Fragility%Tag%'; + + if @ReportObjectDocFragilityTagsFragilityTagFkColumn is null + begin + select top (1) @ReportObjectDocFragilityTagsFragilityTagFkColumn = pc.name + from sys.foreign_key_columns fkc + join sys.columns pc + on pc.object_id = fkc.parent_object_id + and pc.column_id = fkc.parent_column_id + where fkc.parent_object_id = object_id('app.reportobjectdocfragilitytags') + and fkc.referenced_object_id <> object_id('app.ReportObject_doc'); + end + + if @ReportObjectDocFragilityTagsReportObjectFkColumn is not null + and @ReportObjectDocFragilityTagsFragilityTagFkColumn is not null + begin + declare @sqlRODFT nvarchar(max); + set @sqlRODFT = N' + insert into app.reportobjectdocfragilitytags ([' + replace(@ReportObjectDocFragilityTagsReportObjectFkColumn, ']', ']]') + N'],[' + replace(@ReportObjectDocFragilityTagsFragilityTagFkColumn, ']', ']]') + N']) + select v.ReportObjectID, v.FragilityTagID + from ( + values + (8,26), + (49,2), + (39,8), + (43,26), + (7,3), + (30,17), (4,4), (40,14), (50,11), @@ -1193,11 +1468,27 @@ insert into app.reportobjectdocfragilitytags (ReportObjectID, FragilityTagID) va (17,9), (3,7), (5,4), -(15,11), -(31,16), -(33,13), -(23,22) -GO + (15,11), + (31,16), + (33,13), + (23,22) + ) v(ReportObjectID, FragilityTagID) + where exists ( + select 1 + from app.ReportObject_doc rod + where rod.ReportObjectId = v.ReportObjectID + ) + and not exists ( + select 1 + from app.reportobjectdocfragilitytags t + where t.[' + replace(@ReportObjectDocFragilityTagsReportObjectFkColumn, ']', ']]') + N'] = v.ReportObjectID + and t.[' + replace(@ReportObjectDocFragilityTagsFragilityTagFkColumn, ']', ']]') + N'] = v.FragilityTagID + ); + '; + exec sp_executesql @sqlRODFT; + end + end + GO -- terms insert into app.Term (Name, Summary, TechnicalDefinition, ApprovedYN, ApprovalDateTime, ApprovedByUserId, HasExternalStandardYN, ExternalStandardUrl, ValidFromDateTime, ValidToDateTime, UpdatedByUserId, LastUpdatedDateTime) values @@ -1240,98 +1531,175 @@ TRANSACTIONS.BAD_DEBT_FLAG_YN <> Y ('Census Bed','A bed in the hospital defined in the facility/bed system build as being in the census. Patients in these beds are counted as part of the hospital census.','```A BED record where item # 100 = YES```','N','2020-03-21 02:05:05.169','68','N','','2019-07-22 14:09:14.520','9999-12-31 00:00:00.000','8','2019-07-08 03:57:46.620'), ('Observation Case','A hospital account that was ever placed into an Observation base class. Discharge base class is ignored meaning patients who were later converted to inpatient are included. This differs from an Observation Discharge which only includes patients discharged with an Observation base class.','','N','2020-01-05 19:06:29.022','89','N','','2019-07-22 16:25:28.267','9999-12-31 00:00:00.000','60','2019-06-26 08:02:28.339'), ('Unavailable Bed','Unavailable Beds are defined as the number of unavailable beds at a given point in time, adjusted based on Staffing or Licensing levels. Staffed Beds are checked first, followed by Licensed Beds. If neither of those are being used, the count falls back to the number of Physical Beds.','Set up and logic details available.','Y','2019-07-18 15:51:51.444','58','','','2019-07-18 15:51:51.444','9999-12-31 00:00:00.000','100','2019-05-30 11:16:31.601') -GO - --- report term links -insert into app.ReportObjectDocTerms (ReportObjectID, TermId) values -(43,11), -(22,8), -(1,8), -(24,6), -(44,6), -(35,8), -(3,9), -(10,8), -(21,6), -(1,10), -(36,5), -(30,4), -(5,8), -(37,1), -(46,11), -(41,10), -(24,4), -(30,1), -(19,8), -(5,10), -(22,2), -(34,4), -(14,1), -(33,6), -(4,4), -(1,6), -(45,3), -(37,4), -(26,4), -(26,11), -(16,6), -(21,1), -(38,1), -(19,10), -(22,11), -(7,1), -(49,9), -(19,4), -(11,7), -(34,7), -(33,4), -(47,8), -(49,1), -(31,11), -(29,10), -(29,11) -GO + GO + + -- report term links + if object_id('app.ReportObjectDocTerms','U') is not null + and object_id('app.Term','U') is not null + and object_id('app.ReportObject_doc','U') is not null + begin + declare @ReportObjectDocTermsReportObjectFkColumn sysname; + declare @ReportObjectDocTermsTermFkColumn sysname; + + select top (1) @ReportObjectDocTermsReportObjectFkColumn = pc.name + from sys.foreign_key_columns fkc + join sys.columns pc + on pc.object_id = fkc.parent_object_id + and pc.column_id = fkc.parent_column_id + where fkc.parent_object_id = object_id('app.ReportObjectDocTerms') + and fkc.referenced_object_id = object_id('app.ReportObject_doc'); + + select top (1) @ReportObjectDocTermsTermFkColumn = pc.name + from sys.foreign_key_columns fkc + join sys.columns pc + on pc.object_id = fkc.parent_object_id + and pc.column_id = fkc.parent_column_id + where fkc.parent_object_id = object_id('app.ReportObjectDocTerms') + and fkc.referenced_object_id = object_id('app.Term'); + + if @ReportObjectDocTermsReportObjectFkColumn is not null and @ReportObjectDocTermsTermFkColumn is not null + begin + declare @sql2 nvarchar(max); + set @sql2 = N' + insert into app.ReportObjectDocTerms ([' + replace(@ReportObjectDocTermsReportObjectFkColumn, ']', ']]') + N'],[' + replace(@ReportObjectDocTermsTermFkColumn, ']', ']]') + N']) + select v.ReportObjectID, v.TermId + from ( + values + (43,11), + (22,8), + (1,8), + (24,6), + (44,6), + (35,8), + (3,9), + (10,8), + (21,6), + (1,10), + (36,5), + (30,4), + (5,8), + (37,1), + (46,11), + (41,10), + (24,4), + (30,1), + (19,8), + (5,10), + (22,2), + (34,4), + (14,1), + (33,6), + (4,4), + (1,6), + (45,3), + (37,4), + (26,4), + (26,11), + (16,6), + (21,1), + (38,1), + (19,10), + (22,11), + (7,1), + (49,9), + (19,4), + (11,7), + (34,7), + (33,4), + (47,8), + (49,1), + (31,11), + (29,10), + (29,11) + ) v(ReportObjectID, TermId) + where exists ( + select 1 + from app.ReportObject_doc rod + where rod.ReportObjectId = v.ReportObjectID + ) + and exists ( + select 1 + from app.Term t + where t.TermId = v.TermId + ) + and not exists ( + select 1 + from app.ReportObjectDocTerms dt + where dt.[' + replace(@ReportObjectDocTermsReportObjectFkColumn, ']', ']]') + N'] = v.ReportObjectID + and dt.[' + replace(@ReportObjectDocTermsTermFkColumn, ']', ']]') + N'] = v.TermId + ); + '; + + exec sp_executesql @sql2; + end + end + GO -- relationships -insert into dbo.ReportObjectHierarchy (ParentReportObjectID, ChildReportObjectID) values -(3,4), -(45,46), -(49,50), -(43,44), -(27,28), -(30,31), -(35,36), -(32,33), -(24,25), -(17,18), -(20,21), -(18,19), -(37,38), -(8,9), -(5,6), -(19,20), -(6,7), -(28,29), -(40,41), -(44,45), -(22,23), -(46,47), -(12,13), -(4,5), -(26,27), -(7,8), -(33,34), -(41,42), -(2,3), -(25,26), -(23,24), -(9,10), -(16,17), -(42,43) +if object_id('dbo.ReportObjectHierarchy','U') is not null +begin + insert into dbo.ReportObjectHierarchy (ParentReportObjectID, ChildReportObjectID) + select v.ParentReportObjectID, v.ChildReportObjectID + from ( + values + (3,4), + (45,46), + (49,50), + (43,44), + (27,28), + (30,31), + (35,36), + (32,33), + (24,25), + (17,18), + (20,21), + (18,19), + (37,38), + (8,9), + (5,6), + (19,20), + (6,7), + (28,29), + (40,41), + (44,45), + (22,23), + (46,47), + (12,13), + (4,5), + (26,27), + (7,8), + (33,34), + (41,42), + (2,3), + (25,26), + (23,24), + (9,10), + (16,17), + (42,43) + ) v(ParentReportObjectID, ChildReportObjectID) + where exists ( + select 1 from app.ReportObject_doc rod where rod.ReportObjectId = v.ParentReportObjectID + ) + and exists ( + select 1 from app.ReportObject_doc rod where rod.ReportObjectId = v.ChildReportObjectID + ) + and not exists ( + select 1 + from dbo.ReportObjectHierarchy h + where h.ParentReportObjectID = v.ParentReportObjectID + and h.ChildReportObjectID = v.ChildReportObjectID + ); +end GO -- query -insert into dbo.reportobjectquery (ReportObjectID,Query) values +drop table if exists #SeedReportObjectQuery; +create table #SeedReportObjectQuery ( + ReportObjectKey int not null, + Query nvarchar(max) not null +); + +insert into #SeedReportObjectQuery (ReportObjectKey, Query) values (10,'select lpad( ,level*3, )||ename name,SYS_CONNECT_BY_PATH(ename,/) bossfrom Employee_Mconnect by prior employee_id = manager_idstart with manager_id is null;'), (23,'select t.name table_name, t.object_id, c.name column_name,c.column_id, i.name index_name, i.type, i.type_desc from sys.tables t, sys.columns c, sys.indexes i, sys.index_columns ic where t.object_id=c.object_id and c.object_id=i.object_id and ic.index_id=i.index_id and ic.column_id=c.column_id and t.name=tutorials;'), (48,'USE model; GO DECLARE Student_Cursor CURSOR FOR SELECT id, first_name, last_name, country FROM dbo.students WHERE country != US; OPEN Student_Cursor; FETCH NEXT FROM Student_Cursor; WHILE @@FETCH_STATUS = 0 BEGIN FETCH NEXT FROM Student_Cursor; END; CLOSE Student_Cursor; DEALLOCATE Student_Cursor; GO'), @@ -1397,10 +1765,49 @@ insert into dbo.reportobjectquery (ReportObjectID,Query) values (20,'USE model; GO DECLARE @string AS varchar(100); DECLARE @number AS int; SET @string = 5500; SET @number = CAST(@string AS INT); PRINT @number; GO'), (48,'IF OBJECT_ID (MyDepartment,U) IS NOT NULL DROP TABLE MyDepartment;GO SET ANSI_NULLS ONGO SET QUOTED_IDENTIFIER ONGO CREATE TABLE [dbo].[MyDepartment]( [DepartmentID] [smallint] NOT NULL, [DepartmentName] [nvarchar](30) NOT NULL, [ParentID] [nvarchar](40) NULL, CONSTRAINT [PK_DepartmentID] PRIMARY KEY CLUSTERED ( [DepartmentID] ASC ) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]) ON [PRIMARY] GO'), (44,'WITH OrgTree (DepartmentID, DepartmentName, ParentID, Tree)AS( SELECT DepartmentID, DepartmentName, ParentID , 0 AS Tree FROM MyDepartment WHERE ParentID IS NULL UNION ALL SELECT MyDepartment.DepartmentID, MyDepartment.DepartmentName, MyDepartment.ParentID , OrgTree.Tree + 1 FROM MyDepartment JOIN OrgTree ON MyDepartment.ParentID = OrgTree.DepartmentID) SELECT * FROM OrgTree ORDER BY Tree '), -(9,'-- return everyone under Program Manager (ParentID = 8)WITH OrgTree (DepartmentID, DepartmentName, ParentID, Tree)AS( SELECT DepartmentID, DepartmentName, ParentID , 0 AS Tree FROM MyDepartment WHERE ParentID = 8 UNION ALL SELECT MyDepartment.DepartmentID, MyDepartment.DepartmentName, MyDepartment.ParentID , OrgTree.Tree + 1 FROM MyDepartment JOIN OrgTree ON MyDepartment.ParentID = OrgTree.DepartmentID)SELECT * FROM OrgTree;-- return Vice President (DepartmentID = 4) and direct reports (ParentID = 4)WITH OrgTree (DepartmentID, DepartmentName, ParentID, Tree)AS( SELECT DepartmentID, DepartmentName, ParentID , 0 AS Tree FROM MyDepartment WHERE DepartmentID = 4 UNION ALL SELECT MyDepartment.DepartmentID, MyDepartment.DepartmentName, MyDepartment.ParentID , OrgTree.Tree + 1 FROM MyDepartment JOIN OrgTree ON MyDepartment.ParentID = OrgTree.DepartmentID WHERE MyDepartment.ParentID = 4)SELECT * FROM OrgTree; -- return everyone above Senior Manager (DepartmentID = 6)WITH OrgTree(DepartmentName,ParentID,ReportsTo)AS( SELECT T1.DepartmentName,T2.DepartmentID,T2.DepartmentName FROM MyDepartment T1 INNER JOIN MyDepartment T2 ON T1.ParentID=T2.DepartmentID WHERE T1.DepartmentID=6 UNION ALL SELECT OT.ReportsTo,T2.DepartmentID,T2.DepartmentName FROM OrgTree OT INNER JOIN MyDepartment T1 ON OT.ParentID=T1.DepartmentID INNER JOIN MyDepartment T2 ON T1.ParentID=T2.DepartmentID)SELECT * FROM OrgTree;-- return list with of people with no direct reportsWITH OrgTree(ParentID, DepartmentID, DepartmentName, DepartmentLevel) AS ( SELECT ParentID, DepartmentID, DepartmentName, 0 AS DepartmentLevell FROM MyDepartment WHERE ParentID IS NULL UNION ALL SELECT e.ParentID, e.DepartmentID, e.DepartmentName, DepartmentLevel + 1 FROM MyDepartment AS e INNER JOIN OrgTree AS d ON e.ParentID = d.DepartmentID )SELECT * FROM OrgTree WHERE DepartmentLevel = 5;') +(9,'-- return everyone under Program Manager (ParentID = 8)WITH OrgTree (DepartmentID, DepartmentName, ParentID, Tree)AS( SELECT DepartmentID, DepartmentName, ParentID , 0 AS Tree FROM MyDepartment WHERE ParentID = 8 UNION ALL SELECT MyDepartment.DepartmentID, MyDepartment.DepartmentName, MyDepartment.ParentID , OrgTree.Tree + 1 FROM MyDepartment JOIN OrgTree ON MyDepartment.ParentID = OrgTree.DepartmentID)SELECT * FROM OrgTree;-- return Vice President (DepartmentID = 4) and direct reports (ParentID = 4)WITH OrgTree (DepartmentID, DepartmentName, ParentID, Tree)AS( SELECT DepartmentID, DepartmentName, ParentID , 0 AS Tree FROM MyDepartment WHERE DepartmentID = 4 UNION ALL SELECT MyDepartment.DepartmentID, MyDepartment.DepartmentName, MyDepartment.ParentID , OrgTree.Tree + 1 FROM MyDepartment JOIN OrgTree ON MyDepartment.ParentID = OrgTree.DepartmentID WHERE MyDepartment.ParentID = 4)SELECT * FROM OrgTree; -- return everyone above Senior Manager (DepartmentID = 6)WITH OrgTree(DepartmentName,ParentID,ReportsTo)AS( SELECT T1.DepartmentName,T2.DepartmentID,T2.DepartmentName FROM MyDepartment T1 INNER JOIN MyDepartment T2 ON T1.ParentID=T2.DepartmentID WHERE T1.DepartmentID=6 UNION ALL SELECT OT.ReportsTo,T2.DepartmentID,T2.DepartmentName FROM OrgTree OT INNER JOIN MyDepartment T1 ON OT.ParentID=T1.DepartmentID INNER JOIN MyDepartment T2 ON T1.ParentID=T2.DepartmentID)SELECT * FROM OrgTree;-- return list with of people with no direct reportsWITH OrgTree(ParentID, DepartmentID, DepartmentName, DepartmentLevel) AS ( SELECT ParentID, DepartmentID, DepartmentName, 0 AS DepartmentLevell FROM MyDepartment WHERE ParentID IS NULL UNION ALL SELECT e.ParentID, e.DepartmentID, e.DepartmentName, DepartmentLevel + 1 FROM MyDepartment AS e INNER JOIN OrgTree AS d ON e.ParentID = d.DepartmentID )SELECT * FROM OrgTree WHERE DepartmentLevel = 5;'); +if col_length('dbo.ReportObjectQuery', 'ReportObjectID') is not null +begin + insert into dbo.ReportObjectQuery (ReportObjectID, Query) + select s.ReportObjectKey, s.Query + from #SeedReportObjectQuery s + where not exists ( + select 1 + from dbo.ReportObjectQuery q + where q.ReportObjectID = s.ReportObjectKey + and q.Query = s.Query + ); +end +else if col_length('dbo.ReportObjectQuery', 'ReportObjectId') is not null +begin + insert into dbo.ReportObjectQuery (ReportObjectId, Query) + select s.ReportObjectKey, s.Query + from #SeedReportObjectQuery s + where not exists ( + select 1 + from dbo.ReportObjectQuery q + where q.ReportObjectId = s.ReportObjectKey + and q.Query = s.Query + ); +end +else +begin + throw 50001, 'Seed failed: neither dbo.ReportObjectQuery.ReportObjectID nor dbo.ReportObjectQuery.ReportObjectId exists.', 1; +end GO -- report run data -insert into dbo.reportobjectrundata (ReportObjectID, RunID, RunUserID, RunStartTime, RunDurationSeconds, RunStatus) values +drop table if exists #SeedReportObjectRunData; +create table #SeedReportObjectRunData ( + ReportObjectKey int not null, + RunID int not null, + RunUserID int null, + RunStartTime datetime2 not null, + RunDurationSeconds decimal(18,2) null, + RunStatus nvarchar(50) null +); +insert into #SeedReportObjectRunData + (ReportObjectKey, RunID, RunUserID, RunStartTime, RunDurationSeconds, RunStatus) +values (4,15975389,2,'2019-06-23 02:26:04.141',0.22,'Success'), (5,15975390,43,'2019-06-23 05:34:39.708',0.12,'Success'), (6,15975391,61,'2020-07-06 17:31:45.861',0.74,'Success'), @@ -2397,9 +2804,11 @@ insert into dbo.reportobjectrundata (ReportObjectID, RunID, RunUserID, RunStartT (47,15976382,94,'2019-10-28 07:54:42.976',0.71,'Success'), (48,15976383,2,'2019-12-09 18:48:39.606',0.1,'Success'), (49,15976384,48,'2019-09-06 01:09:33.789',0.45,'Success'), -(50,15976385,13,'2019-10-14 09:42:14.308',0.8,'Success') -GO - insert into dbo.reportobjectrundata (ReportObjectID, RunID, RunUserID, RunStartTime, RunDurationSeconds, RunStatus) values (1,15976386,30,'2019-11-15 06:53:33.045',0.7,'Error'), +(50,15976385,13,'2019-10-14 09:42:14.308',0.8,'Success'); + +insert into #SeedReportObjectRunData (ReportObjectKey, RunID, RunUserID, RunStartTime, RunDurationSeconds, RunStatus) +values +(1,15976386,30,'2019-11-15 06:53:33.045',0.7,'Error'), (2,15976387,49,'2020-01-29 16:25:54.980',0.5,'Success'), (3,15976388,69,'2020-05-07 01:24:10.567',0.42,'Success'), (4,15976389,30,'2020-01-25 09:19:53.703',0.12,'Success'), @@ -3398,9 +3807,11 @@ GO (47,15977382,29,'2020-08-09 08:52:33.239',0.83,'Success'), (48,15977383,47,'2019-09-12 11:52:08.214',0.21,'Success'), (49,15977384,3,'2019-07-10 19:52:16.887',0.66,'Success'), -(50,15977385,1,'2019-08-21 11:51:55.770',0.31,'Success') -GO - insert into dbo.reportobjectrundata (ReportObjectID, RunID, RunUserID, RunStartTime, RunDurationSeconds, RunStatus) values (1,15977386,96,'2020-03-24 15:23:29.211',0.53,'Error'), +(50,15977385,1,'2019-08-21 11:51:55.770',0.31,'Success'); + +insert into #SeedReportObjectRunData (ReportObjectKey, RunID, RunUserID, RunStartTime, RunDurationSeconds, RunStatus) +values +(1,15977386,96,'2020-03-24 15:23:29.211',0.53,'Error'), (2,15977387,12,'2019-06-01 16:58:50.037',0.14,'Success'), (3,15977388,67,'2019-07-12 14:26:22.106',0.88,'Success'), (4,15977389,17,'2020-02-25 10:27:55.849',0.46,'Success'), @@ -4399,9 +4810,11 @@ GO (47,15978382,98,'2019-10-20 16:33:06.652',0.97,'Success'), (48,15978383,38,'2019-12-06 19:21:03.097',0.67,'Success'), (49,15978384,70,'2020-08-08 23:27:12.146',0.98,'Success'), -(50,15978385,18,'2020-07-11 17:05:28.678',0.67,'Success') -GO - insert into dbo.reportobjectrundata (ReportObjectID, RunID, RunUserID, RunStartTime, RunDurationSeconds, RunStatus) values (1,15978386,31,'2020-03-30 10:14:22.915',0.16,'Error'), +(50,15978385,18,'2020-07-11 17:05:28.678',0.67,'Success'); + +insert into #SeedReportObjectRunData (ReportObjectKey, RunID, RunUserID, RunStartTime, RunDurationSeconds, RunStatus) +values +(1,15978386,31,'2020-03-30 10:14:22.915',0.16,'Error'), (2,15978387,41,'2019-08-11 12:25:32.395',0.72,'Success'), (3,15978388,4,'2019-05-27 14:50:29.520',0.85,'Success'), (4,15978389,83,'2019-09-16 06:54:33.984',0.73,'Success'), @@ -5350,7 +5763,10 @@ GO (47,15979332,46,'2019-05-08 18:25:01.310',0.01,'Success'), (48,15979333,21,'2019-07-07 07:20:32.449',0.28,'Success'), (49,15979334,2,'2019-07-13 22:04:46.534',0.31,'Success'), -(50,15979335,65,'2019-06-26 22:42:36.832',0.69,'Success'), +(50,15979335,65,'2019-06-26 22:42:36.832',0.69,'Success'); + +insert into #SeedReportObjectRunData (ReportObjectKey, RunID, RunUserID, RunStartTime, RunDurationSeconds, RunStatus) +values (1,15979336,6,'2020-03-17 20:30:21.508',0.05,'Success'), (2,15979337,39,'2020-03-01 07:58:11.507',0.25,'Success'), (3,15979338,92,'2019-07-08 00:30:21.619',0.72,'Success'), @@ -5400,9 +5816,8 @@ GO (47,15979382,91,'2019-08-10 01:11:39.387',0.58,'Success'), (48,15979383,13,'2019-12-19 17:27:05.404',0.12,'Success'), (49,15979384,26,'2019-12-24 12:05:49.565',0.99,'Success'), -(50,15979385,79,'2019-09-09 03:31:18.747',0.26,'Success') -GO - insert into dbo.reportobjectrundata (ReportObjectID, RunID, RunUserID, RunStartTime, RunDurationSeconds, RunStatus) values (1,15979386,28,'2020-07-07 23:28:56.946',0.18,'Error'), +(50,15979385,79,'2019-09-09 03:31:18.747',0.26,'Success'), +(1,15979386,28,'2020-07-07 23:28:56.946',0.18,'Error'), (2,15979387,27,'2020-01-13 07:30:08.964',0.64,'Success'), (3,15979388,53,'2020-07-10 17:32:45.727',0.34,'Success'), (4,15979389,3,'2019-08-12 00:53:23.308',0.51,'Success'), @@ -6351,7 +6766,10 @@ GO (47,15980332,46,'2019-07-22 04:02:02.264',0.35,'Success'), (48,15980333,87,'2019-12-29 02:07:01.379',0.98,'Success'), (49,15980334,69,'2020-08-13 12:16:45.576',0.26,'Success'), -(50,15980335,63,'2019-06-28 14:16:08.305',0.96,'Success'), +(50,15980335,63,'2019-06-28 14:16:08.305',0.96,'Success'); + +insert into #SeedReportObjectRunData (ReportObjectKey, RunID, RunUserID, RunStartTime, RunDurationSeconds, RunStatus) +values (1,15980336,70,'2019-08-22 12:01:34.869',0.41,'Success'), (2,15980337,72,'2019-08-06 15:36:49.124',0.96,'Success'), (3,15980338,10,'2019-07-15 15:08:04.055',0.22,'Success'), @@ -6401,9 +6819,8 @@ GO (47,15980382,63,'2020-06-29 13:02:32.594',0.23,'Success'), (48,15980383,67,'2020-03-20 06:39:06.304',0.01,'Success'), (49,15980384,19,'2019-12-19 14:45:59.023',0.86,'Success'), -(50,15980385,19,'2019-10-19 23:12:04.556',0.85,'Success') -GO - insert into dbo.reportobjectrundata (ReportObjectID, RunID, RunUserID, RunStartTime, RunDurationSeconds, RunStatus) values (1,15980386,26,'2019-05-08 15:55:46.739',0.3,'Error'), +(50,15980385,19,'2019-10-19 23:12:04.556',0.85,'Success'), +(1,15980386,26,'2019-05-08 15:55:46.739',0.3,'Error'), (2,15980387,35,'2020-01-23 14:04:05.319',0.39,'Success'), (3,15980388,5,'2019-11-06 09:28:27.384',0.31,'Success'), (4,15980389,99,'2019-11-07 04:56:45.599',0.06,'Success'), @@ -7302,7 +7719,10 @@ GO (47,15981282,10,'2019-07-10 12:52:59.091',0.51,'Success'), (48,15981283,75,'2019-12-03 03:43:55.866',0.87,'Success'), (49,15981284,48,'2019-10-21 14:55:47.440',0.42,'Success'), -(50,15981285,38,'2019-04-30 09:02:16.291',0.91,'Success'), +(50,15981285,38,'2019-04-30 09:02:16.291',0.91,'Success'); + +insert into #SeedReportObjectRunData (ReportObjectKey, RunID, RunUserID, RunStartTime, RunDurationSeconds, RunStatus) +values (1,15981286,48,'2020-01-10 11:44:01.906',0.97,'Success'), (2,15981287,89,'2020-01-26 04:29:00.411',0.56,'Success'), (3,15981288,70,'2020-02-16 21:36:23.237',1,'Success'), @@ -7402,9 +7822,8 @@ GO (47,15981382,58,'2019-10-29 12:39:10.109',0.21,'Success'), (48,15981383,50,'2020-04-23 19:23:47.259',0.44,'Success'), (49,15981384,90,'2020-03-04 04:39:22.150',0.62,'Success'), -(50,15981385,9,'2020-02-02 08:49:05.834',0.59,'Success') -GO - insert into dbo.reportobjectrundata (ReportObjectID, RunID, RunUserID, RunStartTime, RunDurationSeconds, RunStatus) values (1,15981386,29,'2020-03-30 12:20:06.572',0.61,'Error'), +(50,15981385,9,'2020-02-02 08:49:05.834',0.59,'Success'), +(1,15981386,29,'2020-03-30 12:20:06.572',0.61,'Error'), (2,15981387,72,'2020-05-06 14:37:49.926',0.86,'Success'), (3,15981388,23,'2019-09-30 15:51:55.927',0.98,'Success'), (4,15981389,87,'2020-03-08 03:08:04.272',0.42,'Success'), @@ -8253,7 +8672,10 @@ GO (47,15982232,67,'2019-06-27 16:17:13.265',0.92,'Success'), (48,15982233,69,'2019-08-12 23:02:15.617',0.88,'Success'), (49,15982234,27,'2020-05-20 09:44:56.937',0.5,'Success'), -(50,15982235,75,'2020-07-01 09:37:52.106',0.67,'Success'), +(50,15982235,75,'2020-07-01 09:37:52.106',0.67,'Success'); + +insert into #SeedReportObjectRunData (ReportObjectKey, RunID, RunUserID, RunStartTime, RunDurationSeconds, RunStatus) +values (1,15982236,81,'2020-01-11 23:27:33.366',0.37,'Success'), (2,15982237,1,'2019-12-31 06:05:41.575',0.2,'Success'), (3,15982238,59,'2019-09-11 18:46:29.288',0,'Success'), @@ -8403,9 +8825,8 @@ GO (47,15982382,23,'2019-06-07 01:04:51.594',0.63,'Success'), (48,15982383,21,'2019-10-05 09:56:56.543',0.22,'Success'), (49,15982384,15,'2020-05-21 10:45:36.894',0.96,'Success'), -(50,15982385,33,'2019-07-26 01:32:44.714',0.27,'Success') -GO - insert into dbo.reportobjectrundata (ReportObjectID, RunID, RunUserID, RunStartTime, RunDurationSeconds, RunStatus) values (1,15982386,51,'2019-07-15 04:02:08.777',0.76,'Error'), +(50,15982385,33,'2019-07-26 01:32:44.714',0.27,'Success'), +(1,15982386,51,'2019-07-15 04:02:08.777',0.76,'Error'), (2,15982387,94,'2019-05-13 17:47:14.651',0.63,'Success'), (3,15982388,90,'2020-03-07 10:52:38.630',0,'Success'), (4,15982389,63,'2020-07-12 08:18:18.693',0.56,'Success'), @@ -9104,7 +9525,10 @@ GO (47,15983082,80,'2020-07-30 02:28:27.097',0.66,'Success'), (48,15983083,11,'2019-12-29 20:24:35.575',0.33,'Success'), (49,15983084,17,'2020-08-01 22:03:51.535',0.92,'Success'), -(50,15983085,75,'2019-07-20 23:34:54.789',0.81,'Success'), +(50,15983085,75,'2019-07-20 23:34:54.789',0.81,'Success'); + +insert into #SeedReportObjectRunData (ReportObjectKey, RunID, RunUserID, RunStartTime, RunDurationSeconds, RunStatus) +values (1,15983086,44,'2020-01-03 22:54:32.419',0.5,'Success'), (2,15983087,31,'2020-06-22 15:04:53.138',0.6,'Success'), (3,15983088,37,'2019-05-12 17:37:37.372',0.37,'Success'), @@ -9404,9 +9828,8 @@ GO (47,15983382,8,'2019-09-12 09:27:25.158',0.86,'Success'), (48,15983383,14,'2019-07-17 19:34:22.147',0.19,'Success'), (49,15983384,19,'2020-05-19 06:35:16.558',0.33,'Success'), -(50,15983385,63,'2020-03-09 15:53:10.533',0.1,'Success') -GO - insert into dbo.reportobjectrundata (ReportObjectID, RunID, RunUserID, RunStartTime, RunDurationSeconds, RunStatus) values (1,15983386,56,'2020-03-11 16:19:34.709',0.49,'Error'), +(50,15983385,63,'2020-03-09 15:53:10.533',0.1,'Success'), +(1,15983386,56,'2020-03-11 16:19:34.709',0.49,'Error'), (2,15983387,13,'2020-03-21 03:31:10.467',0.4,'Success'), (3,15983388,75,'2019-11-21 14:10:16.153',0.57,'Success'), (4,15983389,31,'2020-02-23 23:45:20.346',0.43,'Success'), @@ -10005,7 +10428,10 @@ GO (47,15983982,83,'2019-08-07 08:18:38.484',0.47,'Success'), (48,15983983,88,'2020-05-14 08:30:28.393',0.67,'Success'), (49,15983984,83,'2019-08-01 19:29:16.103',0.09,'Success'), -(50,15983985,13,'2019-05-21 13:41:42.391',0.43,'Success'), +(50,15983985,13,'2019-05-21 13:41:42.391',0.43,'Success'); + +insert into #SeedReportObjectRunData (ReportObjectKey, RunID, RunUserID, RunStartTime, RunDurationSeconds, RunStatus) +values (1,15983986,51,'2020-02-27 16:36:25.656',0.23,'Error'), (2,15983987,52,'2019-04-10 18:59:41.072',0.43,'Success'), (3,15983988,9,'2019-11-22 13:18:31.807',0.45,'Success'), @@ -10405,9 +10831,8 @@ GO (47,15984382,80,'2020-08-01 18:12:34.219',0.52,'Success'), (48,15984383,45,'2019-08-13 14:09:07.619',0.66,'Success'), (49,15984384,12,'2019-10-16 11:15:57.693',0.52,'Success'), -(50,15984385,89,'2020-05-24 20:31:24.526',0.44,'Success') -GO - insert into dbo.reportobjectrundata (ReportObjectID, RunID, RunUserID, RunStartTime, RunDurationSeconds, RunStatus) values (1,15984386,17,'2020-07-22 07:32:11.742',0.99,'Error'), +(50,15984385,89,'2020-05-24 20:31:24.526',0.44,'Success'), +(1,15984386,17,'2020-07-22 07:32:11.742',0.99,'Error'), (2,15984387,81,'2020-07-26 05:42:55.736',0.8,'Success'), (3,15984388,43,'2020-04-29 03:55:10.662',0.07,'Success'), (4,15984389,75,'2019-05-20 12:54:03.839',0.68,'Success'), @@ -10906,7 +11331,10 @@ GO (47,15984882,91,'2020-03-22 09:11:55.818',0.22,'Success'), (48,15984883,19,'2019-10-18 17:22:35.439',0.56,'Success'), (49,15984884,93,'2019-09-04 15:57:44.900',0.14,'Success'), -(50,15984885,12,'2019-08-05 11:57:03.259',0.93,'Success'), +(50,15984885,12,'2019-08-05 11:57:03.259',0.93,'Success'); + +insert into #SeedReportObjectRunData (ReportObjectKey, RunID, RunUserID, RunStartTime, RunDurationSeconds, RunStatus) +values (1,15984886,23,'2019-12-17 06:09:21.563',0.23,'Success'), (2,15984887,34,'2020-01-27 19:48:02.544',0.14,'Success'), (3,15984888,91,'2019-09-02 07:55:55.673',0.46,'Success'), @@ -11406,9 +11834,8 @@ GO (47,15985382,42,'2019-08-26 02:36:57.247',0.05,'Success'), (48,15985383,49,'2019-06-26 15:51:51.810',0.89,'Success'), (49,15985384,27,'2020-07-04 07:35:01.819',0.08,'Success'), -(50,15985385,22,'2019-04-08 05:11:50.387',0.66,'Success') -GO - insert into dbo.reportobjectrundata (ReportObjectID, RunID, RunUserID, RunStartTime, RunDurationSeconds, RunStatus) values (1,15985386,67,'2019-08-04 02:22:39.894',0.76,'Error'), +(50,15985385,22,'2019-04-08 05:11:50.387',0.66,'Success'), +(1,15985386,67,'2019-08-04 02:22:39.894',0.76,'Error'), (2,15985387,70,'2020-03-16 15:54:37.621',0.37,'Success'), (3,15985388,99,'2020-07-16 18:39:14.453',0.3,'Success'), (4,15985389,96,'2020-08-11 15:23:54.529',0.84,'Success'), @@ -11807,7 +12234,10 @@ GO (47,15985782,24,'2019-10-29 21:26:38.911',0.43,'Success'), (48,15985783,44,'2020-04-29 12:21:19.004',0.14,'Success'), (49,15985784,65,'2019-12-16 00:19:57.218',0.93,'Success'), -(50,15985785,4,'2019-05-18 16:28:10.083',0.52,'Success'), +(50,15985785,4,'2019-05-18 16:28:10.083',0.52,'Success'); + +insert into #SeedReportObjectRunData (ReportObjectKey, RunID, RunUserID, RunStartTime, RunDurationSeconds, RunStatus) +values (1,15985786,100,'2020-06-26 04:26:58.110',0.78,'Error'), (2,15985787,6,'2020-03-28 14:41:07.117',0.94,'Success'), (3,15985788,92,'2020-06-04 06:44:21.588',0.95,'Success'), @@ -12407,9 +12837,8 @@ GO (47,15986382,69,'2019-05-07 17:43:15.825',0.4,'Success'), (48,15986383,41,'2020-01-29 14:07:41.469',0.17,'Success'), (49,15986384,6,'2020-03-07 00:10:58.977',0.01,'Success'), -(50,15986385,18,'2019-04-15 05:25:45.251',0.68,'Success') -GO - insert into dbo.reportobjectrundata (ReportObjectID, RunID, RunUserID, RunStartTime, RunDurationSeconds, RunStatus) values (1,15986386,13,'2019-09-28 10:28:39.535',0.08,'Error'), +(50,15986385,18,'2019-04-15 05:25:45.251',0.68,'Success'), +(1,15986386,13,'2019-09-28 10:28:39.535',0.08,'Error'), (2,15986387,54,'2020-03-15 17:46:19.707',0.88,'Success'), (3,15986388,86,'2020-07-20 04:14:24.907',0.2,'Success'), (4,15986389,26,'2019-08-19 01:27:30.286',0.86,'Success'), @@ -12558,7 +12987,10 @@ GO (47,15986532,30,'2019-11-11 13:34:14.099',0.67,'Success'), (48,15986533,56,'2020-02-22 03:27:36.993',0.84,'Success'), (49,15986534,31,'2020-08-12 16:58:06.752',0.71,'Success'), -(50,15986535,57,'2019-05-06 15:46:10.541',0.18,'Success'), +(50,15986535,57,'2019-05-06 15:46:10.541',0.18,'Success'); + +insert into #SeedReportObjectRunData (ReportObjectKey, RunID, RunUserID, RunStartTime, RunDurationSeconds, RunStatus) +values (1,15986536,74,'2020-03-15 13:01:51.916',0.27,'Success'), (2,15986537,81,'2019-08-02 15:55:20.108',0.47,'Success'), (3,15986538,20,'2019-10-01 19:19:54.751',0.13,'Success'), @@ -13408,9 +13840,8 @@ GO (47,15987382,11,'2019-05-15 20:51:35.454',0.47,'Success'), (48,15987383,24,'2020-06-06 02:26:33.130',0.93,'Success'), (49,15987384,53,'2019-05-11 04:40:17.351',0.66,'Success'), -(50,15987385,44,'2019-06-20 06:21:40.946',0.61,'Success') -GO - insert into dbo.reportobjectrundata (ReportObjectID, RunID, RunUserID, RunStartTime, RunDurationSeconds, RunStatus) values (1,15987386,98,'2019-12-09 08:04:44.965',0.09,'Error'), +(50,15987385,44,'2019-06-20 06:21:40.946',0.61,'Success'), +(1,15987386,98,'2019-12-09 08:04:44.965',0.09,'Error'), (2,15987387,26,'2020-04-06 05:33:54.112',0.21,'Success'), (3,15987388,62,'2019-08-17 10:16:38.253',0.47,'Success'), (4,15987389,20,'2019-05-10 01:22:47.369',0.5,'Success'), @@ -13559,7 +13990,10 @@ GO (47,15987532,87,'2019-12-16 10:17:49.858',0.59,'Success'), (48,15987533,25,'2019-06-07 19:51:14.064',0.9,'Success'), (49,15987534,20,'2020-04-16 05:51:07.271',0.66,'Success'), -(50,15987535,63,'2020-02-18 15:02:34.951',0.21,'Success'), +(50,15987535,63,'2020-02-18 15:02:34.951',0.21,'Success'); + +insert into #SeedReportObjectRunData (ReportObjectKey, RunID, RunUserID, RunStartTime, RunDurationSeconds, RunStatus) +values (1,15987536,97,'2020-01-28 05:19:44.043',0.25,'Success'), (2,15987537,33,'2019-09-25 20:59:41.349',0.34,'Success'), (3,15987538,7,'2019-12-26 14:48:48.528',0.9,'Success'), @@ -14359,7 +14793,10 @@ GO (47,15988332,93,'2020-06-18 19:50:05.841',0.83,'Success'), (48,15988333,68,'2019-09-15 03:09:23.900',0.25,'Success'), (49,15988334,18,'2019-12-15 18:07:13.409',0.47,'Success'), -(50,15988335,20,'2019-11-08 00:13:29.826',0.29,'Success'), +(50,15988335,20,'2019-11-08 00:13:29.826',0.29,'Success'); + +insert into #SeedReportObjectRunData (ReportObjectKey, RunID, RunUserID, RunStartTime, RunDurationSeconds, RunStatus) +values (1,15988336,62,'2019-11-18 09:01:39.830',0.99,'Success'), (2,15988337,3,'2020-07-20 09:49:06.917',0.4,'Success'), (3,15988338,42,'2019-08-04 21:33:07.860',0.12,'Success'), @@ -14409,9 +14846,8 @@ GO (47,15988382,36,'2020-02-11 00:56:53.705',0.39,'Success'), (48,15988383,98,'2020-02-23 00:36:33.450',0.81,'Success'), (49,15988384,68,'2020-01-23 19:37:08.764',0.48,'Success'), -(50,15988385,49,'2019-12-13 16:19:55.347',0.91,'Success') -GO - insert into dbo.reportobjectrundata (ReportObjectID, RunID, RunUserID, RunStartTime, RunDurationSeconds, RunStatus) values (1,15988386,6,'2019-12-16 04:05:16.308',0.13,'Error'), +(50,15988385,49,'2019-12-13 16:19:55.347',0.91,'Success'), +(1,15988386,6,'2019-12-16 04:05:16.308',0.13,'Error'), (2,15988387,59,'2019-08-03 09:00:57.398',0.12,'Success'), (3,15988388,31,'2019-10-03 21:28:24.323',0.25,'Success'), (4,15988389,54,'2020-07-27 10:12:20.505',0.21,'Success'), @@ -15310,7 +15746,10 @@ GO (47,15989282,64,'2020-02-20 19:01:19.062',0.61,'Success'), (48,15989283,18,'2020-06-13 23:24:41.064',0.34,'Success'), (49,15989284,61,'2020-04-14 14:41:42.757',0.53,'Success'), -(50,15989285,76,'2020-05-06 20:38:23.760',0.48,'Success'), +(50,15989285,76,'2020-05-06 20:38:23.760',0.48,'Success'); + +insert into #SeedReportObjectRunData (ReportObjectKey, RunID, RunUserID, RunStartTime, RunDurationSeconds, RunStatus) +values (1,15989286,6,'2019-07-27 06:45:15.444',0.8,'Success'), (2,15989287,4,'2020-03-22 14:17:49.716',0.05,'Success'), (3,15989288,9,'2020-02-09 10:51:58.922',0.96,'Success'), @@ -15410,9 +15849,8 @@ GO (47,15989382,87,'2020-01-22 03:07:59.039',0.74,'Success'), (48,15989383,35,'2019-05-11 22:30:09.152',0.95,'Success'), (49,15989384,93,'2019-05-31 01:21:36.936',0.47,'Success'), -(50,15989385,7,'2019-10-04 01:02:43.213',0.76,'Success') -GO - insert into dbo.reportobjectrundata (ReportObjectID, RunID, RunUserID, RunStartTime, RunDurationSeconds, RunStatus) values (1,15989386,37,'2020-04-30 03:50:19.488',0.69,'Error'), +(50,15989385,7,'2019-10-04 01:02:43.213',0.76,'Success'), +(1,15989386,37,'2020-04-30 03:50:19.488',0.69,'Error'), (2,15989387,76,'2019-05-07 08:52:47.975',0.1,'Success'), (3,15989388,57,'2020-07-29 23:03:46.582',0.72,'Success'), (4,15989389,49,'2019-12-05 07:28:03.497',0.72,'Success'), @@ -16161,7 +16599,10 @@ GO (47,15990132,20,'2019-07-06 19:36:42.692',0.8,'Success'), (48,15990133,25,'2020-06-21 23:13:37.625',0.44,'Success'), (49,15990134,15,'2020-02-03 21:24:46.935',0.88,'Success'), -(50,15990135,11,'2020-01-25 06:16:00.135',0.25,'Success'), +(50,15990135,11,'2020-01-25 06:16:00.135',0.25,'Success'); + +insert into #SeedReportObjectRunData (ReportObjectKey, RunID, RunUserID, RunStartTime, RunDurationSeconds, RunStatus) +values (1,15990136,5,'2020-02-09 09:14:57.900',1,'Success'), (2,15990137,67,'2019-11-28 05:25:40.026',0.15,'Success'), (3,15990138,15,'2019-05-25 20:46:21.778',0.03,'Success'), @@ -16411,9 +16852,8 @@ GO (47,15990382,2,'2020-04-16 02:20:54.163',0.92,'Success'), (48,15990383,89,'2020-03-23 15:19:55.581',0.65,'Success'), (49,15990384,19,'2019-08-04 05:55:32.146',0.55,'Success'), -(50,15990385,12,'2019-07-07 17:49:17.320',0.07,'Success') -GO - insert into dbo.reportobjectrundata (ReportObjectID, RunID, RunUserID, RunStartTime, RunDurationSeconds, RunStatus) values (1,15990386,71,'2019-12-06 11:59:44.044',0.48,'Error'), +(50,15990385,12,'2019-07-07 17:49:17.320',0.07,'Success'), +(1,15990386,71,'2019-12-06 11:59:44.044',0.48,'Error'), (2,15990387,37,'2019-07-22 05:32:02.011',0.34,'Success'), (3,15990388,46,'2019-07-04 11:12:22.568',0.19,'Success'), (4,15990389,28,'2019-06-16 13:01:47.600',0.53,'Success'), @@ -17062,7 +17502,10 @@ GO (47,15991032,36,'2020-05-26 08:54:36.025',0.9,'Success'), (48,15991033,61,'2019-10-17 16:00:50.114',0.78,'Success'), (49,15991034,9,'2020-02-28 17:21:50.197',0.42,'Success'), -(50,15991035,89,'2020-06-08 16:08:46.596',0.34,'Success'), +(50,15991035,89,'2020-06-08 16:08:46.596',0.34,'Success'); + +insert into #SeedReportObjectRunData (ReportObjectKey, RunID, RunUserID, RunStartTime, RunDurationSeconds, RunStatus) +values (1,15991036,56,'2020-02-07 08:25:41.493',0.43,'Success'), (2,15991037,60,'2019-10-15 11:09:35.952',0.37,'Success'), (3,15991038,97,'2020-02-06 16:39:42.393',0.79,'Success'), @@ -17412,9 +17855,8 @@ GO (47,15991382,1,'2019-12-07 03:57:43.366',0.88,'Success'), (48,15991383,38,'2019-04-30 08:02:14.703',0.96,'Success'), (49,15991384,62,'2020-04-16 23:54:14.163',0.77,'Success'), -(50,15991385,25,'2020-02-03 04:37:57.660',0.3,'Success') -GO - insert into dbo.reportobjectrundata (ReportObjectID, RunID, RunUserID, RunStartTime, RunDurationSeconds, RunStatus) values (1,15991386,33,'2019-09-02 16:37:57.861',0.39,'Error'), +(50,15991385,25,'2020-02-03 04:37:57.660',0.3,'Success'), +(1,15991386,33,'2019-09-02 16:37:57.861',0.39,'Error'), (2,15991387,55,'2019-09-05 15:39:23.247',0.16,'Success'), (3,15991388,50,'2019-09-02 18:11:18.672',0.45,'Success'), (4,15991389,57,'2020-02-06 00:51:04.402',0.7,'Success'), @@ -17963,7 +18405,10 @@ GO (47,15991932,31,'2019-12-27 23:26:54.976',0.9,'Success'), (48,15991933,74,'2019-06-22 00:12:01.016',0.19,'Success'), (49,15991934,66,'2019-08-05 23:20:38.801',0.83,'Success'), -(50,15991935,42,'2020-07-27 07:46:33.621',0.91,'Success'), +(50,15991935,42,'2020-07-27 07:46:33.621',0.91,'Success'); + +insert into #SeedReportObjectRunData (ReportObjectKey, RunID, RunUserID, RunStartTime, RunDurationSeconds, RunStatus) +values (1,15991936,4,'2020-06-25 19:39:06.787',0.42,'Success'), (2,15991937,35,'2020-02-11 13:37:56.007',0.98,'Success'), (3,15991938,58,'2019-10-21 17:46:01.670',0.12,'Success'), @@ -18413,9 +18858,8 @@ GO (47,15992382,64,'2019-05-02 16:59:55.879',0.31,'Success'), (48,15992383,27,'2019-11-24 19:22:48.757',0.66,'Success'), (49,15992384,46,'2020-06-07 12:05:40.688',0.31,'Success'), -(50,15992385,68,'2020-01-18 20:34:31.913',0.22,'Success') -GO - insert into dbo.reportobjectrundata (ReportObjectID, RunID, RunUserID, RunStartTime, RunDurationSeconds, RunStatus) values (1,15992386,90,'2020-01-23 08:01:19.114',0.97,'Error'), +(50,15992385,68,'2020-01-18 20:34:31.913',0.22,'Success'), +(1,15992386,90,'2020-01-23 08:01:19.114',0.97,'Error'), (2,15992387,53,'2020-03-09 09:13:29.393',0.2,'Success'), (3,15992388,66,'2019-08-06 00:11:53.553',0.39,'Success'), (4,15992389,56,'2019-12-08 01:17:05.699',0.9,'Success'), @@ -18865,7 +19309,10 @@ GO (48,15992833,13,'2019-08-07 13:10:46.440',0.02,'Success'), (49,15992834,62,'2020-04-25 14:24:22.981',0.06,'Success'), (50,15992835,97,'2019-10-31 06:01:32.361',0.83,'Success'), -(1,15992836,91,'2020-03-31 14:19:11.245',0.49,'Success'), +(1,15992836,91,'2020-03-31 14:19:11.245',0.49,'Success'); + +insert into #SeedReportObjectRunData (ReportObjectKey, RunID, RunUserID, RunStartTime, RunDurationSeconds, RunStatus) +values (2,15992837,16,'2019-12-20 08:26:20.844',0.26,'Success'), (3,15992838,52,'2020-01-31 18:48:56.047',0.01,'Success'), (4,15992839,82,'2020-02-13 14:35:51.155',0.39,'Success'), @@ -19414,9 +19861,8 @@ GO (47,15993382,53,'2019-06-18 22:48:41.222',0.99,'Success'), (48,15993383,61,'2020-04-02 20:04:40.909',0.37,'Success'), (49,15993384,4,'2020-03-30 12:17:07.815',0.13,'Success'), -(50,15993385,64,'2019-10-29 09:35:49.808',0.09,'Success') -GO - insert into dbo.reportobjectrundata (ReportObjectID, RunID, RunUserID, RunStartTime, RunDurationSeconds, RunStatus) values (1,15993386,44,'2019-06-27 18:03:47.933',0.55,'Error'), +(50,15993385,64,'2019-10-29 09:35:49.808',0.09,'Success'), +(1,15993386,44,'2019-06-27 18:03:47.933',0.55,'Error'), (2,15993387,61,'2020-06-17 19:01:50.144',0.2,'Success'), (3,15993388,8,'2020-06-21 02:56:44.048',0.04,'Success'), (4,15993389,2,'2019-07-09 04:12:04.668',0.8,'Success'), @@ -19815,7 +20261,10 @@ GO (47,15993782,40,'2019-09-06 14:20:48.993',0.35,'Success'), (48,15993783,36,'2020-06-27 04:42:22.506',0.79,'Success'), (49,15993784,16,'2019-06-09 06:34:03.243',0.49,'Success'), -(50,15993785,1,'2019-07-23 21:33:22.522',0.78,'Success'), +(50,15993785,1,'2019-07-23 21:33:22.522',0.78,'Success'); + +insert into #SeedReportObjectRunData (ReportObjectKey, RunID, RunUserID, RunStartTime, RunDurationSeconds, RunStatus) +values (1,15993786,3,'2020-07-22 02:01:20.108',0.95,'Error'), (2,15993787,62,'2020-04-18 08:49:04.704',0.84,'Success'), (3,15993788,54,'2019-09-12 07:14:33.410',0.23,'Success'), @@ -20415,9 +20864,8 @@ GO (47,15994382,47,'2019-06-24 22:03:26.504',0.14,'Success'), (48,15994383,71,'2020-03-04 15:44:15.023',0.21,'Success'), (49,15994384,4,'2020-06-23 21:30:17.995',0.78,'Success'), -(50,15994385,32,'2019-08-19 11:54:04.643',0.43,'Success') -GO - insert into dbo.reportobjectrundata (ReportObjectID, RunID, RunUserID, RunStartTime, RunDurationSeconds, RunStatus) values (1,15994386,90,'2020-07-23 00:45:44.125',0.87,'Error'), +(50,15994385,32,'2019-08-19 11:54:04.643',0.43,'Success'), +(1,15994386,90,'2020-07-23 00:45:44.125',0.87,'Error'), (2,15994387,96,'2020-04-11 02:43:09.457',0.19,'Success'), (3,15994388,32,'2020-04-12 07:38:55.224',0.9,'Success'), (4,15994389,65,'2020-02-15 12:26:50.296',0.32,'Success'), @@ -20716,7 +21164,10 @@ GO (47,15994682,87,'2019-08-26 04:45:03.432',0.26,'Success'), (48,15994683,50,'2020-07-28 13:32:05.439',0.26,'Success'), (49,15994684,79,'2019-06-22 08:48:26.608',0.02,'Success'), -(50,15994685,84,'2019-11-30 01:23:51.936',0.45,'Success'), +(50,15994685,84,'2019-11-30 01:23:51.936',0.45,'Success'); + +insert into #SeedReportObjectRunData (ReportObjectKey, RunID, RunUserID, RunStartTime, RunDurationSeconds, RunStatus) +values (1,15994686,94,'2020-05-05 17:27:03.775',0.37,'Success'), (2,15994687,51,'2020-03-10 19:11:51.806',0.61,'Success'), (3,15994688,67,'2020-06-22 08:17:18.106',0.29,'Success'), @@ -21416,9 +21867,8 @@ GO (47,15995382,77,'2019-08-30 00:30:30.119',0.27,'Success'), (48,15995383,52,'2019-10-25 07:46:29.384',0.58,'Success'), (49,15995384,19,'2019-08-07 05:02:05.284',0.51,'Success'), -(50,15995385,92,'2020-01-25 06:18:34.784',0.47,'Success') -GO - insert into dbo.reportobjectrundata (ReportObjectID, RunID, RunUserID, RunStartTime, RunDurationSeconds, RunStatus) values (1,15995386,75,'2019-11-22 16:36:52.601',0.59,'Error'), +(50,15995385,92,'2020-01-25 06:18:34.784',0.47,'Success'), +(1,15995386,75,'2019-11-22 16:36:52.601',0.59,'Error'), (2,15995387,32,'2020-01-24 11:16:06.193',0.55,'Success'), (3,15995388,46,'2020-05-04 08:08:30.014',0.77,'Success'), (4,15995389,14,'2019-12-27 12:35:06.862',0.98,'Success'), @@ -21567,7 +22017,10 @@ GO (47,15995532,21,'2020-04-12 12:59:43.998',0.15,'Success'), (48,15995533,37,'2019-11-24 00:04:15.320',0.32,'Success'), (49,15995534,23,'2020-08-05 17:55:35.372',0.92,'Success'), -(50,15995535,79,'2020-01-11 10:09:44.527',0.06,'Success'), +(50,15995535,79,'2020-01-11 10:09:44.527',0.06,'Success'); + +insert into #SeedReportObjectRunData (ReportObjectKey, RunID, RunUserID, RunStartTime, RunDurationSeconds, RunStatus) +values (1,15995536,24,'2020-03-25 00:08:39.548',0.05,'Success'), (2,15995537,76,'2019-04-08 00:24:54.424',0.18,'Success'), (3,15995538,64,'2019-06-09 22:49:31.088',0.68,'Success'), @@ -22417,9 +22870,8 @@ GO (47,15996382,64,'2019-05-30 06:47:48.930',0.72,'Success'), (48,15996383,67,'2020-02-12 01:27:01.858',0.63,'Success'), (49,15996384,80,'2020-01-06 21:28:00.797',0.34,'Success'), -(50,15996385,58,'2020-05-30 18:51:02.486',0.14,'Success') -GO - insert into dbo.reportobjectrundata (ReportObjectID, RunID, RunUserID, RunStartTime, RunDurationSeconds, RunStatus) values (1,15996386,64,'2019-08-11 13:14:18.977',0.04,'Error'), +(50,15996385,58,'2020-05-30 18:51:02.486',0.14,'Success'), +(1,15996386,64,'2019-08-11 13:14:18.977',0.04,'Error'), (2,15996387,94,'2019-04-14 16:06:59.374',0.95,'Success'), (3,15996388,80,'2020-07-23 09:28:06.939',0.44,'Success'), (4,15996389,75,'2020-04-23 11:15:37.502',0.64,'Success'), @@ -22568,7 +23020,10 @@ GO (47,15996532,9,'2019-06-19 10:30:33.853',0.48,'Success'), (48,15996533,84,'2019-08-20 18:33:19.310',0.27,'Success'), (49,15996534,50,'2019-09-09 02:01:53.016',0.41,'Success'), -(50,15996535,35,'2020-01-31 00:51:40.217',0.42,'Success'), +(50,15996535,35,'2020-01-31 00:51:40.217',0.42,'Success'); + +insert into #SeedReportObjectRunData (ReportObjectKey, RunID, RunUserID, RunStartTime, RunDurationSeconds, RunStatus) +values (1,15996536,72,'2019-11-03 16:13:52.231',0.8,'Success'), (2,15996537,28,'2020-04-09 23:49:46.017',0.01,'Success'), (3,15996538,35,'2019-11-19 00:20:38.428',0.44,'Success'), @@ -23418,9 +23873,8 @@ GO (47,15997382,53,'2019-08-21 14:24:14.129',0.13,'Success'), (48,15997383,2,'2019-10-22 02:41:40.344',0.51,'Success'), (49,15997384,15,'2019-07-08 10:09:56.066',0.82,'Success'), -(50,15997385,2,'2020-07-10 04:25:20.764',0.58,'Success') -GO - insert into dbo.reportobjectrundata (ReportObjectID, RunID, RunUserID, RunStartTime, RunDurationSeconds, RunStatus) values (1,15997386,47,'2020-04-30 22:59:40.392',0.48,'Error'), +(50,15997385,2,'2020-07-10 04:25:20.764',0.58,'Success'), +(1,15997386,47,'2020-04-30 22:59:40.392',0.48,'Error'), (2,15997387,32,'2019-09-07 04:55:23.350',0.97,'Success'), (3,15997388,24,'2020-02-21 20:04:16.868',0.35,'Success'), (4,15997389,29,'2020-02-06 18:00:47.300',0.2,'Success'), @@ -23469,7 +23923,10 @@ GO (47,15997432,78,'2020-06-02 15:50:04.129',0.66,'Success'), (48,15997433,35,'2020-07-16 04:21:40.911',0.45,'Success'), (49,15997434,72,'2019-06-08 20:21:24.239',0.95,'Success'), -(50,15997435,87,'2020-03-15 05:41:55.920',0.59,'Success'), +(50,15997435,87,'2020-03-15 05:41:55.920',0.59,'Success'); + +insert into #SeedReportObjectRunData (ReportObjectKey, RunID, RunUserID, RunStartTime, RunDurationSeconds, RunStatus) +values (1,15997436,61,'2020-01-04 08:36:47.239',0.67,'Success'), (2,15997437,3,'2019-10-06 17:04:58.622',0.59,'Success'), (3,15997438,69,'2019-08-24 11:38:08.428',0.93,'Success'), @@ -24419,9 +24876,8 @@ GO (47,15998382,6,'2020-02-13 19:42:14.677',0.81,'Success'), (48,15998383,100,'2020-03-31 00:13:40.744',0.45,'Success'), (49,15998384,78,'2020-03-26 04:24:35.084',0.53,'Success'), -(50,15998385,47,'2020-05-18 02:53:26.100',0.52,'Success') -GO - insert into dbo.reportobjectrundata (ReportObjectID, RunID, RunUserID, RunStartTime, RunDurationSeconds, RunStatus) values (1,15998386,3,'2020-03-07 06:49:40.535',0.46,'Error'), +(50,15998385,47,'2020-05-18 02:53:26.100',0.52,'Success'), +(1,15998386,3,'2020-03-07 06:49:40.535',0.46,'Error'), (2,15998387,85,'2020-02-16 15:02:33.467',0.87,'Success'), (3,15998388,17,'2020-03-28 21:59:52.542',0.56,'Success'), (4,15998389,85,'2019-09-28 00:32:56.511',0.36,'Success'), @@ -24470,7 +24926,10 @@ GO (47,15998432,10,'2019-10-20 22:15:02.141',0.64,'Success'), (48,15998433,73,'2019-07-21 01:14:42.314',0.7,'Success'), (49,15998434,91,'2020-01-17 14:06:08.386',0.19,'Success'), -(50,15998435,74,'2019-05-31 18:32:13.570',0.66,'Success'), +(50,15998435,74,'2019-05-31 18:32:13.570',0.66,'Success'); + +insert into #SeedReportObjectRunData (ReportObjectKey, RunID, RunUserID, RunStartTime, RunDurationSeconds, RunStatus) +values (1,15998436,39,'2020-07-15 11:38:11.620',0.42,'Success'), (2,15998437,66,'2019-11-21 01:17:37.088',0.07,'Success'), (3,15998438,73,'2019-07-12 10:16:29.241',0.09,'Success'), @@ -25370,7 +25829,10 @@ GO (47,15999332,30,'2020-08-08 02:20:13.759',0.81,'Success'), (48,15999333,77,'2019-06-04 02:21:09.046',0.1,'Success'), (49,15999334,20,'2019-04-29 17:20:06.446',0.66,'Success'), -(50,15999335,85,'2019-09-08 15:01:04.504',0.47,'Success'), +(50,15999335,85,'2019-09-08 15:01:04.504',0.47,'Success'); + +insert into #SeedReportObjectRunData (ReportObjectKey, RunID, RunUserID, RunStartTime, RunDurationSeconds, RunStatus) +values (1,15999336,67,'2020-01-31 08:20:34.460',0.72,'Success'), (2,15999337,43,'2019-10-02 08:41:52.616',0.3,'Success'), (3,15999338,16,'2019-05-11 22:22:13.544',0.32,'Success'), @@ -25420,9 +25882,8 @@ GO (47,15999382,6,'2019-11-29 10:22:43.975',0.34,'Success'), (48,15999383,77,'2019-11-26 10:47:54.245',0.57,'Success'), (49,15999384,8,'2019-05-26 21:15:39.193',0.02,'Success'), -(50,15999385,3,'2019-05-26 23:13:12.008',0.95,'Success') -GO - insert into dbo.reportobjectrundata (ReportObjectID, RunID, RunUserID, RunStartTime, RunDurationSeconds, RunStatus) values (1,15999386,86,'2020-05-04 18:55:50.563',0.23,'Error'), +(50,15999385,3,'2019-05-26 23:13:12.008',0.95,'Success'), +(1,15999386,86,'2020-05-04 18:55:50.563',0.23,'Error'), (2,15999387,65,'2020-03-03 01:12:35.524',0.68,'Success'), (3,15999388,97,'2020-08-09 14:07:31.689',0.07,'Success'), (4,15999389,25,'2020-03-20 18:15:07.609',0.92,'Success'), @@ -26271,7 +26732,10 @@ GO (47,16000232,37,'2019-04-28 23:26:37.925',0.89,'Success'), (48,16000233,74,'2019-04-12 05:32:56.305',0.62,'Success'), (49,16000234,29,'2020-03-28 06:07:58.950',0.97,'Success'), -(50,16000235,64,'2019-06-04 04:16:49.888',0.92,'Success'), +(50,16000235,64,'2019-06-04 04:16:49.888',0.92,'Success'); + +insert into #SeedReportObjectRunData (ReportObjectKey, RunID, RunUserID, RunStartTime, RunDurationSeconds, RunStatus) +values (1,16000236,67,'2019-08-17 12:16:06.292',0.93,'Success'), (2,16000237,3,'2020-03-22 18:00:33.014',0.9,'Success'), (3,16000238,54,'2020-08-07 16:35:54.871',0.24,'Success'), @@ -26421,9 +26885,8 @@ GO (47,16000382,53,'2020-05-14 11:30:53.586',0.25,'Success'), (48,16000383,64,'2019-05-10 13:56:12.701',0.25,'Success'), (49,16000384,16,'2019-12-30 15:48:20.781',0.53,'Success'), -(50,16000385,43,'2019-05-04 18:57:01.510',0.41,'Success') -GO - insert into dbo.reportobjectrundata (ReportObjectID, RunID, RunUserID, RunStartTime, RunDurationSeconds, RunStatus) values (1,16000386,6,'2019-08-31 22:11:16.018',0.73,'Error'), +(50,16000385,43,'2019-05-04 18:57:01.510',0.41,'Success'), +(1,16000386,6,'2019-08-31 22:11:16.018',0.73,'Error'), (2,16000387,1,'2020-03-07 15:38:32.106',0.32,'Success'), (3,16000388,31,'2020-01-20 18:56:06.070',0.8,'Success'), (4,16000389,50,'2019-06-08 21:04:37.832',0.68,'Success'), @@ -27122,7 +27585,10 @@ GO (47,16001082,32,'2019-04-25 23:29:59.887',0.43,'Success'), (48,16001083,60,'2020-01-28 03:26:56.505',0.13,'Success'), (49,16001084,29,'2020-03-03 05:09:11.204',0.74,'Success'), -(50,16001085,10,'2019-10-29 08:13:54.547',0.71,'Success'), +(50,16001085,10,'2019-10-29 08:13:54.547',0.71,'Success'); + +insert into #SeedReportObjectRunData (ReportObjectKey, RunID, RunUserID, RunStartTime, RunDurationSeconds, RunStatus) +values (1,16001086,67,'2020-06-29 10:03:13.195',0.68,'Success'), (2,16001087,47,'2019-08-19 08:34:35.313',0.53,'Success'), (3,16001088,39,'2019-04-09 13:34:05.065',0.84,'Success'), @@ -27422,9 +27888,8 @@ GO (47,16001382,99,'2019-04-20 19:09:40.971',0.34,'Success'), (48,16001383,2,'2019-05-27 07:45:37.486',0.83,'Success'), (49,16001384,72,'2019-09-20 15:48:09.832',0.44,'Success'), -(50,16001385,7,'2020-06-25 13:26:29.892',0.64,'Success') -GO - insert into dbo.reportobjectrundata (ReportObjectID, RunID, RunUserID, RunStartTime, RunDurationSeconds, RunStatus) values (1,16001386,62,'2019-07-16 04:49:34.632',0.74,'Error'), +(50,16001385,7,'2020-06-25 13:26:29.892',0.64,'Success'), +(1,16001386,62,'2019-07-16 04:49:34.632',0.74,'Error'), (2,16001387,60,'2019-08-18 18:59:24.156',0.87,'Success'), (3,16001388,37,'2020-03-30 09:54:40.840',0.71,'Success'), (4,16001389,20,'2019-07-06 01:23:49.069',0.97,'Success'), @@ -27973,7 +28438,10 @@ GO (47,16001932,46,'2020-05-01 04:17:42.959',0.06,'Success'), (48,16001933,48,'2019-12-21 02:01:30.016',0.7,'Success'), (49,16001934,15,'2019-12-17 13:00:58.263',0.75,'Success'), -(50,16001935,2,'2019-06-20 22:45:28.553',0.61,'Success'), +(50,16001935,2,'2019-06-20 22:45:28.553',0.61,'Success'); + +insert into #SeedReportObjectRunData (ReportObjectKey, RunID, RunUserID, RunStartTime, RunDurationSeconds, RunStatus) +values (1,16001936,95,'2020-04-01 08:05:45.290',0.97,'Success'), (2,16001937,60,'2020-02-19 05:57:04.753',0.29,'Success'), (3,16001938,88,'2019-10-25 02:14:12.502',0.64,'Success'), @@ -28423,9 +28891,8 @@ GO (47,16002382,42,'2019-08-19 13:46:37.552',0.9,'Success'), (48,16002383,60,'2019-08-04 02:51:20.862',0.42,'Success'), (49,16002384,4,'2019-11-13 01:08:14.566',0.07,'Success'), -(50,16002385,51,'2019-11-08 23:22:03.609',0.23,'Success') -GO - insert into dbo.reportobjectrundata (ReportObjectID, RunID, RunUserID, RunStartTime, RunDurationSeconds, RunStatus) values (1,16002386,20,'2019-04-21 00:55:42.488',0.24,'Error'), +(50,16002385,51,'2019-11-08 23:22:03.609',0.23,'Success'), +(1,16002386,20,'2019-04-21 00:55:42.488',0.24,'Error'), (2,16002387,11,'2019-09-09 18:31:27.451',0.84,'Success'), (3,16002388,61,'2020-04-11 12:31:51.887',0.64,'Success'), (4,16002389,72,'2019-08-30 07:22:42.448',0.88,'Success'), @@ -28874,7 +29341,10 @@ GO (47,16002832,29,'2019-08-08 19:59:17.594',0.12,'Success'), (48,16002833,62,'2019-05-29 09:35:13.548',0.72,'Success'), (49,16002834,84,'2020-07-05 18:39:34.089',0.45,'Success'), -(50,16002835,75,'2020-02-12 00:27:17.119',0.3,'Success'), +(50,16002835,75,'2020-02-12 00:27:17.119',0.3,'Success'); + +insert into #SeedReportObjectRunData (ReportObjectKey, RunID, RunUserID, RunStartTime, RunDurationSeconds, RunStatus) +values (1,16002836,9,'2020-08-13 20:43:16.121',0.05,'Success'), (2,16002837,13,'2019-09-26 11:01:57.014',0.01,'Success'), (3,16002838,33,'2019-10-07 08:44:22.215',0.97,'Success'), @@ -29424,9 +29894,8 @@ GO (47,16003382,12,'2019-06-28 02:34:42.439',0.43,'Success'), (48,16003383,93,'2020-08-13 18:41:09.193',1,'Success'), (49,16003384,9,'2019-11-19 04:00:29.921',0.39,'Success'), -(50,16003385,7,'2019-05-09 12:46:32.743',0.97,'Success') -GO - insert into dbo.reportobjectrundata (ReportObjectID, RunID, RunUserID, RunStartTime, RunDurationSeconds, RunStatus) values (1,16003386,25,'2019-09-08 04:18:51.311',0.95,'Error'), +(50,16003385,7,'2019-05-09 12:46:32.743',0.97,'Success'), +(1,16003386,25,'2019-09-08 04:18:51.311',0.95,'Error'), (2,16003387,54,'2020-06-12 02:51:44.805',0.32,'Success'), (3,16003388,86,'2019-08-02 23:46:30.205',0.83,'Success'), (4,16003389,69,'2019-04-14 00:11:00.855',0.28,'Success'), @@ -29775,7 +30244,10 @@ GO (47,16003732,15,'2020-01-17 01:05:49.110',0.23,'Success'), (48,16003733,76,'2020-05-19 11:32:31.511',0.85,'Success'), (49,16003734,6,'2020-04-04 18:15:55.343',0.79,'Success'), -(50,16003735,45,'2019-10-14 18:09:07.631',0.6,'Success'), +(50,16003735,45,'2019-10-14 18:09:07.631',0.6,'Success'); + +insert into #SeedReportObjectRunData (ReportObjectKey, RunID, RunUserID, RunStartTime, RunDurationSeconds, RunStatus) +values (1,16003736,96,'2020-03-16 23:38:41.054',0.02,'Success'), (2,16003737,43,'2020-03-23 11:50:12.802',0.53,'Success'), (3,16003738,57,'2019-08-28 15:59:07.872',0.42,'Success'), @@ -30425,9 +30897,8 @@ GO (47,16004382,3,'2019-12-22 18:55:09.893',0.8,'Success'), (48,16004383,85,'2019-12-05 07:42:08.020',0.63,'Success'), (49,16004384,12,'2019-05-06 10:44:39.451',0.41,'Success'), -(50,16004385,33,'2020-04-09 18:38:44.203',0.59,'Success') -GO - insert into dbo.reportobjectrundata (ReportObjectID, RunID, RunUserID, RunStartTime, RunDurationSeconds, RunStatus) values (1,16004386,11,'2019-06-26 16:28:19.416',0.34,'Error'), +(50,16004385,33,'2020-04-09 18:38:44.203',0.59,'Success'), +(1,16004386,11,'2019-06-26 16:28:19.416',0.34,'Error'), (2,16004387,50,'2020-02-22 07:46:52.321',0.62,'Success'), (3,16004388,93,'2020-06-23 02:59:46.105',0.08,'Success'), (4,16004389,30,'2019-08-02 19:10:03.744',0.83,'Success'), @@ -30626,7 +31097,10 @@ GO (47,16004582,82,'2020-03-08 19:37:04.472',0.44,'Success'), (48,16004583,16,'2020-01-07 23:22:14.487',0.16,'Success'), (49,16004584,89,'2019-07-02 05:17:47.638',0.81,'Success'), -(50,16004585,46,'2020-03-18 20:19:23.345',0.52,'Success'), +(50,16004585,46,'2020-03-18 20:19:23.345',0.52,'Success'); + +insert into #SeedReportObjectRunData (ReportObjectKey, RunID, RunUserID, RunStartTime, RunDurationSeconds, RunStatus) +values (1,16004586,83,'2019-06-07 10:50:36.824',0.96,'Error'), (2,16004587,19,'2020-05-22 21:26:32.896',0.34,'Success'), (3,16004588,68,'2020-07-01 21:26:39.474',0.84,'Success'), @@ -31426,9 +31900,8 @@ GO (47,16005382,9,'2020-03-01 20:57:06.103',0.44,'Success'), (48,16005383,14,'2020-08-03 14:53:53.543',0.27,'Success'), (49,16005384,68,'2019-04-18 16:36:28.897',0.8,'Success'), -(50,16005385,99,'2020-08-01 14:29:46.664',0.15,'Success') -GO - insert into dbo.reportobjectrundata (ReportObjectID, RunID, RunUserID, RunStartTime, RunDurationSeconds, RunStatus) values (1,16005386,19,'2019-12-18 10:11:13.022',0.97,'Error'), +(50,16005385,99,'2020-08-01 14:29:46.664',0.15,'Success'), +(1,16005386,19,'2019-12-18 10:11:13.022',0.97,'Error'), (2,16005387,7,'2019-08-09 01:58:15.734',0.45,'Success'), (3,16005388,59,'2019-12-06 01:18:23.619',0.95,'Success'), (4,16005389,91,'2019-09-01 17:29:11.003',0.71,'Success'), @@ -31577,7 +32050,10 @@ GO (47,16005532,21,'2020-02-27 09:30:29.894',0.26,'Success'), (48,16005533,39,'2019-11-16 04:14:13.542',0.43,'Success'), (49,16005534,75,'2019-10-06 23:43:45.942',0.13,'Success'), -(50,16005535,56,'2019-09-25 07:46:32.958',0.21,'Success'), +(50,16005535,56,'2019-09-25 07:46:32.958',0.21,'Success'); + +insert into #SeedReportObjectRunData (ReportObjectKey, RunID, RunUserID, RunStartTime, RunDurationSeconds, RunStatus) +values (1,16005536,50,'2020-05-16 13:39:16.212',0.25,'Success'), (2,16005537,96,'2020-07-18 15:29:03.431',0.08,'Success'), (3,16005538,96,'2019-08-05 01:55:34.352',0.86,'Success'), @@ -32427,9 +32903,8 @@ GO (47,16006382,14,'2020-03-10 20:52:49.316',0.89,'Success'), (48,16006383,24,'2019-06-01 13:15:40.652',0.48,'Success'), (49,16006384,8,'2020-06-22 04:55:48.415',0.87,'Success'), -(50,16006385,26,'2020-06-08 11:17:16.712',0.79,'Success') -GO - insert into dbo.reportobjectrundata (ReportObjectID, RunID, RunUserID, RunStartTime, RunDurationSeconds, RunStatus) values (1,16006386,2,'2019-10-01 19:18:43.152',0.49,'Error'), +(50,16006385,26,'2020-06-08 11:17:16.712',0.79,'Success'), +(1,16006386,2,'2019-10-01 19:18:43.152',0.49,'Error'), (2,16006387,18,'2020-08-07 13:31:41.468',0.21,'Success'), (3,16006388,8,'2020-02-14 05:56:41.193',0.57,'Success'), (4,16006389,9,'2020-08-16 13:44:10.602',0.4,'Success'), @@ -32478,7 +32953,10 @@ GO (47,16006432,18,'2019-12-15 01:08:23.531',0.64,'Success'), (48,16006433,10,'2019-09-13 16:14:42.208',0.65,'Success'), (49,16006434,46,'2020-03-02 20:25:03.865',0.93,'Success'), -(50,16006435,82,'2020-05-28 01:47:55.788',0.32,'Success'), +(50,16006435,82,'2020-05-28 01:47:55.788',0.32,'Success'); + +insert into #SeedReportObjectRunData (ReportObjectKey, RunID, RunUserID, RunStartTime, RunDurationSeconds, RunStatus) +values (1,16006436,47,'2019-05-18 21:52:30.836',0.79,'Success'), (2,16006437,60,'2020-03-14 05:16:38.823',0.37,'Success'), (3,16006438,83,'2020-07-02 16:52:05.958',0.95,'Success'), @@ -33378,7 +33856,10 @@ GO (47,16007332,64,'2019-09-16 21:09:11.345',0.59,'Success'), (48,16007333,47,'2019-11-03 07:14:48.161',0.07,'Success'), (49,16007334,76,'2019-05-07 12:43:28.300',0.53,'Success'), -(50,16007335,75,'2019-10-30 21:38:13.784',0.33,'Success'), +(50,16007335,75,'2019-10-30 21:38:13.784',0.33,'Success'); + +insert into #SeedReportObjectRunData (ReportObjectKey, RunID, RunUserID, RunStartTime, RunDurationSeconds, RunStatus) +values (1,16007336,60,'2019-05-26 16:59:20.970',0.04,'Success'), (2,16007337,17,'2019-12-16 03:41:56.645',0.53,'Success'), (3,16007338,44,'2020-01-14 09:43:09.218',0.22,'Success'), @@ -33428,9 +33909,8 @@ GO (47,16007382,60,'2020-03-26 12:12:16.864',0.74,'Success'), (48,16007383,6,'2019-04-23 05:28:20.736',0.55,'Success'), (49,16007384,94,'2020-06-29 07:19:59.829',0.08,'Success'), -(50,16007385,30,'2020-01-09 04:38:17.162',0.33,'Success') -GO - insert into dbo.reportobjectrundata (ReportObjectID, RunID, RunUserID, RunStartTime, RunDurationSeconds, RunStatus) values (1,16007386,75,'2019-11-03 02:30:45.904',0.36,'Error'), +(50,16007385,30,'2020-01-09 04:38:17.162',0.33,'Success'), +(1,16007386,75,'2019-11-03 02:30:45.904',0.36,'Error'), (2,16007387,94,'2019-12-29 21:28:35.134',0.07,'Success'), (3,16007388,24,'2019-05-25 19:45:17.103',0.66,'Success'), (4,16007389,99,'2020-07-10 05:34:20.641',0.35,'Success'), @@ -34229,7 +34709,10 @@ GO (47,16008182,46,'2019-07-01 16:32:47.023',0.15,'Success'), (48,16008183,83,'2019-04-17 23:36:09.988',0.71,'Success'), (49,16008184,8,'2020-05-16 12:57:51.777',0.85,'Success'), -(50,16008185,63,'2020-02-17 07:53:02.406',0.3,'Success'), +(50,16008185,63,'2020-02-17 07:53:02.406',0.3,'Success'); + +insert into #SeedReportObjectRunData (ReportObjectKey, RunID, RunUserID, RunStartTime, RunDurationSeconds, RunStatus) +values (1,16008186,24,'2020-08-04 16:25:23.278',0.84,'Error'), (2,16008187,74,'2020-04-23 02:15:20.275',0.22,'Success'), (3,16008188,85,'2019-10-04 15:47:28.568',0.39,'Success'), @@ -34429,9 +34912,8 @@ GO (47,16008382,40,'2020-05-26 13:32:51.912',0.09,'Success'), (48,16008383,23,'2020-07-20 22:03:05.314',0.11,'Success'), (49,16008384,78,'2020-02-12 18:52:25.604',0.57,'Success'), -(50,16008385,42,'2020-07-22 00:07:26.647',0.9,'Success') -GO - insert into dbo.reportobjectrundata (ReportObjectID, RunID, RunUserID, RunStartTime, RunDurationSeconds, RunStatus) values (1,16008386,42,'2020-03-17 18:06:36.946',0.28,'Error'), +(50,16008385,42,'2020-07-22 00:07:26.647',0.9,'Success'), +(1,16008386,42,'2020-03-17 18:06:36.946',0.28,'Error'), (2,16008387,89,'2019-11-30 01:20:03.412',0.71,'Success'), (3,16008388,43,'2019-05-12 23:54:05.600',0.36,'Success'), (4,16008389,57,'2020-02-06 11:45:06.904',0.5,'Success'), @@ -34980,7 +35462,10 @@ GO (47,16008932,63,'2019-10-25 10:37:34.961',0.78,'Success'), (48,16008933,71,'2019-11-06 06:38:37.862',0.93,'Success'), (49,16008934,45,'2020-05-21 08:52:46.689',0.64,'Success'), -(50,16008935,22,'2019-12-23 14:58:46.163',0.05,'Success'), +(50,16008935,22,'2019-12-23 14:58:46.163',0.05,'Success'); + +insert into #SeedReportObjectRunData (ReportObjectKey, RunID, RunUserID, RunStartTime, RunDurationSeconds, RunStatus) +values (1,16008936,96,'2019-07-03 09:25:13.997',0.71,'Success'), (2,16008937,29,'2019-09-24 07:31:14.057',0.45,'Success'), (3,16008938,83,'2019-06-04 15:25:46.853',0.65,'Success'), @@ -35430,9 +35915,8 @@ GO (47,16009382,90,'2019-12-25 04:39:28.398',0.07,'Success'), (48,16009383,82,'2020-02-08 07:27:11.302',0.49,'Success'), (49,16009384,16,'2019-07-30 23:28:19.227',0.42,'Success'), -(50,16009385,44,'2020-05-06 22:27:11.973',0.51,'Success') -GO - insert into dbo.reportobjectrundata (ReportObjectID, RunID, RunUserID, RunStartTime, RunDurationSeconds, RunStatus) values (1,16009386,60,'2019-06-10 18:48:55.356',0.02,'Error'), +(50,16009385,44,'2020-05-06 22:27:11.973',0.51,'Success'), +(1,16009386,60,'2019-06-10 18:48:55.356',0.02,'Error'), (2,16009387,65,'2020-06-16 10:27:20.046',0.31,'Success'), (3,16009388,35,'2019-04-28 21:42:30.086',0.71,'Success'), (4,16009389,96,'2019-08-01 17:52:55.021',0.06,'Success'), @@ -35831,7 +36315,10 @@ GO (47,16009782,76,'2020-01-11 19:34:40.311',0.13,'Success'), (48,16009783,25,'2020-06-24 18:46:55.444',0.15,'Success'), (49,16009784,100,'2019-12-07 21:28:55.371',0.56,'Success'), -(50,16009785,70,'2020-03-19 10:58:06.338',0.26,'Success'), +(50,16009785,70,'2020-03-19 10:58:06.338',0.26,'Success'); + +insert into #SeedReportObjectRunData (ReportObjectKey, RunID, RunUserID, RunStartTime, RunDurationSeconds, RunStatus) +values (1,16009786,21,'2020-03-21 09:13:37.553',0.39,'Error'), (2,16009787,34,'2020-06-05 05:42:24.169',0.13,'Success'), (3,16009788,83,'2019-12-31 04:37:57.298',0.18,'Success'), @@ -36431,9 +36918,8 @@ GO (47,16010382,3,'2019-05-15 22:43:47.716',0.76,'Success'), (48,16010383,42,'2020-03-17 00:22:44.415',0.18,'Success'), (49,16010384,97,'2020-01-26 01:35:24.884',0.12,'Success'), -(50,16010385,96,'2019-11-24 17:08:44.219',0.62,'Success') -GO - insert into dbo.reportobjectrundata (ReportObjectID, RunID, RunUserID, RunStartTime, RunDurationSeconds, RunStatus) values (1,16010386,66,'2020-06-27 13:11:54.217',0.39,'Error'), +(50,16010385,96,'2019-11-24 17:08:44.219',0.62,'Success'), +(1,16010386,66,'2020-06-27 13:11:54.217',0.39,'Error'), (2,16010387,11,'2019-04-12 06:26:19.235',0.93,'Success'), (3,16010388,42,'2020-05-20 18:57:11.654',0.51,'Success'), (4,16010389,35,'2020-05-12 04:21:02.464',0.2,'Success'), @@ -36732,7 +37218,10 @@ GO (47,16010682,80,'2020-06-30 17:43:33.828',0.98,'Success'), (48,16010683,11,'2020-08-04 12:39:59.874',0.11,'Success'), (49,16010684,7,'2019-08-04 17:18:07.472',0.91,'Success'), -(50,16010685,38,'2020-04-04 14:19:21.485',0.68,'Success'), +(50,16010685,38,'2020-04-04 14:19:21.485',0.68,'Success'); + +insert into #SeedReportObjectRunData (ReportObjectKey, RunID, RunUserID, RunStartTime, RunDurationSeconds, RunStatus) +values (1,16010686,20,'2019-12-29 16:48:54.434',0.35,'Success'), (2,16010687,78,'2020-04-27 04:42:23.891',0.23,'Success'), (3,16010688,23,'2019-05-19 13:52:33.682',0.95,'Success'), @@ -37310,7 +37799,51 @@ GO (25,16011260,98,'2020-06-27 04:52:14.792',0.49,'Success'), (26,16011261,13,'2019-08-24 19:34:05.861',0.87,'Success'), (27,16011262,50,'2020-04-24 14:23:40.114',0.13,'Success'), -(28,16011263,84,'2019-11-26 14:50:46.385',0.21,'Success') +(28,16011263,84,'2019-11-26 14:50:46.385',0.21,'Success'); +if col_length('dbo.ReportObjectRunData', 'RunDataId') is not null +begin + insert into dbo.ReportObjectRunData + (RunDataId, RunUserID, RunStartTime, RunDurationSeconds, RunStatus, LastLoadDate, RunStartTime_Hour, RunStartTime_Day, RunStartTime_Month, RunStartTime_Year) + select + convert(nvarchar(450), s.RunID) as RunDataId, + s.RunUserID, + s.RunStartTime, + s.RunDurationSeconds, + s.RunStatus, + getdate() as LastLoadDate, + convert(datetime2(0), dateadd(hour, datediff(hour, 0, s.RunStartTime), 0)) as RunStartTime_Hour, + convert(datetime2(0), dateadd(day, datediff(day, 0, s.RunStartTime), 0)) as RunStartTime_Day, + convert(datetime2(0), datefromparts(year(s.RunStartTime), month(s.RunStartTime), 1)) as RunStartTime_Month, + convert(datetime2(0), datefromparts(year(s.RunStartTime), 1, 1)) as RunStartTime_Year + from #SeedReportObjectRunData s + where not exists ( + select 1 + from dbo.ReportObjectRunData r + where r.RunDataId = convert(nvarchar(450), s.RunID) + ); + + if object_id('dbo.ReportObjectRunDataBridge') is not null + begin + insert into dbo.ReportObjectRunDataBridge + (ReportObjectId, RunId, Runs, Inherited) + select + s.ReportObjectKey, + convert(nvarchar(450), s.RunID) as RunId, + 1 as Runs, + 0 as Inherited + from #SeedReportObjectRunData s + where not exists ( + select 1 + from dbo.ReportObjectRunDataBridge b + where b.ReportObjectId = s.ReportObjectKey + and b.RunId = convert(nvarchar(450), s.RunID) + ); + end +end +else +begin + throw 50001, 'Seed failed: dbo.ReportObjectRunData.RunDataId does not exist.', 1; +end GO -- favorites @@ -37320,25 +37853,33 @@ insert into app.UserFavoriteFolders (FolderName,UserId) values GO /* images ---insert into app.reportobjectimages_doc (ReportObjectID,ImageData) values +--insert into app.reportobjectimages_doc (ReportObjectId,ImageData) values -- 0x89504E470D0A1A0A0000000D49484452000003D30000029C0806000000EB74E948000000017352474200AECE1CE90000000467414D410000B18F0BFC6105000000097048597300000EC300000EC301C76FA8640000836C49444154785EEDBDBD6EECC6BAAEAB7927FB120C74B47C010B33DC506468AD70C1810161C63B30849509060E606CECDC82B081035FC071A0C88A7C012374E2015F080FAB4876D72F9BA4EAAB770CE9798077CEA19F6EA99FAAFA8A1FC9966F0600000000000000D805CD34000000000000C04E68A6010000000000007642330D000000000000B0139A69000000000000809DD04C03000000000000EC84661A000000000000602734D3000000000000003B316CA6FF18BEFFE69FC33FC67CFFFBFCA9F7C6EF3FF9D777F3CD4FC36FF3A7F4B4F5FEDB8FD373DDFCF8C7FC1900F8F07C91B50F000000A02F7933FDD7AFC3B77333B6966F7FF97B7E400D9A690D34D313170FD7F26EE7E757CBDFC3CFDF95C7CAE5E69B1F869FFF9ABF1534D04C03000000AC37D3C5863969B6EB8D08CDB4069AE9898B87EA899F79FCBEBC31FCB8FCF9CB0FE731298DDB321F39012286661A000000E040333D736EB2AA578968A635D04C4F6C68A63D97EFBBF9EED7E1CFF9B3700583B9BF34D25C79FE0AF8529B699A7C000000E8C8E1663ABC15B3DC84D04C6BA0999ED8DA4C8F6C9EF370A6F5DC0FC680ABCE5F0134D3000000006F69A6AF5D49A299D640333DB1A3990E4F0C7D75AF5344E3B97FA92534415F0534D3000000006F6BA697031797BC71A399D640333DB1A7990E5E27B77A6FA3F1DC3FFBA709FA3AA09906000000786333BD7A6B26CDB4069AE9099A69531ACF7DAE4C7F65D04C030000007C21CDF47C009466EF1F220AFF12709AF526E9F2BBA659FDDDB303B7F2F3EC7D1D4B6357CAF506794F335DFF4F102DCDF3F666FAA0C3790E9D1D2573E1F81FA3BAFC3E6D9BE95673A53E5FF736026F9A2F7BFC57D66998C3272382E7DE325E5BD8550F0ECFC383F321A2D59C2A3FCFD635549B47C5C737FED90B87E6B2E5BC0400000058A1C96DDEE503A6CBC155ED20283CD8CD9E233840BADAC8AD7DEFF920B9DCA09C9BA8F4E7071EAA0762C101E5CFE72B6BC75F477820997FEFC5E7FA01EA75EF8EF067A5E35C3AA05DFBDDDFE430F89EF3CF6A72E07BF170BD39DBF6BDADE6CA6FC1F7AFB9EF325F8EFA0F5FCFFCA9B7119FD8D9DE881638520F0E7878D37C986935A76AF527ACB1D5B91DFEACC8D7654CB2C76EF8D9ABE390D0642E3B9ACF4B000000803A6F6AA6CF0782C583BD6B4DDDE5406DCB15876B0DF9D583AC02EBBFBF2338882B1D0C06BF5FF57B1C1B5EC7E5A07AFD20F0FAEBBDE67DE3CF4A9A8BDA6B7BB3C3F4E75C693EB673F9B9D7E6F19639D47CAEACB90FBEB7F6BB379B2F47FDCFBF63DBA6E5E2D03F776D3DAD70B81EECF4F0E6F930D27C4ED57C9DC7AAE4E4E01FDFDBF9B35DEC6BDF88C9BC040000002873BC990EBEAF7C90743910AC1D445DE7CA81DED5DF6185AD075D6B07A2C181E2FAF35C791D6B3FA3C0FA41F815EF3B7ED672F0EABF7FF5F77E83C3600CB7BEFE6D5C3CACCEE3600CABDFD7E275063F678FFBE2CF5CFB390556E7CB51FF5B9D1C60F97D77FF4E6FA9077B3C349C0FEDE6D4DAF3ACD49FA3CE5AFC6CC7DAEB2B70F504C456AF000000000D38D84C5FBFEAD2A6990E9A8AECE0E9E01515CFE5B1AB8D9667A5290B0E28AF3D4FBD393AF03A560F80D7BCEFFD596BE3DCC861D8C454AFD01D61E5677A2EBFBF4B7D8EB69F2B7BDDC7CFD578BE1CF56FDDB404BFD7B69F73C04BC8660F2DE643FB3975ED79AA75746D6EACF145D6BE11EB790900000010B0BB995E0E8CAE1F005D0E02771DA425540FC48E1E043AE6C7EEBE1A92BEDEF381DB86E7A91DE4EDFC5D26D60E4257BCEFFE592B3FA795C3601CAF37167BB878A865D3EFDE78AEB86C9BAF15F7ADE7CB51FFBD9A96C0DBEAEF18BC8E43F566AB8716F3A1C573385AD49F609D64CFBF468B9FBDD3C3C49506BCFA3A01000000DAB3DA4CD7B2ED0AD6D166BADC046507476F3868AA5F2929733E984D5FF79EDFA1F6BD075F47F5775AF37EE067D50EE49B390CE6DBA126A8CAC543DA1C852784AE3590EDE7CAF6C6A1F85CADE7CB51FF077F8F635C1A28FF332D9AA88D1E5ACC872FAAFE38E6AFF9AF6F6DA85BFCEC3DCF1150F5E138F89C000000004778D31F205B675B331D36364BC286A376E0B9F78034A4F433B7C4E260F6E8EBA81F50D6BD1FF959E79F5369A6F726FB7D05CDB4671E8F6B3F573257665A34620BD5F9F25534D313E158D44E901CFE7D7636D37B531AC3BD79D39CBAF6BDC1EB2FFEAC94063FBBF95C7608E6250000007C5C84CDF4E5EB6B076EB503AEF3E7AF1DF41578CB6323BEC803CABECDF49B1DCEF36DDFAD9E5BB8D24C8F9C5FDB8A0FC95C99298D71F3F972D4BFA869A98DD99BC769A38716F34132A7B67EEFFC7D4BAABF63839FDD7C2E3BF6FC5E000000006F44D64C9F0F88AEDC56583BE03A7A20E678CB6323BEC803CACECDF45B1D0A9BE970AED7AE46B69F2B5B5F67F9BDA1CDE7CB57D64C2F3FD7251CB3378FD3DE66FA0DAFBBFD9CDAF03C7BC72B581B45270D7E76F3B9ECD8FB3A01000000DE80A699DED0C42C9C0F9CD283A3F341D38126EC2D8F0D69704079AC99B9345AF918AD78DFFDBA57FED84F2B87875EFF163634D323AB07E68EE67365EBF3547EFFD6F3E5A8FFDA7CB666FEB92ED1FC7EEB386DF5D0623EB4780EC79E31D8F3BD672E73B0BEFEBFA4DA3772E875020000001C43DA4C5F3F880A0EE6B283A36DCD5299B73C36A0C9C1EC9583C312C118E5272356BCEF7DDDC1CFC9EF2068E4F0D001F51636FE7EF3B8B8E4BE1C6DE7CAE6E739CF97D44BE3F972D4FF9EB9DF92AA97378ED3660F2DE643DB39F5B6FAB3CEF9EA717AB2A9C9CF6E5DFB460EBE4E00000080237CD157A69703B9DAC1D15B6E976C72AB65A383D9CBEFB2ADA159BF9ABAE27DA47AA5BFC0F2BDFEFBB366BA91C3A3CDDC55B6362C9703FADAD5E9967365DBF304BFD3AAF706F3E5A87F51D3B2F65ADE344E3B3CB4980F2DE7D4A6E738385EE7DFD3A4996E3C971DA279090000001F13D17BA6D79B05CF7C50B4A47C7074BD11AA73F9FDAABF8367FABEE2CF6F7440E9D8DAE45E3F085F6FA6B7BEEEE5E72C297F6F0387F2667A24986B6F71B6FA3AD3F9BC325FB7CC8566F3E5A87FB3715BE1EA38BDA11EEC7A3D0DE643C339756D0E786ADFFBD7DFC39F2EF38731179FD91A6AF1B367DAD5BE11C5BC040000800F8BEC0F90853F273DF00D0FAE7EBE7A007539E02BFDACF503B0E080363BF88A9FB778C0DBF080D2B1BC6E97DC7DF8BBAEFDBC2BDE3D6BCF157C6D1C979F97B1A81EF0BFD1A1D9C1EFE5F7BA3E8FB734616F7C9DC1F87F1F8C733C466BE392D364BE1CF61F385B5EEF6A63B64EF85AF2791BFBADCF6BC7FAF756EBC16E0F6F9C0F9E7673EADA5CA97EEFFC7997780E05E35B5A132D7E76409BDAE7087EEF06F312000000600D5D333D131E4485591EB3E96A8423F8BDD35C3D400E0E28D3AC3A687C4039111F4487D976A0BFCDBBA7F2BAC39FB38C4FBD219839EAF08B68A64782DF7FD5DBD1D7998EFFCA7CBD3A6E116F9C2F6FF27F717CFE997BAF0887AC3871D9558FF6D683A31E8ECE879056736A8D95EF5D6A6C29D5B9D8E867C7BCB5F62D349E970000000015F2661A00DAB3A7F90000000000802F1E9A69801ED04C0300000000BC2B68A6017A40330D00000000F0AEA09906E801CD3400000000C0BB82661AA00734D30000000000EF0A9A69801ED04C0300000000BC2B68A6017A40330D00000000F0AEA09906000000000000D809CD34000000000000C04E68A6010000000000007642330D000000000000B0139A69000000000000809DD04C03000000000000EC84661A000000000000602734D3000000000000003BA19906000000000000D809CD34000000000000C04E68A6010000000000007642330D000000000000B0139A69000000000000809DD04C03000000000000EC84661A000000000000602734D3000000000000003BA19906000000000000D809CD34000000000000C04E68A601000000000000761235D37FFEF2C3F08F6FFE19E5E69B1F869FFF9ABFA13B7F0CDFBFF9E7B7780E000000000000800B4933FD53A1E974CDE8D854FFF8C7FCF117CEEF3F0DDFFEF2F7FC8131AD7F56CFDF1D0000000000000EB3A1999E7057ADBF8A468F661A0000000000008CD9DC4CFB2BD4DFFD3AFC397FE4F8EDC7F076F09F86DFE6CF7BC6C6F0FCB5E471E1D75CBEFFDD7DF2EFE1E7EFC6E7F8EBD7E15BF718FF7CF3E7FC83DCCF5B3E17FCDCE0B9C3DFC7656A4C2FCFF1DB8FA5DBBDD39F113C77FA9A02CA3F6BA2F61CA51312EE7BDDEB5F7B3E000000000000F8B2D8D14CBB862F6E3AA72678C635C1E7C63669BCFFFAFBFC6FD750A6CDF59FE3D7A7A6766C3683C6366F74DDD7E386387BBEECEA6EF01CE3EFF87DDAA4069F5B7F4D050A5792AF3D47D4D0A78F2F3C1F0000000000007C791C6BA64B4DE9C8E5F163335D7C8F757E75FB826B7A9346B470D538FEFAC46A831A3D47FC7C8EF363AFBEA602E9CFDAF21CAEB9F66E0A2E68A6010000000000BE0A7634D341233A367DE12DC9619666D75F312EDCFA5D6F16F346376FA6D3AF4FB89F756EB2579BE9E47BC3A67FC36BCA487FD6C6E770BF83BB029FB95EF5030000000000005F0ADB9BE9F315D591CD4DDFD8AC8E8DE4F92F81AF3EEE2DCD74F07B673F237DDEB881AE37E11B481FB3F539C6EF2BBE1FFBC8EF00000000000000DDD9DC4C47B752878DF506CE5783571FB7A5992E5D254E1E9735A4F9F35EFE9059F0F99DAFC993FEAC4DCF31DFDE5DFA5E9A69000000000080AF82EBCDB46BFA92DB941DAEB1CD1ABFDFFF989AD3BFC6FF0F9E276CC4DDE3E2FF66F5DFC36FBFBBE7D9D24CE77F802CFB3DB226B5F0BCAE691D1BEAF4FDCDABAFA944A121BEF61CA18BF896F3914DCD38000000000000A8499AE91FB2F7FA66FF59AB00D73846DF7B6E045D037BF97CDA5C868FBBF966692EB734D3EEDFD3ADE3B5E70E7FF6F4B5DAF3C64DF942FD3595487FD644ED39FC7BA5A3DF37FD3DCACF070000000000005F165133FDA5537BCF34000000000000404F68A6010000000000007642330D000000000000B0139A69000000000000809D7C55CD34000000000000C09700CD34000000000000C04E68A6010000000000007642330D000000000000B0139A69000000000000809DD04C03000000000000EC84661A000000000000602734D3000000000000003BA19906000000000000D809CD34000000000000C04E68A6010000000000007642330D000000000000B0139A69000000000000809DD04C03000000000000EC84661A000000000000602734D3000000000000003BA19906000000000000D849DC4CFFFED3F08F6FFE99E5E69B9F86DFE66FF9EAF908AF110000000000004C2936D3DFFF3E7FECF8EBD7E1DB2FBED9FC63F8FEBB1F866FBFFB75F873FE4C95AFF6356E65870B00000000000038C4F5667AE4CF5F7E287EFECBE18DCDB463FEFCB7BFFC3D7FE26B85661A0000000000C09ACDCDF4CD373F0C3FFF357FC2317F6F98B0115D1AF0526A8D6C98F4E7A5CFB75C452EFD9CD586786333FDDB8FF173A68FA9FD3E8E6B8F2D7D7DFA9EBF879FBF8B3F97BD9615EF575DEC1CB3F36B9AAFDC875F3B3F6E7ECEF771551F0000000000601B579BE9A5C1BAF9F18FF933E5CF2D0DE2F2D8B031BB346C7F0CDFCF9F4BBFEF26BA923A7D5FD8509FBF2F6DEA3D6FBF32BD3CBFFF7CF63D5393BBE9F7D9F0D8C5D5A501BD78B93CF6D2582FCF75FE992BDE6B2EB63CB6FC9ADCEFE19EEFD22CFFF9D7DF3E0000000000001F954D7F802CBABAE99AB51F7F1A7369CA26E2266E69CCE2C78E2CEF4FF68F5F6982A3EF5B793ECFCAF3A4AC9D30587B7CF2B8F5DF2721796CDE00579E6F7EDCF4B96DDECB2EB63DB6FC9A4ACF070000000000F0B159BD325D6AFA4AB7FC86591A52D79895AF22FF3DFCEC1BBBF1FBE6E72A37A4C1F78D1F2D8D5EF4BB9CD9D1F0CDAF314DFE3B5CAE0C97BE6FFDF7597FACF39ABA293E5FE867A3F7A28B1D63E63ECE5E53E0ACFC7A0100000000003E16576EF3AE3766E506F842BD990E9E7367335D7E3EC7FE667AAD295C4E22443F6F7E5CD84C977E9F2D8F7D4B337DCDBBCD984D145F1B0000000000C00764F37BA6571BEC02C5E6D01135962BCF353780E16DDEF526AE65333D3E57E196E8E5F52C0D69F9F7D9F6D843CDF4E6D758FABE6D8F5D77BCB0F5F700000000000078BF5C6DA64BCDD3D2F8857FCCCA5F49FEE5D73197E6D77D4FF47C4B831CFCE5E7F373A5CD9FFFBE4B63B7DEE8ED68F0B634D395DFD1E56A33BDE1B1C79AE9CBF7AC79AFB9D8F2D8DA6BFAED7797F9C3650C69A60100000000E003B3A199BE34624B53E7583E17266D7ED3AF4FDF736934CFCC3F77EDFBCA8DDE85E5166497F0F7CCB8DA4C8FCC0DE3F27C61D69BE9910D8F3DDA4C3BAE7977D45C5C7B6CED3585CF373D26189BD967715C010000000000DE297133DD906AB309000000000000F095736EA6C32B8F2D7213A4F475F23E030000000000F011E0CA34000000000000C04E68A6010000000000007662D64C03000000000000BC5768A6010000000000007642330D000000000000B0139A69000000000000809DD04C03000000000000EC84661A00000000000060275133EDFE7356FFF8E69F51BEFDE5EFF9AB00000000000000E0C89AE9EF7F9F3F98F9ED471A6A0000000000008090ABCDF430FC317CFFDDAFC39FF347000000000000001F9D0DCDF4DFC3CFDFFD34FC76FEF7E516F09B6F96CF3BE6EFFBEBD7E1DBE86B6B8F7157BE2F8F89BE5EFADC8CBB5A7EF3E31FF34739FE39D39F9B9D10F8325E0B0000000000007C7DECBA32FDE72F3F0D3FFF357DD6F3FB4F4153EB1ACD1F866FCF8DF7C4FA63E6C6386C30DDD7FDF304CD6FF2986BFCF6A37BFC0FD1CF75AF2D6CA8BF96D7020000000000005F1E579AE9E94A6CDE602F8C5FFF716914AF7DEF42F898A9F18D1AD4B991CD3E173CE61AAEA92DFD1EF9CF0AF9325F0B0000000000007C7964CDF4720BF3744B72A1F90C6E59F6DF73BEEAEA1AC7CA2DCCD5C7B806347D4CE979569EBB40FE9C13D9C982AFE0B5000000000000C097C786DBBC175C1318378FFE73D1D5DC52E3B8F698DECDF4729BF6B5DFABF63BF47F2D000000000000F0E5B1BD99765764B3F7FA867FE9BBD0245E7D8C55335DBA453B788EAFE8B5000000000000C097C78E2BD371E33835853F8C0DE64A037AF53156CD74FE07C85C837DF9EF657F3DAF05000000000000BE3C7634D323BFFF7479AFB07F3FF5D818AE36A023AB8F39D680FABF9ABDF217B1A7E71C9BDFF9E7BA5C1AE9992FE4B5000000000000C0D747D44CBF17F2A616000000000000A01D34D3000000000000003BA19906000000000000D809CD34000000000000C04EDE65330D0000000000006009CD34000000000000C04E68A6010000000000007642330D000000000000B0139A69000000000000809DD04C03000000000000EC246AA6FFFCE587E11FDFFC33CACD8F7FCC5F0525BFFDB8754CFE18BEFFEED7E1CFE5DFE1589E3F1FE39EFBFBDFE70F32F63D5F3887F2AFBFF5F1EBB8C77EFBCBDFF347D7C9BF7F9BAF85D27A497FFEBADB99DF7F629D01000000007C6524CDF44FC3CF7FCD1FCCB866604F8362CAD8747C31BF4B475CD316365B6B4DA3FBDAD4BCFD3DFCFC5DFCDFDB4E9F67691EBFFD6E794CCE9EE72B7D7CF93DDFFAF82BFCF5EBD8F4BFE5FBB7F88A715F4FBDA5EBC57D7CAD29F7DFB3F2730000000000E0CBE36A331D5F9914F3219BE9BCC9AB8FC9F8BD3FAE8D55F0757735F49BE9794B4DE1C48EE72BFE9EA5CF85BCF5F10BF3F36C9E1F5BBF3FFCFD72CADEE2B1F9EDC7F17B7E2CADAB19D7D4FF3286661A00000000E0AB625B339D1CE8BB2B69CB6DAD4B43B6F0DBD838FCE69BA0E07B0A8D9F6B4496AFFBEF897EC6DC448D8DC6B7EE6BE3CFF83EF8992EE526287FDCF4BBC4BFE344FCBA5CD3F3F35FD77FEF94F5D7B1ED79AF5D999C9C86549AE9ABCD61F971D5667ACFF339E785D730BDFEF9838CB73E7EE2FC3DC9EF5BF35AFBFE9C8AE799B2B778BEF99FF57BF9B539AE7D1D0000000000BE4CAE34D36333F14DDCCCB806256A205C1314341CAE3970B70D878F714D47D840969A1CFF3DE7CFB986C43D4FD2446EB992983D2E6E6E2E8CAF2DF81DA6DF3B7E6DEEF75CFB79D75FC7B1E7CD185F77FC9CE5F7E1E64D774CAD69AE7D7ED7F38DF3E0FBC26BAA3DB7E3AD8F77445FBF3A3FF67DFFAE9F7D266EC07DB33CAE85E5FF239613089513090000000000F0E5B2FA07C8D2ABCEF586E7D284D71BBDB999708D43E56ADFA5E198AEE466CFB3A9994E1FB7B5992E35B82B572637BD8E03CF5B211C9BA2832B0D997B7CCD5DB129DCFB7C95B1293EF7C85B1FEF491F736D7EECF8FEECF72B90FF6EF9FC8BE67DE2F3BC6EAEB80600000000802F8F952BD363C39736D363F31136DB619606A27635F3DC785C6960A6E7A934C0D79AA5E2E3B636D3852B87EEB1B5F7CC6E7A1D079EB740DA90BBE7CFAF88976ED177B8715CBF129E3785079EAFE2237F9EB73E7EA6D480AECD8FCDDF7FDDD782F316AE819BE42E0E477C6225FC7A30FF68A60100000000BE3AD66FF34E9B8DB56665A6DE4CCFCFBDF21C5D9BE9A481F9629BE94AA3953566A52BDDEEB1E909910279337DE0F9B6FC9E6F7D7C40DAC8862935B59BBE7FA3AF85DC5B4EFAFA973B3BA2C7565E3B00000000007CB95C79CF74D2886E38E82FDFE61D3C8F7B8EABB747571AE043CD74A5211B9F2B7D6F73F63D6B4DEFA6D771E079532ACEA3E71D5F4BEEBCD21017C89AC243CF377E3D6B44C3C7BCF5F11BB83A3F12A2EFDFF9B3467637D3E7F999FC2C9A690000000080AF8E2BCD74DE3014DF03FCFB1FE726C8350FE91F204B1FE33E5EFFC35D9566FA6AD3517E5CFCDC23BE111E7FCFE073479ADEEBAFE3D8F3C6B8D7949CA0702702CECD58DD55E9FDED25E2313EFE7CF96B0FC6FDAD8FDFC25B9AE91DBE16626F65B2F1773F739C7BD1E3DC7C4CE61100000000007CD95C6DA64B570C5D9313DD261B3540EE7BDD632E5F2F3538AE11099F23FE9E4A43373796B5E7AC3F2EFE9DA73FAC36FE8E0D9ADEF5D7B1ED794B4D79CCE5755F7EFF995A1338366DE1EF757E6CE1EA6BD414BEF1F942CF918BB73E7E0B61733C72D56BF8FD3B7C2D1C6AA64B738A661A00000000E0AB236AA65B70ED3FA7046D2937EBC769FD7C000000000000EF119AE9AF99D65734B9420A0000000000B0099A69000000000000809DD04C03000000000000ECA479330D000000000000F0DEA19906000000000000D809CD34000000000000C04E68A6010000000000007642330D000000000000B0139A69CFDFC3CFDFF157C8010000000000601B5133FDE72F3F0CFFF8E69F51BEFF7DFE62034ACF7FF3CD0FC3CF7FCDDFD0943F86EF373FF7B666BAF8FBFFF8C7FC55000000000000F82864CD74DC3CBB26B35DB3FBE72F3F159ECB35BDEAA6746B339DFFFEBFFDF8CFE1DB5FFE9E3F020000000000808FC095667AE4F79F9A358BE5667AC2FD6C5D537ABC99F62703BEFB75F873FE08000000000000DE3F579BE9F073BFFD58BA4A7D6944DD55DAB52BCC6BCD74DE94BAE70D6F078F9BDDE97749BE277B7CFA98DAF3BDB1999E5FF3353F6F7F4D000000000000F025B0DE4CFFF5EBF06DD8CC95AE528FDFF3FDC62BCAEBCDB46B262FCD65F6BDE3CF0E1B75D7787E3B369DE1EF1BDF721D37C8EE6BF5D776B4994EDE977DC5CFDB5F130000000000007C09ECFC036463D3F9637CA5B47C35B6CC9E663A27FED9E52633BCBA1D34C89586FFF2FB6C6DA6633FE995E5FD7EF6BE26000000000000F812B87A9B77DAE0C50DF1E516E72DAC37D38586D65D3D0E9BD7A0A92C37A961731A3CDFEF3F454D7098E9F5863FDBFD3BFE9EE5F567AF3D6BA637F879D36B020000000000802F81EB7F802C6A34475C33B8348863939A7F7F9DD5663A7CDEB9A1CDDE031D5DC5DDD74CAFDF2A9DBCC60AD9EF5FB9ADBBECA7C56B020000000000802F81FDCDF4F9E3F4F3D7596BA6A346326AAC17E2DB9D7735D3C5E70BD9F65AF2DFBFF4B8E573C9D79ABC26000000000000F812B8DA4CBBCF657FA1DB5D71FD65FB1F1E5B2836D3AEC9FC267D6F76DC644E0DEA0F63337AB0991E29BE1FF9F73FE6AF278D6F85D2EF5F3C0151F4D3E235010000000000C097C0D53F4056FE4F5D8D8D61F857AC675CC3BAFE9FC62A3C7FD460068C0DE9F97BFCCF8A9BCABDCDB4C3FD7ED1CF3EFFAEF9F796285F59772ED2C796FDBCFD35010000000000C09740D44C6F27BDCA0A31F801000000000078CF1C6AA68BB736C319FC000000000000BC6F0E34D3A5DB9AE1027E000000000000DE3BBB9AE9E53DC75C752D831F0000000000808FC1C1F74C030000000000007C5C68A6010000000000007642330D000000000000B0139A69000000000000809DD04C03000000000000EC84661A000000000000602734D3000000000000003BA19906000000000000D809CD34000000000000C04E68A6010000000000007642330D000000000000B0139A69000000000000809DD04C03000000000000EC84661A000000000000602734D3000000000000003BA19906000000000000D809CD34000000000000C04E68A6010000000000007642330D000000000000B0139A69000000000000809DD04C03000000000000EC84661A000000000000602734D3000000000000003BA19906000000000000D809CD34000000000000C04E68A677F2F3CFF33F847CFFFDFC0F78133F8F1EFF9CFF0D0000000000B087A899A6B9B88E4533FDDBE8FDB7F9DF25D2AFAF35D3DF8F23BAF65C5F02D75EEF5B5FC39FE3187D5B18A7F4E732DF0100000000E02834D33BF9D29BE9AF816BAFF7ADB879EC1CA57399661A00000000005AB1B99976570B6FE6FC1C7C936B5096CF8757035DD3F9F3B797EF77CD4DF8BDDFAF7453EEB1E1F7BA6F75571B8B8F1D9FFBDBF9F32EE1EF96FE0E8EDAEB48597B5DB5AF5DFB5D427E1B3F765F5E7E3F9FF179534A5F5F73198E61EAB0C41E476F79EDD1EB58323E5789F035EC99379EF181DF3BB7EE6786BF43C163CD55F8BAB6380400000000808FC7D8225CA835D3AE11091B89F4E385F0F3EEDF61E3E31AB4E8E3F1EBA59FE5881E3B7E936BD2C206277C6C7A4BF0DAEF107ECD917E5CE3DA73864D68EDF96BCDB4FFF7E87DEDF748BFEE7E4ECDC7790CC7FFF979ED49674AAF277C58F41A0ADFBBE9B5278FBBF67AA3667A7CDEF0B16BF3C6716EA2C77C3B3E4F48FA73AFCEF7F18B5B1C0200000000C0C7636C552E149B8BB199089B19CFF87178D56F21BC1A98DE8A9C36416B0D55FA7B848D99C3FD1CFF71E9F7183FB7FCBED1EF107CFE4CE9F105D65ED7B9E12A3D57F0339B36D389CBB38F91B0994E9BC9127B1C1D7DEDE9E37635D33BE68D233AB190CC9BF4B1B5667AAD21070000000000706C6AA697DB5CC39C9BAEE4EB4B5395368F6943153680296B8DA763796CD8E49E193F76B7F93AA2E7B9F63A5236BEAEE5E7EDFA5D46DED44CAFB88CC6707E0DD5D738B2C751B3D77EE5F546CDF4CA6BCD18BF105EB177DF1BBEF6D5667AFC42F89ACFAF67FEFC9A430000000000F8788C6DC2855A339D354A0BE3E7A32B77C1F7A60D9445335DFCDDC6CF159BBFD2F7D658795DE9EB38FFBCD2F32F5F1B491F17BA366BA667DCE36BCDE01E47475F7BAF66DA3D6FD810FB048F4F7FEEF9E78CFF531BEF8535870000000000F0F1B8DE4C8FA4EF873D337E326C30DCF72D4D4897667A24FDDDC28FB3DFA1F63A52C66FAABD2EF7EFF46BCB87E9F3871F47B71C8FFFB8096E47BED65CA65FDFD44C8F9F383F66FC44EDBDBF7B1C1D7EEDC9CFB8F67A8F36D3A5F7533BEFCBD8559BE9F193C5F11E3F77FEF4F831EF9F06000000008085B16DB8E01A8FF0AA5EF447AE82CFBB9C9BE6E031BF8DCD46EF66DA7D61EB5FD076D45E47CADAEB0ABF163D7EE57789BEE69ABAF0358DCFBF7CBE48F2F54DCDF4C8F9B58EBF6FF8AB84EC7174F4B5673FE3CAEB3DD24CBBCF870DF199F173E7799CFCDCF0E7D4C67B8B430000000000F8788C6D02C0364A8D370000000000C047E4DC4C2F57E50821F500000000000038680F60335C9906000000000098A09906000000000000D809CD34000000000000C04E68A6010000000000007642330D000000000000B0139A69000000000000809DD04C03000000000000EC84661A000000000000602734D3000000000000003BA19906000000000000D809CD34000000000000C04E68A6010000000000007642330D000000000000B0139A69000000000000809DD04C03000000000000EC84661A000000000000602734D3000000000000003BA19906000000000000D809CD34000000000000C04E68A6010000000000007642330D000000000000B0139A69000000000000809DD04C03000000000000EC84661A000000000000602734D3000000000000003BA19906000000000000D809CD34000000000000C04E68A6010000000000007642330D000000000000B0939B7F7CF3CF81104208218410420879EF69C9CDFFF3FFFE7F03D1C40D66E9F3A44FF0AF0DFEB5C1BF36F8D706FFDAE05F1BFC6B837F6D9CFF96D04C0BC362D206FFDAE05F1BFC6B837F6DF0AF0DFEB5C1BF36F8D7C6F96F09CDB4302C266DF0AF0DFEB5C1BF36F8D706FFDAE05F1BFC6B837F6D9CFF96D04C0BC362D206FFDAE05F1BFC6B837F6DF0AF0DFEB5C1BF36F8D7C6F96F09CDB4302C266DAEFBFFDFC3BF8DDF73F3CDBF86FF2A7E9DBC25B9FFC9B7FBBCCBBFFD77F835D23AD7FD33FF2D93FB5F0B63D13AFBFC93D6D9EFFFC81A60DDD4D2C73FA985FAA38DF3DF129A69614A8BE9BFFE8326A257AEFB67F3B04CEADFB9779F5BC23AB0CD75FFCC7FCBA4FED7C358B4CE3EFFA475F6FB3FB206B63FE6A31D7BF5F14F6A29F9E7F8BF5F9CFF96D04C0B132FA6FF3BFCCF7FA789E899EBFED93C2C13FBBF3473CCFF3EC1BF36A97FD237F8D7A68FFF2D7BF8C73CF662FE6B13FBE7F8BF779CEB9664CDF4FFFAD77FFA1FB2E47FFCEBFF065F0F0AD3FFF9EFE17FCCDF73F3CD7F0EFFF3FFAC3F0F13248FF332FDFBB29096DCFCFBBF867F1B3F176E028BD3CB98CCE3F1EFFF3DFCAFE47B96C4E347C2383FD3BF4BFE9DD370239EFEEDBF16CDF7E57BFE73F8B7FF98DC875FDFB20E3EEA5A71AF75FA77CDFFF47DEB733A1CA3DAE7D6C7E8A3C67998FEBD65FE5F9AED9BFFF8DFD1F3943EFF51E7F49E382FD1E7FEFB5F91B3D5393D7FEF659D7030B637CE55F4B955FF53D6E675BBF5118CF595E3ACAF39EE35A59FDBECE5FCB9CBBC9FFCA4DF137E3CFDFBF2BDF1E397847BCF7B8E7BAD978FB7CCB915B7F403BBE33C4CFFDE77FCF3116B85459CA79644CDF452F4D35C36814B31CABE2718FCDAF3D0D8C5714EA67F9717D37FCD8B68593CE74D79713D2F9E657CAE8F1F09E3DC4CFFAE15B32DF33DFF9E65B3D9B20E3EF25A71AF73FA777D33B93EA783CD647EDEFC73F5315A7E978F18E761FAF7FAFC3FBBCA1A3897E57B2E9BF7479ED37BE29C9C3F0E0E84C2A475269CB78B67BF3F2C6343ADDF1CE7EBFCF155FF1BE675B3F591D7AB25F1737FDD71AF27FC78AB97CB1AC8EBD692B5DA7FFE1EEFB2BEF784BFDB7B8C7BAD978FB7CCB9D4FFB679CA7E508E7330FD7BFFF1CF47AB1516718E5A7269A697C62C3CA3116C3053437719B86C035916D8F23CD140A68B90B8386F978F2F0BEA7CE6697639B99EBEFE6FFFF1AFB3C7E58C95FFFE4DE347C25CF55F9AEF67CFF986126D0E5BD6C196EF79C789FD5F368E74FE6FA949B1AFF4739531FAE0B9EA3FF338AD91683CD206E283CFE93D89FC171BB1302BF3BC701713B99E5DFE37CDEB56EB63FAD83DAE7A9CF50E12F9DFE1E5FCF1F298C0F7724CB4EAF2FCB8E57B4A7BFFFB4FE47FD39C2B8FC7EA63368DEBC74CECBF3007A915A6718E5A7269A6970148CE6C2F0758D3402D03196C16E9E0CECF534AFC38E29C5C3EAE37737E4CFCC21AFDFDF7FCFFA3473736A9F7F5F1BB7C9EECF01F15A5F473A5353166CB3AF8E06BC5BDCEF0E3AC99DB55930E8CD107CF55FF05B7CBC1EA524F6A63560AFEE33827E78FE703A7BAAFD23C8F6F01BC8C1BD912E7ECFCF135FF1BE7759BF551AA57E5F1FF9AE35EF3F9E35D5E6607C5FD21F554F2967E8E66FAE2646DCED53E5E790CFB4135CEC1E5E3C21CA45698C6796CC9C1663A1CA4ED8BC7850DFF12E7E3F271B9A03BFFDEEDE875723CF9FEB7FF9EBEFF3C5E9BC6EFF279B2C5FF86F97EFE38D918B6AC830FBE56DC6B0C3FAE1D78D24CDBE4AAFF35B7FE6C79E1EB1F7C4EEF89F3117D6EB5A12B8DC565CCFCF726EB84ACC7398B3EB7E67FF3BC6EB13E4A635D1EFFAF39EEF59E3F3EE2A5B83FA49EB6B8A499DEE6E9805BF6836ADCEBBF7CBCAF9976F948B5C222CE614B36DDE6BDBEA1279F3B3F8681BC163798E1C7F9C1EC98714139FFEE0F272DB77BB8EFFB1FFFF12FEFF9FCBD9BC68F84B9EE7F4BA15A3E4E1C6F59071F7CAD5CF5BF694E4FFEC3C7D56EF5631DC4B9EABF38FFA7EFF32EFF356DF6D189BA0F3EA7F724F59F261E8FC25804CD443E76E45A76F9DF31AFDFBE3E4AEBAEBC16BFE644FE8F78C9F682B5DABFEEF223AE9FC8FF264FD73E2E7C8EFDA09AD87F610E522B4CE35CB7E4D01F20BB3670D5E789EEFD27CE49F871E8EDE26AF2EB3F378FC365C3889B83EBE347C23837E1C7B9FF2DF37DF9386FD4B6AC838FBC56DCEB0C3F5E5C840734D7E7F4E58C6EF63D1BC6E823C7390A3FCEFD97E6FF9879939F1C1F9BF724F15FB90A71F19B8EC57C67D2F2750E5A77C7F93D7F7CD5FF8E79FDE6F5515A7795B5F815C7BDE6F0E3FD5EF2DA7FF3EFFF99AC836D2EC39FFD51EA947BAD978FB778BAF671F973EC07E53807E1C7A53948ADB08BF3D892A8997609DF83E512DF1EBC7DE0D249F0D1174E29CE4BF4B96043BFF8ACDFFE5172BA3E7E248CF3137D2EF3BF65BE2F1FE7074D2E5BD6C1475D2BEEB5861F2F1ED2AB0357E77470F03A3D7EDF187DD43857E1C7B9FFD2FC8FBFB776A2EEA3CEE93D715EA2CF250D5D3C5FE3B1389F500DFC5F1B1312C7B98A3EB7EA7FCAD679FDB6F5515A77F5B5F8B5C6BDEEF47347BDF8EFF59F4FBF67A3CBE2B1D7FB8E7BAD978FB7783AE876CCD675F39112FB1F539983D40A9B38972DC99A69D22F6E304B9F277D827F6DF0AF0DFEB5C1BF36F8D7C6C43F77686C0EF35F1BFC6BE3FCB784665A18169336F8D706FFDAE05F1BFC6B837F6DDEEC3FB923290C77675C8FF354FA3CE913FC6BE3FCB784665A18169336F8D706FFDAE05F1BFC6B837F6D9AF84F6ECD77E116E26D69E29F1C0EFEB571FE5B42332D0C8B491BFC6B837F6DF0AF0DFEB5C1BF36F8D706FFDAE05F1BE7BF2534D3C2B098B4C1BF36F8D706FFDAE05F1BFC6B837F6DF0AF0DFEB571FE5B42332D0C8B491BFC6B837F6DF0AF0DFEB5C1BF36F8D706FFDAE05F1BE7BF2534D3C2B098B4C1BF36F8D706FFDAE05F1BFC6B837F6DF0AF0DFEB571FE5B72E39E90104208218410420879EF69C9CDFCFF20A0F560C23EF0AF05FF5AF0AF05FF5AF0AF05FF5AF0AF05FF5A5AFBA79916C262D2827F2DF8D7827F2DF8D7827F2DF8D7827F2DF8D7D2DA3FCDB410169316FC6BC1BF16FC6BC1BF16FC6BC1BF16FC6BC1BF96D6FE69A685B098B4E05F0BFEB5E05F0BFEB5E05F0BFEB5E05F0BFEB5B4F65F6EA63F3F0D77A787E175FE106CC806D37B3F0DA7390F0C802999FFD787B3FBD3E96E78FA3C7F1E4CA81633EA4F17AED59FD3DDD3C012B0239FFF9F87A7BB8BFF3B0A902991FFA8F633063D58AF3FECBFD6ACFAA7F69B93D7FF99E2F14FB837706CD482AAFF83149AE9D7E18101EB423C9893F77303ED377736144B22FFBE8005BEBD7FD68025B562F6FA40FDE941E6DFCD79CEE07523F5EFE7FD72109BD623684EADFE78A8FFE6C4FEE3E39FCF4F77F837A6E47F3979E4FDB3179852AE3FE5FECBEF0DF37884FF86E3ACD6FF0344CDF454C0C605F5F050383302AD8906D36DDED1D9C0E94C146BC68EF5C5E48A1A07B39614FDFB757047FDE940EADF6DD25C89EB47EC9F7AD39B7AFD8F1B3BB021F29F5D8D633D58837F2D69FDA9F75FC95814AF5CC35EEAF5FF187133FDFA1A9C1567B0AC591F4C36746BD6FCFBC2C6AD4EA6E4FEDD09A4B1EE507FBA10FB77EE3978EA49E49F39DF9D5AFDA7F6F721AF3FC99D798C8129EBF58766DA9AB4FE54FB2FC6C6845AFD3F0AEF9916B236986CE8F614FDFBB9EF6EB3A15859936D26E39CF75746A93F5D88FD4F1BF4DDF97D59CC7F6B22FF73F3F03A5F9D70E144AA2DE5FD973BC27A91FB9FDCFBF9CFB18F3979FDBFCCFBE52A29EBC08E72FD19A199EE42D5FF4168A685D406732A64F8B7667531F19E3973B2CD7C3980A2FE7421F2EF9D871BB4DBB019034B22FFBEDE04B7D9FB8F3960B2A458FFA93DDDC8EA7F30FF3906B2279BFF7EEE4F2733EE9E5E39A9644CB1FE38D21A94D5249AE91654FD1F84665A486930A74D8485D283F5C544C1B226F4EFDEAF7BDEB8A93F5D60FE6B89FC67B7B57285D49AEAFE8BF42E44FE6918BA43FDD752F54F33DD85F5F9BF1F9A6921E9607236B62F6C265A2EFE9DEBF9F6BE241CD7DAC1FCD712F9CFF65C9A696B4AF39F3FC2D78FF5F94FFDB166B5FED3039853F57F6D2D30364D589DFF07A09916926F266C1E3D89FCA7B775BBF1E07D5BA66CDF4CC002E6BF9674FE478D5C3A1ED09CBCFE7002A327B1FFC93DB779F723F61F376CFCE797ECC9EBCF4CE1F8271C0FC6A60D55FF07A19916120EA65F205C99EB4ABA98A60D7C71CFFCB766CF6602ED61FE6BC9E77FF00798C650FB6DC9FD7335B427997F5FF797F9CF385893F9F727F066FF9C483527AF3F33C5E31F579B96B5C1DEDC82AAFF83949B69E842EBC1847DE05F0BFEB5E05F0BFEB5E05F0BFEB5E05F0BFEB5B4F64F332D84C5A405FF5AF0AF05FF5AF0AF05FF5AF0AF05FF5AF0AFA5B57F9A69212C262DF8D7827F2DF8D7827F2DF8D7827F2DF8D7827F2DADFDD34C0B613169C1BF16FC6BC1BF16FC6BC1BF16FC6BC1BF16FC6B69ED9F665A088B490BFEB5E05F0BFEB5E05F0BFEB5E05F0BFEB5E05F4B6BFF34D342584C5AF0AF05FF5AF0AF05FF5AF0AF05FF5AF0AF05FF5A5AFBBF714F480821841042082184BCF7B4E4E6D3A74F03D1C40D66E9F3A44FF0AF0DFEB5C1BF36F8D706FFDAE05F1BFC6B837F6D9CFF96D04C0BC362D206FFDAE05F1BFC6B837F6DF0AF0DFEB5C1BF36F8D7C6F96F09CDB4302C266DF0AF0DFEB5C1BF36F8D706FFDAE05F1BFC6B837F6D9CFF96D04C0BC362D206FFDAE05F1BFC6B837F6DF0AF0DFEB5C1BF36F8D7C6F96F09CDB4302C266DF0AF0DFEB5C1BF36F8D706FFDAE05F1BFC6B837F6D9CFF96949BE997C7E1F6743F3C97BE469A255B4CDEFB6938CDB97F0EBE469A27F3FF7C7F767F3ADD0E8F2FC1D748F3543713EA4F975CAB3FA7DBC7E125FC3A699A7CFEBF0C8FB717FFB78F2FC9D749CB44FEA3DACF18F4C87AFD61FFB5CEAA7F6ABF79F2FA3FA778FC13EE0D1C1BB588F3DF924233FD3CDC33605D122FA6C9FBB981F69B3B1B8A6522FFBE8005BEBD7FD680656A9BC9F33DF5A74732FF6ECEDF3FC79F236649FDFB79BF1CC4A6F588344FADFEF850FFCD13FB8F8F7F5E1E6FF16F9C92FFE5E491F7CF5E609A72FD29F75F7E6F98C723FC37391EE7BF2551333D15B07141DDDF17CE8C90D6891693DBBCA3B381D39928AE4EDBA55CCC96B8A2C6C1AC658AFEFD3AB8A5FE7448EADF6DD25C89EB97D83FF5A677EAF53F6EEC884D22FFD9D538D68375F0AF4D5A7FEAFD573216C52BD7646F9CFF96C4CDF4F37370569CC1B24E7D33776143B7CE9A7F5FD8B8D5C934B97F770269AC3BD49F2E89FD3BF71C3CF54CE49F39DF3DB5FA4FEDEF93BCFE2477E63106A659AF3F34D3D649EB4FB5FF626C4CE2FCB784F74C0B53DBCC5DD8D0ED53F4EFE7BEBBCD8662659D6C3319E7BCBF324AFDE992D8FFB441DF9EDF97C5FCB74EE47F6E1E9EE7AB132E9C48B54D79FFE58EB05EC9FD4FEEFDFCE7D8C73C79FDBFCCFBE52A29EBC02EE5FA338666BA4B9CFF96D04C0B535B4C5321C3BF75AAC5CC85F7CC9927DBCC970328EA4F9744FEBDF37083761B36636099C8BFAF37C16DF6FE630E982C53ACFFD49E6EC9EA7F30FF3906B24F36FFFDDC9F4E66DC3E3E7352C938C5FAE392D6A0AC26D14CB788F3DF129A69614A8B69DA4458283D522D663E142CEB84FEDDFB75CF1B37F5A74B98FFDA44FEB3DB5AB9426A9DEAFECB1FF7E992C83F0D43F750FFB5A9FAA799EE12E7BF2534D3C2A48B89B3B17DC366A2CDC5BF733DDFDE978466C22ECC7F6D22FFD99E4B336D9DD2FCE78FF0F5CBFAFCA7FE5867B5FED30398A7EAFFDA5A606C9AC4F96F09CDB430F966C2E6D13391FFF4B66E371EBC6FCB34DB37136211E6BF36E9FC8F1AB9743C48F3E4F58713183D13FB9FDC739B77BFC4FEE3868DFFFC927DF2FA33A770FC138E0763D326CE7F4B68A6850917935F205C99EB9AB4984D1BF8E29EF96F9D3D9B09691FE6BF36F9FC0FFE00D3186ABF6D72FF5C0DED99CCBFAFFBCBFC671CAC93F9F727F066FF9C48354F5E7FE6148F7F5C6D5AD6067B738B38FF2D2937D3A44BAA8B897409FEB5C1BF36F8D706FFDAE05F1BFC6B837F6DF0AF8DF3DF129A6961584CDAE05F1BFC6B837F6DF0AF0DFEB5C1BF36F8D706FFDA38FF2DA1991686C5A40DFEB5C1BF36F8D706FFDAE05F1BFC6B837F6DF0AF8DF3DF129A6961584CDAE05F1BFC6B837F6DF0AF0DFEB5C1BF36F8D706FFDA38FF2DA1991686C5A40DFEB5C1BF36F8D706FFDAE05F1BFC6B837F6DF0AF8DF3DF921BF7848410420821841042C87B4F4B6EE6FF0701AD0713F6817F2DF8D7827F2DF8D7827F2DF8D7827F2DF8D7D2DA3FCDB410169316FC6BC1BF16FC6BC1BF16FC6BC1BF16FC6BC1BF96D6FE69A685B098B4E05F0BFEB5E05F0BFEB5E05F0BFEB5E05F0BFEB5B4F64F332D84C5A405FF5AF0AF05FF5AF0AF05FF5AF0AF05FF5AF0AFA5B57F9A69212C262DF8D7827F2DF8D7827F2DF8D7827F2DF8D7827F2DADFD979BE9CF4FC3DDE961789D3F041BB2C1F4DE4FC369CE0303604AE6FFF5E1ECFE74BA1B9E3ECF9F0713AAC58CFAD3856BF5E774F734B004ECC8E7FFE7E1E9EEE2FF8E02644AE43FAAFD8C410FD6EB0FFBAF35ABFEA9FDE6E4F57FA678FC13EE0D1C1BB5A0EAFF208566FA757860C0BA100FE6E4FDDC40FBCD9D0DC592C8BF2F60816FEF9F356049AD98BD3E507F7A90F977739E3378DD48FDFB79BF1CC4A6F5089A53AB3F1EEABF39B1FFF8F8E7F3D31DFE8D29F95F4E1E79FFEC05A694EB4FB9FFF27BC33C1EE1BFE138ABF5FF0051333D15B071413D3C14CE8C406BA2C1749B777436703A13C59AB1637D31B9A2C6C1AC2545FF7E1DDC517F3A90FA779B3457E2FA11FBA7DEF4A65EFFE3C60E6C88FC6757E3580FD6E05F4B5A7FEAFD573216C52BD7B0977AFD3F46DC4CBFBE0667C5192C6BD607930DDD9A35FFBEB071AB9329B97F770269AC3BD49F2EC4FE9D7B0E9E7A12F967CE77A756FFA9FD7DC8EB4F72671E6360CA7AFDA199B626AD3FD5FE8BB131A156FF8FC27BA685AC0D261BBA3D45FF7EEEBBDB6C2856D6649BC938E7FD9551EA4F1762FFD3067D777E5F16F3DF9AC8FFDC3CBCCE57275C38916A4B79FFE58EB05EE4FE27F77EFE73EC634E5EFF2FF37EB94ACA3AB0A35C7F4668A6BB50F57F109A6921B5C19C0A19FEAD595D4CBC67CE9C6C335F0EA0A83F5D88FC7BE7E106ED366CC6C092C8BFAF37C16DF6FE630E982C29D67F6A4F37B2FA1FCC7F8E81ECC9E6BF9FFBD3C98CBBA7574E2A1953AC3F8EB40665358966BA0555FF07A19916521ACC691361A1F4607D3151B0AC09FDBBF7EB9E376EEA4F1798FF5A22FFD96DAD5C21B5A6BAFF22BD0B917F1A86EE50FFB554FDD34C77617DFEEF87665A483A989C8DED0B9B89968B7FE77ABEBD2F09C7B57630FFB544FEB33D9766DA9AD2FCE78FF0F5637DFE537FAC59ADFFF400E654FD5F5B0B8C4D1356E7FF0168A685E49B099B474F22FFE96DDD6E3C78DF9629DB3713B080F9AF259DFF5123978E073427AF3F9CC0E849EC7F72CF6DDEFD88FDC70D1BFFF9257BF2FA335338FE09C783B16943D5FF4168A6858483E9170857E6BA922EA669035FDC33FFADD9B399407B98FF5AF2F91FFC01A631D47E5B72FF5C0DED49E6DFD7FD65FE330ED664FEFD09BCD93F2752CDC9EBCF4CF1F8C7D5A6656DB037B7A0EAFF20E5661ABAD07A30611FF8D7827F2DF8D7827F2DF8D7827F2DF8D7827F2DADFDD34C0B613169C1BF16FC6BC1BF16FC6BC1BF16FC6BC1BF16FC6B69ED9F665A088B490BFEB5E05F0BFEB5E05F0BFEB5E05F0BFEB5E05F4B6BFF34D342584C5AF0AF05FF5AF0AF05FF5AF0AF05FF5AF0AF05FF5A5AFBA79916C262D2827F2DF8D7827F2DF8D7827F2DF8D7827F2DF8D7D2DA3FCDB410169316FC6BC1BF16FC6BC1BF16FC6BC1BF16FC6BC1BF96D6FE6FDC13124208218410420821EF3D2DB9F9F4E9D34034718359FA3CE913FC6B837F6DF0AF0DFEB5C1BF36F8D706FFDAE05F1BE7BF2534D3C2B098B4C1BF36F8D706FFDAE05F1BFC6B837F6DF0AF0DFEB571FE5B42332D0C8B491BFC6B837F6DF0AF0DFEB5C1BF36F8D706FFDAE05F1BE7BF2534D3C2B098B4C1BF36F8D706FFDAE05F1BFC6B837F6DF0AF0DFEB571FE5B526EA65F1E87DBD3FDF05CFA1A69966C3179EFA7E134E7FE39F81A699ECCFFF3FDD9FDE9743B3CBE045F23CD53DD4CA83F5D72ADFE9C6E1F8797F0EBA469F2F9FF323CDE5EFCDF3EBE245F272D13F98F6A3F63D023EBF587FDD73AABFEA9FDE6C9EBFF9CE2F14FB837706CD422CE7F4B0ACDF4F370CF807549BC9826EFE706DA6FEE6C289689FCFB0216F8F6FE590396A96D26CFF7D49F1EC9FCBB397FFF1C7F8E9825F5EFE7FD72109BD623D23CB5FAE343FD374FEC3F3EFE7979BCC5BF714AFE979347DE3F7B8169CAF5A7DC7FF9BD611E8FF0DFE4789CFF9644CDF454C0C605757F5F3833425A275A4C6EF38ECE064E67A2B83A6D9772315BE28A1A07B39629FAF7EBE096FAD321A97FB7497325AE5F62FFD49BDEA9D7FFB8B1233689FC6757E3580FD6C1BF3669FDA9F75FC95814AF5C93BD71FE5B1237D3CFCFC1597106CB3AF5CDDC850DDD3A6BFE7D61E35627D3E4FEDD09A4B1EE507FBA24F6EFDC73F0D433917FE67CF7D4EA3FB5BF4FF2FA93DC99C7189866BDFED04C5B27AD3FD5FE8BB13189F3DF12DE332D4C6D33776143B74FD1BF9FFBEE361B8A9575B2CD649CF3FECA28F5A74B62FFD3067D7B7E5F16F3DF3A91FFB979789EAF4EB87022D536E5FD973BC27A25F73FB9F7F39F631FF3E4F5FF32EF97ABA4AC03BB94EBCF189AE92E71FE5B42332D4C6D314D850CFFD6A9163317DE33679E6C335F0EA0A83F5D12F9F7CEC30DDA6DD88C816522FFBEDE04B7D9FB8F3960B24CB1FE537BBA25ABFFC1FCE718C83ED9FCF7737F3A9971FBF8CC4925E314EB8F4B5A83B29A4433DD22CE7F4B68A685292DA6691361A1F448B598F950B0AC13FA77EFD73D6FDCD49F2E61FE6B13F9CF6E6BE50AA975AAFB2F7FDCA74B22FF340CDD43FDD7A6EA9F66BA4B9CFF96D04C0B932E26CEC6F60D9B893617FFCEF57C7B5F129A09BB30FFB589FC677B2ECDB4754AF39F3FC2D72FEBF39FFA639DD5FA4F0F609EAAFF6B6B81B16912E7BF2534D3C2E49B099B47CF44FED3DBBADD78F0BE2DD36CDF4C884598FFDAA4F33F6AE4D2F120CD93D71F4E60F44CEC7F72CF6DDEFD12FB8F1B36FEF34BF6C9EBCF9CC2F14F381E8C4D9B38FF2DA19916265C4C7E817065AE6BD262366DE08B7BE6BF75F66C26A47D98FFDAE4F33FF8034C63A8FDB6C9FD7335B46732FFBEEE2FF39F71B04EE6DF9FC09BFD7322D53C79FD99533CFE71B569591BECCD2DE2FCB7A4DC4C932EA92E26D225F8D706FFDAE05F1BFC6B837F6DF0AF0DFEB5C1BF36CE7F4B68A685613169837F6DF0AF0DFEB5C1BF36F8D706FFDAE05F1BFC6BE3FCB784665A18169336F8D706FFDAE05F1BFC6B837F6DF0AF0DFEB5C1BF36CE7F4B68A685613169837F6DF0AF0DFEB5C1BF36F8D706FFDAE05F1BFC6BE3FCB784665A18169336F8D706FFDAE05F1BFC6B837F6DF0AF0DFEB5C1BF36CE7F4B68A685613169837F6DF0AF0DFEB5C1BF36F8D706FFDAE05F1BFC6BE3FCB7E4C63D212184104208218410F2DED3929BF9FF4140EBC1847DE05F0BFEB5E05F0BFEB5E05F0BFEB5E05F0BFEB5B4F64F332D84C5A405FF5AF0AF05FF5AF0AF05FF5AF0AF05FF5AF0AFA5B57F9A69212C262DF8D7827F2DF8D7827F2DF8D7827F2DF8D7827F2DADFDD34C0B613169C1BF16FC6BC1BF16FC6BC1BF16FC6BC1BF16FC6B69ED9F665A088B490BFEB5E05F0BFEB5E05F0BFEB5E05F0BFEB5E05F4B6BFFE566FAF3D370777A185EE70FC1866C30BDF7D3709AF3C0009892F97F7D38BB3F9DEE86A7CFF3E7C1846A31A3FE74E15AFD39DD3D0D2C013BF2F9FF7978BABBF8BFA3009912F98F6A3F63D083F5FAC3FE6BCDAA7F6ABF3979FD9F291EFF847B03C7462DA8FA3F48A1997E1D1E18B02EC48339793F37D07E736743B124F2EF0B58E0DBFB670D58522B66AF0FD49F1E64FEDD9CE70C5E3752FF7EDE2F07B1693D82E6D4EA8F87FA6F4EEC3F3EFEF9FC74877F634AFE979347DE3F7B8129E5FA53EEBFFCDE308F47F86F38CE6AFD3F40D44C4F056C5C500F0F853323D09A6830DDE61D9D0D9CCE44B166EC585F4CAEA871306B49D1BF5F0777D49F0EA4FEDD26CD95B87EC4FEA937BDA9D7FFB8B1031B22FFD9D538D68335F8D792D69F7AFF958C45F1CA35ECA55EFF8F1137D3AFAFC1597106CB9AF5C16443B766CDBF2F6CDCEA644AEEDF9D401AEB0EF5A70BB17FE79E83A79E44FE99F3DDA9D57F6A7F1FF2FA93DC99C71898B25E7F68A6AD49EB4FB5FF626C4CA8D5FFA3F09E69216B83C9866E4FD1BF9FFBEE361B8A9535D96632CE797F6594FAD385D8FFB441DF9DDF97C5FCB726F23F370FAFF3D509174EA4DA52DE7FB923AC17B9FFC9BD9FFF1CFB9893D7FFCBBC5FAE92B20EEC28D79F119AE92E54FD1F84665A486D30A742867F6B561713EF993327DBCC970328EA4F1722FFDE79B841BB0D9B31B024F2EFEB4D709BBDFF9803264B8AF59FDAD38DACFE07F39F63207BB2F9EFE7FE7432E3EEE995934AC614EB8F23AD41594DA2996E41D5FF4168A685940673DA4458283D585F4C142C6B42FFEEFDBAE78D9BFAD305E6BF96C87F765B2B5748ADA9EEBF48EF42E49F86A13BD47F2D55FF34D35D589FFFFBA19916920E266763FBC266A2E5E2DFB99E6FEF4BC271AD1DCC7F2D91FF6CCFA599B6A634FFF9237CFD589FFFD41F6B56EB3F3D803955FFD7D60263D384D5F97F009A6921F966C2E6D193C87F7A5BB71B0FDEB765CAF6CD042C60FE6B49E77FD4C8A5E301CDC9EB0F27307A12FB9FDC739B773F62FF71C3C67F7EC99EBCFECC148E7FC2F1606CDA50F57F109A6921E160FA05C295B9AEA48B69DAC017F7CC7F6BF66C26D01EE6BF967CFE077F80690CB5DF96DC3F57437B92F9F7757F99FF8C8335997F7F026FF6CF895473F2FA33533CFE71B569591BECCD2DA8FA3F48B999862EB41E4CD807FEB5E05F0BFEB5E05F0BFEB5E05F0BFEB5E05F4B6BFF34D342584C5AF0AF05FF5AF0AF05FF5AF0AF05FF5AF0AF05FF5A5AFBA79916C262D2827F2DF8D7827F2DF8D7827F2DF8D7827F2DF8D7D2DA3FCDB410169316FC6BC1BF16FC6BC1BF16FC6BC1BF16FC6BC1BF96D6FE69A685B098B4E05F0BFEB5E05F0BFEB5E05F0BFEB5E05F0BFEB5B4F67FE39E90104208218410420879EF69C9CDA74F9F06A2891BCCD2E7499FE05F1BFC6B837F6DF0AF0DFEB5C1BF36F8D706FFDA38FF2DA1991686C5A40DFEB5C1BF36F8D706FFDAE05F1BFC6B837F6DF0AF8DF3DF129A6961584CDAE05F1BFC6B837F6DF0AF0DFEB5C1BF36F8D706FFDA38FF2DA1991686C5A40DFEB5C1BF36F8D706FFDAE05F1BFC6B837F6DF0AF8DF3DF129A6961584CDAE05F1BFC6B837F6DF0AF0DFEB5C1BF36F8D706FFDA38FF2D2937D32F8FC3EDE97E782E7D8D344BB698BCF7D3709A73FF1C7C8D344FE6FFF9FEECFE74BA1D1E5F82AF91E6A96E26D49F2EB9567F4EB78FC34BF875D234F9FC7F191E6F2FFE6F1F5F92AF939689FC47B59F31E891F5FAC3FE6B9D55FFD47EF3E4F57F4EF1F827DC1B38366A11E7BF258566FA79B867C0BA245E4C93F77303ED37773614CB44FE7D010B7C7BFFAC01CBD43693E77BEA4F8F64FEDD9CBF7F8E3F47CC92FAF7F37E39884DEB11699E5AFDF1A1FE9B27F61F1FFFBC3CDEE2DF3825FFCBC923EF9FBDC034E5FA53EEBFFCDE308F47F86F723CCE7F4BA2667A2A60E382BABF2F9C1921AD132D26B779476703A733515C9DB64BB9982D71458D8359CB14FDFB75704BFDE990D4BFDBA4B912D72FB17FEA4DEFD4EB7FDCD8119B44FEB3AB71AC07EBE05F9BB4FED4FBAF642C8A57AEC9DE38FF2D899BE9E7E7E0AC3883659DFA66EEC2866E9D35FFBEB071AB936972FFEE04D25877A83F5D12FB77EE3978EA99C83F73BE7B6AF59FDADF2779FD49EECC630C4CB35E7F68A6AD93D69F6AFFC5D898C4F96F09EF9916A6B699BBB0A1DBA7E8DFCF7D779B0DC5CA3AD96632CE797F6594FAD325B1FF6983BE3DBF2F8BF96F9DC8FFDC3C3CCF57275C38916A9BF2FECB1D61BD92FB9FDCFBF9CFB18F79F2FA7F99F7CB5552D6815DCAF5670CCD749738FF2DA19916A6B698A642867FEB548B990BEF99334FB6992F0750D49F2E89FC7BE7E106ED366CC6C032917F5F6F82DBECFDC71C3059A658FFA93DDD92D5FF60FE730C649F6CFEFBB93F9DCCB87D7CE6A492718AF5C725AD41594DA2996E11E7BF2534D3C29416D3B489B0507AA45ACC7C2858D609FDBBF7EB9E376EEA4F9730FFB589FC67B7B57285D43AD5FD973FEED325917F1A86EEA1FE6B53F54F33DD25CE7F4B68A6854917136763FB86CD449B8B7FE77ABEBD2F09CD845D98FFDA44FEB33D9766DA3AA5F9CF1FE1EB97F5F94FFDB1CE6AFDA707304FD5FFB5B5C0D83489F3DF129A6961F2CD84CDA36722FFE96DDD6E3C78DF9669B66F26C422CC7F6DD2F91F3572E97890E6C9EB0F27307A26F63FB9E736EF7E89FDC70D1BFFF925FBE4F5674EE1F8271C0FC6A64D9CFF96D04C0B132E26BF40B832D73569319B36F0C53DF3DF3A7B3613D23ECC7F6DF2F91FFC01A631D47EDBE4FEB91ADA33997F5FF797F9CF385827F3EF4FE0CDFE39916A9EBCFECC291EFFB8DAB4AC0DF6E61671FE5B526EA64997541713E912FC6B837F6DF0AF0DFEB5C1BF36F8D706FFDAE05F1BE7BF2534D3C2B098B4C1BF36F8D706FFDAE05F1BFC6B837F6DF0AF0DFEB571FE5B42332D0C8B491BFC6B837F6DF0AF0DFEB5C1BF36F8D706FFDAE05F1BE7BF2534D3C2B098B4C1BF36F8D706FFDAE05F1BFC6B837F6DF0AF0DFEB571FE5B42332D0C8B491BFC6B837F6DF0AF0DFEB5C1BF36F8D706FFDAE05F1BE7BF2534D3C2B098B4C1BF36F8D706FFDAE05F1BFC6B837F6DF0AF0DFEB571FE5B72E39E90104208218410420879EF69C9CDFCFF20A0F560C23EF0AF05FF5AF0AF05FF5AF0AF05FF5AF0AF05FF5A5AFBA79916C262D2827F2DF8D7827F2DF8D7827F2DF8D7827F2DF8D7D2DA3FCDB410169316FC6BC1BF16FC6BC1BF16FC6BC1BF16FC6BC1BF96D6FE69A685B098B4E05F0BFEB5E05F0BFEB5E05F0BFEB5E05F0BFEB5B4F65F6EA63F3F0D77A787E175FE106CC806D37B3F0DA7390F0C802999FFD787B3FBD3E96E78FA3C7F1E4CA81633EA4F17AED59FD3DDD3C012B0239FFF9F87A7BB8BFF3B0A902991FFA8F633063D58AF3FECBFD6ACFAA7F69B93D7FF99E2F14FB837706CD482AAFF83149AE9D7E18101EB423C9893F77303ED377736144B22FFBE8005BEBD7FD68025B562F6FA40FDE941E6DFCD79CEE07523F5EFE7FD72109BD623684EADFE78A8FFE6C4FEE3E39FCF4F77F837A6E47F3979E4FDB3179852AE3FE5FECBEF0DF37884FF86E3ACD6FF0344CDF454C0C605F5F050383302AD8906D36DDED1D9C0E94C146BC68EF5C5E48A1A07B39614FDFB757047FDE940EADF6DD25C89EB47EC9F7AD39B7AFD8F1B3BB021F29F5D8D633D58837F2D69FDA9F75FC95814AF5CC35EEAF5FF187133FDFA1A9C1567B0AC591F4C36746BD6FCFBC2C6AD4EA6E4FEDD09A4B1EE507FBA10FB77EE3978EA49E49F39DF9D5AFDA7F6F721AF3FC99D798C8129EBF58766DA9AB4FE54FB2FC6C6845AFD3F0AEF9916B236986CE8F614FDFBB9EF6EB3A15859936D26E39CF75746A93F5D88FD4F1BF4DDF97D59CC7F6B22FF73F3F03A5F9D70E144AA2DE5FD973BC27A91FB9FDCFBF9CFB18F3979FDBFCCFBE52A29EBC08E72FD19A199EE42D5FF4168A685D406732A64F8B7667531F19E3973B2CD7C3980A2FE7421F2EF9D871BB4DBB019034B22FFBEDE04B7D9FB8F3960B2A458FFA93DDDC8EA7F30FF3906B2279BFF7EEE4F2733EE9E5E39A9644CB1FE38D21A94D5249AE91654FD1F84665A486930A74D8485D283F5C544C1B226F4EFDEAF7BDEB8A93F5D60FE6B89FC67B7B57285D49AEAFE8BF42E44FE6918BA43FDD752F54F33DD85F5F9BF1F9A6921E9607236B62F6C265A2EFE9DEBF9F6BE241CD7DAC1FCD712F9CFF65C9A696B4AF39F3FC2D78FF5F94FFDB166B5FED3039853F57F6D2D30364D589DFF07A09916926F266C1E3D89FCA7B775BBF1E07D5BA66CDF4CC002E6BF9674FE478D5C3A1ED09CBCFE7002A327B1FFC93DB779F723F61F376CFCE797ECC9EBCF4CE1F8271C0FC6A60D55FF07A19916120EA65F205C99EB4ABA98A60D7C71CFFCB766CF6602ED61FE6BC9E77FF00798C650FB6DC9FD7335B427997F5FF797F9CF385893F9F727F066FF9C483527AF3F33C5E31F579B96B5C1DEDC82AAFF83949B69E842EBC1847DE05F0BFEB5E05F0BFEB5E05F0BFEB5E05F0BFEB5B4F64F332D84C5A405FF5AF0AF05FF5AF0AF05FF5AF0AF05FF5AF0AFA5B57F9A69212C262DF8D7827F2DF8D7827F2DF8D7827F2DF8D7827F2DADFDD34C0B613169C1BF16FC6BC1BF16FC6BC1BF16FC6BC1BF16FC6B69ED9F665A088B490BFEB5E05F0BFEB5E05F0BFEB5E05F0BFEB5E05F4B6BFF34D342584C5AF0AF05FF5AF0AF05FF5AF0AF05FF5AF0AF05FF5A5AFBBF714F480821841042082184BCF7B4E4E6D3A74F03D1C40D66E9F3A44FF0AF0DFEB5C1BF36F8D706FFDAE05F1BFC6B837F6D9CFF96D04C0BC362D206FFDAE05F1BFC6B837F6DF0AF0DFEB5C1BF36F8D7C6F96F09CDB4302C266DF0AF0DFEB5C1BF36F8D706FFDAE05F1BFC6B837F6D9CFF96D04C0BC362D206FFDAE05F1BFC6B837F6DF0AF0DFEB5C1BF36F8D7C6F96F09CDB4302C266DF0AF0DFEB5C1BF36F8D706FFDAE05F1BFC6B837F6D9CFF96949BE997C7E1F6743F3C97BE469A255B4CDEFB6938CDB97F0EBE469A27F3FF7C7F767F3ADD0E8F2FC1D748F3543713EA4F975CAB3FA7DBC7E125FC3A699A7CFEBF0C8FB717FFB78F2FC9D749CB44FEA3DACF18F4C87AFD61FFB5CEAA7F6ABF79F2FA3FA778FC13EE0D1C1BB588F3DF924233FD3CDC33605D122FA6C9FBB981F69B3B1B8A6522FFBE8005BEBD7FD680656A9BC9F33DF5A74732FF6ECEDF3FC79F236649FDFB79BF1CC4A6F588344FADFEF850FFCD13FB8F8F7F5E1E6FF16F9C92FFE5E491F7CF5E609A72FD29F75F7E6F98C723FC37391EE7BF2551333D15B07141DDDF17CE8C90D6891693DBBCA3B381D39928AE4EDBA55CCC96B8A2C6C1AC658AFEFD3AB8A5FE7448EADF6DD25C89EB97D83FF5A677EAF53F6EEC884D22FFD9D538D68375F0AF4D5A7FEAFD573216C52BD7646F9CFF96C4CDF4F37370569CC1B24E7D33776143B7CE9A7F5FD8B8D5C934B97F770269AC3BD49F2E89FD3BF71C3CF54CE49F39DF3DB5FA4FEDEF93BCFE2477E63106A659AF3F34D3D649EB4FB5FF626C4CE2FCB784F74C0B53DBCC5DD8D0ED53F4EFE7BEBBCD8662659D6C3319E7BCBF324AFDE992D8FFB441DF9EDF97C5FCB74EE47F6E1E9EE7AB132E9C48B54D79FFE58EB05EC9FD4FEEFDFCE7D8C73C79FDBFCCFBE52A29EBC02EE5FA338666BA4B9CFF96D04C0B535B4C5321C3BF75AAC5CC85F7CC9927DBCC970328EA4F9744FEBDF37083761B36636099C8BFAF37C16DF6FE630E982C53ACFFD49E6EC9EA7F30FF3906B24F36FFFDDC9F4E66DC3E3E7352C938C5FAE392D6A0AC26D14CB788F3DF129A69614A8B69DA4458283D522D663E142CEB84FEDDFB75CF1B37F5A74B98FFDA44FEB3DB5AB9426A9DEAFECB1FF7E992C83F0D43F750FFB5A9FAA799EE12E7BF2534D3C2A48B89B3B17DC366A2CDC5BF733DDFDE978466C22ECC7F6D22FFD99E4B336D9DD2FCE78FF0F5CBFAFCA7FE5867B5FED30398A7EAFFDA5A606C9AC4F96F09CDB430F966C2E6D13391FFF4B66E371EBC6FCB34DB37136211E6BF36E9FC8F1AB9743C48F3E4F58713183D13FB9FDC739B77BFC4FEE3868DFFFC927DF2FA33A770FC138E0763D326CE7F4B68A6850917935F205C99EB9AB4984D1BF8E29EF96F9D3D9B09691FE6BF36F9FC0FFE00D3186ABF6D72FF5C0DED99CCBFAFFBCBFC671CAC93F9F727F066FF9C48354F5E7FE6148F7F5C6D5AD6067B738B38FF2D2937D3A44BAA8B897409FEB5C1BF36F8D706FFDAE05F1BFC6B837F6DF0AF8DF3DF129A6961584CDAE05F1BFC6B837F6DF0AF0DFEB5C1BF36F8D706FFDA38FF2DA1991686C5A40DFEB5C1BF36F8D706FFDAE05F1BFC6B837F6DF0AF8DF3DF129A6961584CDAE05F1BFC6B837F6DF0AF0DFEB5C1BF36F8D706FFDA38FF2DA1991686C5A40DFEB5C1BF36F8D706FFDAE05F1BFC6B837F6DF0AF8DF3DF921BF7848410420821841042C87B4F4B6EE6FF0701AD0713F6817F2DF8D7827F2DF8D7827F2DF8D7827F2DF8D7D2DA3FCDB410169316FC6BC1BF16FC6BC1BF16FC6BC1BF16FC6BC1BF96D6FE69A685B098B4E05F0BFEB5E05F0BFEB5E05F0BFEB5E05F0BFEB5B4F64F332D84C5A405FF5AF0AF05FF5AF0AF05FF5AF0AF05FF5AF0AFA5B57F9A69212C262DF8D7827F2DF8D7827F2DF8D7827F2DF8D7827F2DADFD979BE9CF4FC3DDE961789D3F041BB2C1F4DE4FC369CE0303604AE6FFF5E1ECFE74BA1B9E3ECF9F0713AAC58CFAD3856BF5E774F734B004ECC8E7FFE7E1E9EEE2FF8E02644AE43FAAFD8C410FD6EB0FFBAF35ABFEA9FDE6E4F57FA678FC13EE0D1C1BB5A0EAFF208566FA757860C0BA100FE6E4FDDC40FBCD9D0DC592C8BF2F60816FEF9F356049AD98BD3E507F7A90F977739E3378DD48FDFB79BF1CC4A6F5089A53AB3F1EEABF39B1FFF8F8E7F3D31DFE8D29F95F4E1E79FFEC05A694EB4FB9FFF27BC33C1EE1BFE138ABF5FF0051333D15B071413D3C14CE8C406BA2C1749B777436703A13C59AB1637D31B9A2C6C1AC2545FF7E1DDC517F3A90FA779B3457E2FA11FBA7DEF4A65EFFE3C60E6C88FC6757E3580FD6E05F4B5A7FEAFD573216C52BD7B0977AFD3F46DC4CBFBE0667C5192C6BD607930DDD9A35FFBEB071AB9329B97F770269AC3BD49F2EC4FE9D7B0E9E7A12F967CE77A756FFA9FD7DC8EB4F72671E6360CA7AFDA199B626AD3FD5FE8BB131A156FF8FC27BA685AC0D261BBA3D45FF7EEEBBDB6C2856D6649BC938E7FD9551EA4F1762FFD3067D777E5F16F3DF9AC8FFDC3CBCCE57275C38916A4B79FFE58EB05EE4FE27F77EFE73EC634E5EFF2FF37EB94ACA3AB0A35C7F4668A6BB50F57F109A6921B5C19C0A19FEAD595D4CBC67CE9C6C335F0EA0A83F5D88FC7BE7E106ED366CC6C092C8BFAF37C16DF6FE630E982C29D67F6A4F37B2FA1FCC7F8E81ECC9E6BF9FFBD3C98CBBA7574E2A1953AC3F8EB40665358966BA0555FF07A19916521ACC691361A1F4607D3151B0AC09FDBBF7EB9E376EEA4F1798FF5A22FFD96DAD5C21B5A6BAFF22BD0B917F1A86EE50FFB554FDD34C77617DFEEF87665A483A989C8DED0B9B89968B7FE77ABEBD2F09C7B57630FFB544FEB33D9766DA9AD2FCE78FF0F5637DFE537FAC59ADFFF400E654FD5F5B0B8C4D1356E7FF0168A685E49B099B474F22FFE96DDD6E3C78DF9629DB3713B080F9AF259DFF5123978E073427AF3F9CC0E849EC7F72CF6DDEFD88FDC70D1BFFF9257BF2FA335338FE09C783B16943D5FF4168A6858483E9170857E6BA922EA669035FDC33FFADD9B399407B98FF5AF2F91FFC01A631D47E5B72FF5C0DED49E6DFD7FD65FE330ED664FEFD09BCD93F2752CDC9EBCF4CF1F8C7D5A6656DB037B7A0EAFF20E5661ABAD07A30611FF8D7827F2DF8D7827F2DF8D7827F2DF8D7827F2DADFDD34C0B613169C1BF16FC6BC1BF16FC6BC1BF16FC6BC1BF16FC6B69ED9F665A088B490BFEB5E05F0BFEB5E05F0BFEB5E05F0BFEB5E05F4B6BFF34D342584C5AF0AF05FF5AF0AF05FF5AF0AF05FF5AF0AF05FF5A5AFBA79916C262D2827F2DF8D7827F2DF8D7827F2DF8D7827F2DF8D7D2DA3FCDB410169316FC6BC1BF16FC6BC1BF16FC6BC1BF16FC6BC1BF96D6FE6FDC13124208218410420821EF3D2DB9F9F4E9D34034718359FA3CE913FC6B837F6DF0AF0DFEB5C1BF36F8D706FFDAE05F1BE7BF2534D3C2B098B4C1BF36F8D706FFDAE05F1BFC6B837F6DF0AF0DFEB571FE5B42332D0C8B491BFC6B837F6DF0AF0DFEB5C1BF36F8D706FFDAE05F1BE7BF2534D3C2B098B4C1BF36F8D706FFDAE05F1BFC6B837F6DF0AF0DFEB571FE5B526EA65F1E87DBD3FDF05CFA1A69966C3179EFA7E134E7FE39F81A699ECCFFF3FDD9FDE9743B3CBE045F23CD53DD4CA83F5D72ADFE9C6E1F8797F0EBA469F2F9FF323CDE5EFCDF3EBE245F272D13F98F6A3F63D023EBF587FDD73AABFEA9FDE6C9EBFF9CE2F14FB837706CD422CE7F4B0ACDF4F370CF807549BC9826EFE706DA6FEE6C289689FCFB0216F8F6FE590396A96D26CFF7D49F1EC9FCBB397FFF1C7F8E9825F5EFE7FD72109BD623D23CB5FAE343FD374FEC3F3EFE7979BCC5BF714AFE979347DE3F7B8169CAF5A7DC7FF9BD611E8FF0DFE4789CFF9644CDF454C0C605757F5F3833425A275A4C6EF38ECE064E67A2B83A6D9772315BE28A1A07B39629FAF7EBE096FAD321A97FB7497325AE5F62FFD49BDEA9D7FFB8B1233689FC6757E3580FD6C1BF3669FDA9F75FC95814AF5C93BD71FE5B1237D3CFCFC1597106CB3AF5CDDC850DDD3A6BFE7D61E35627D3E4FEDD09A4B1EE507FBA24F6EFDC73F0D433917FE67CF7D4EA3FB5BF4FF2FA93DC99C7189866BDFED04C5B27AD3FD5FE8BB13189F3DF12DE332D4C6D33776143B74FD1BF9FFBEE361B8A9575B2CD649CF3FECA28F5A74B62FFD3067D7B7E5F16F3DF3A91FFB979789EAF4EB87022D536E5FD973BC27A25F73FB9F7F39F631FF3E4F5FF32EF97ABA4AC03BB94EBCF189AE92E71FE5B42332D4C6D314D850CFFD6A9163317DE33679E6C335F0EA0A83F5D12F9F7CEC30DDA6DD88C816522FFBEDE04B7D9FB8F3960B24CB1FE537BBA25ABFFC1FCE718C83ED9FCF7737F3A9971FBF8CC4925E314EB8F4B5A83B29A4433DD22CE7F4B68A685292DA6691361A1F448B598F950B0AC13FA77EFD73D6FDCD49F2E61FE6B13F9CF6E6BE50AA975AAFB2F7FDCA74B22FF340CDD43FDD7A6EA9F66BA4B9CFF96D04C0B932E26CEC6F60D9B893617FFCEF57C7B5F129A09BB30FFB589FC677B2ECDB4754AF39F3FC2D72FEBF39FFA639DD5FA4F0F609EAAFF6B6B81B16912E7BF2534D3C2E49B099B47CF44FED3DBBADD78F0BE2DD36CDF4C884598FFDAA4F33F6AE4D2F120CD93D71F4E60F44CEC7F72CF6DDEFD12FB8F1B36FEF34BF6C9EBCF9CC2F14F381E8C4D9B38FF2DA19916265C4C7E817065AE6BD262366DE08B7BE6BF75F66C26A47D98FFDAE4F33FF8034C63A8FDB6C9FD7335B46732FFBEEE2FF39F71B04EE6DF9FC09BFD7322D53C79FD99533CFE71B569591BECCD2DE2FCB7A4DC4C932EA92E26D225F8D706FFDAE05F1BFC6B837F6DF0AF0DFEB5C1BF36CE7F4B68A685613169837F6DF0AF0DFEB5C1BF36F8D706FFDAE05F1BFC6BE3FCB784665A18169336F8D706FFDAE05F1BFC6B837F6DF0AF0DFEB5C1BF36CE7F4B68A685613169837F6DF0AF0DFEB5C1BF36F8D706FFDAE05F1BFC6BE3FCB784665A18169336F8D706FFDAE05F1BFC6B837F6DF0AF0DFEB5C1BF36CE7F4B68A685613169837F6DF0AF0DFEB5C1BF36F8D706FFDAE05F1BFC6BE3FCB7E4C63D212184104208218410F2DED3929BF9FF4140EBC1847DE05F0BFEB5E05F0BFEB5E05F0BFEB5E05F0BFEB5B4F64F332D84C5A405FF5AF0AF05FF5AF0AF05FF5AF0AF05FF5AF0AFA5B57F9A69212C262DF8D7827F2DF8D7827F2DF8D7827F2DF8D7827F2DADFDD34C0B613169C1BF16FC6BC1BF16FC6BC1BF16FC6BC1BF16FC6B69ED9F665A088B490BFEB5E05F0BFEB5E05F0BFEB5E05F0BFEB5E05F4B6BFFE566FAF3D370777A185EE70FC1866C30BDF7D3709AF3C0009892F97F7D38BB3F9DEE86A7CFF3E7C1846A31A3FE74E15AFD39DD3D0D2C013BF2F9FF7978BABBF8BFA3009912F98F6A3F63D083F5FAC3FE6BCDAA7F6ABF3979FD9F291EFF847B03C7462DA8FA3F48A1997E1D1E18B02EC48339793F37D07E736743B124F2EF0B58E0DBFB670D58522B66AF0FD49F1E64FEDD9CE70C5E3752FF7EDE2F07B1693D82E6D4EA8F87FA6F4EEC3F3EFEF9FC74877F634AFE979347DE3F7B8129E5FA53EEBFFCDE308F47F86F38CE6AFD3F40D44C4F056C5C500F0F853323D09A6830DDE61D9D0D9CCE44B166EC585F4CAEA871306B49D1BF5F0777D49F0EA4FEDD26CD95B87EC4FEA937BDA9D7FFB8B1031B22FFD9D538D68335F8D792D69F7AFF958C45F1CA35ECA55EFF8F1137D3AFAFC1597106CB9AF5C16443B766CDBF2F6CDCEA644AEEDF9D401AEB0EF5A70BB17FE79E83A79E44FE99F3DDA9D57F6A7F1FF2FA93DC99C71898B25E7F68A6AD49EB4FB5FF626C4CA8D5FFA3F09E69216B83C9866E4FD1BF9FFBEE361B8A9535D96632CE797F6594FAD385D8FFB441DF9DDF97C5FCB726F23F370FAFF3D509174EA4DA52DE7FB923AC17B9FFC9BD9FFF1CFB9893D7FFCBBC5FAE92B20EEC28D79F119AE92E54FD1F84665A486D30A742867F6B561713EF993327DBCC970328EA4F1722FFDE79B841BB0D9B31B024F2EFEB4D709BBDFF9803264B8AF59FDAD38DACFE07F39F63207BB2F9EFE7FE7432E3EEE995934AC614EB8F23AD41594DA2996E41D5FF4168A685940673DA4458283D585F4C142C6B42FFEEFDBAE78D9BFAD305E6BF96C87F765B2B5748ADA9EEBF48EF42E49F86A13BD47F2D55FF34D35D589FFFFBA19916920E266763FBC266A2E5E2DFB99E6FEF4BC271AD1DCC7F2D91FF6CCFA599B6A634FFF9237CFD589FFFD41F6B56EB3F3D803955FFD7D60263D384D5F97F009A6921F966C2E6D193C87F7A5BB71B0FDEB765CAF6CD042C60FE6B49E77FD4C8A5E301CDC9EB0F27307A12FB9FDC739B773F62FF71C3C67F7EC99EBCFECC148E7FC2F1606CDA50F57F109A6921E160FA05C295B9AEA48B69DAC017F7CC7F6BF66C26D01EE6BF967CFE077F80690CB5DF96DC3F57437B92F9F7757F99FF8C8335997F7F026FF6CF895473F2FA33533CFE71B569591BECCD2DA8FA3F48B999862EB41E4CD807FEB5E05F0BFEB5E05F0BFEB5E05F0BFEB5E05F4B6BFF34D342584C5AF0AF05FF5AF0AF05FF5AF0AF05FF5AF0AF05FF5A5AFBA79916C262D2827F2DF8D7827F2DF8D7827F2DF8D7827F2DF8D7D2DA3FCDB410169316FC6BC1BF16FC6BC1BF16FC6BC1BF16FC6BC1BF96D6FE69A685B098B4E05F0BFEB5E05F0BFEB5E05F0BFEB5E05F0BFEB5B4F67FE39E90104208218410420879EF69C9CDA74F9F06A2891BCCD2E7499FE05F1BFC6B837F6DF0AF0DFEB5C1BF36F8D706FFDA38FF2DA1991686C5A40DFEB5C1BF36F8D706FFDAE05F1BFC6B837F6DF0AF8DF3DF129A6961584CDAE05F1BFC6B837F6DF0AF0DFEB5C1BF36F8D706FFDA38FF2DA1991686C5A40DFEB5C1BF36F8D706FFDAE05F1BFC6B837F6DF0AF8DF3DF129A6961584CDAE05F1BFC6B837F6DF0AF0DFEB5C1BF36F8D706FFDA38FF2D2937D32F8FC3EDE97E782E7D8D344BB698BCF7D3709A73FF1C7C8D344FE6FFF9FEECFE74BA1D1E5F82AF91E6A96E26D49F2EB9567F4EB78FC34BF875D234F9FC7F191E6F2FFE6F1F5F92AF939689FC47B59F31E891F5FAC3FE6B9D55FFD47EF3E4F57F4EF1F827DC1B38366A11E7BF258566FA79B867C0BA245E4C93F77303ED37773614CB44FE7D010B7C7BFFAC01CBD43693E77BEA4F8F64FEDD9CBF7F8E3F47CC92FAF7F37E39884DEB11699E5AFDF1A1FE9B27F61F1FFFBC3CDEE2DF3825FFCBC923EF9FBDC034E5FA53EEBFFCDE308F47F86F723CCE7F4BA2667A2A60E382BABF2F9C1921AD132D26B779476703A733515C9DB64BB9982D71458D8359CB14FDFB75704BFDE990D4BFDBA4B912D72FB17FEA4DEFD4EB7FDCD8119B44FEB3AB71AC07EBE05F9BB4FED4FBAF642C8A57AEC9DE38FF2D899BE9E7E7E0AC3883659DFA66EEC2866E9D35FFBEB071AB936972FFEE04D25877A83F5D12FB77EE3978EA99C83F73BE7B6AF59FDADF2779FD49EECC630C4CB35E7F68A6AD93D69F6AFFC5D898C4F96F09EF9916A6B699BBB0A1DBA7E8DFCF7D779B0DC5CA3AD96632CE797F6594FAD325B1FF6983BE3DBF2F8BF96F9DC8FFDC3C3CCF57275C38916A9BF2FECB1D61BD92FB9FDCFBF9CFB18F79F2FA7F99F7CB5552D6815DCAF5670CCD749738FF2DA19916A6B698A642867FEB548B990BEF99334FB6992F0750D49F2E89FC7BE7E106ED366CC6C032917F5F6F82DBECFDC71C3059A658FFA93DDD92D5FF60FE730C649F6CFEFBB93F9DCCB87D7CE6A492718AF5C725AD41594DA2996E11E7BF2534D3C29416D3B489B0507AA45ACC7C2858D609FDBBF7EB9E376EEA4F9730FFB589FC67B7B57285D43AD5FD973FEED325917F1A86EEA1FE6B53F54F33DD25CE7F4B68A6854917136763FB86CD449B8B7FE77ABEBD2F09CD845D98FFDA44FEB33D9766DA3AA5F9CF1FE1EB97F5F94FFDB1CE6AFDA707304FD5FFB5B5C0D83489F3DF129A6961F2CD84CDA36722FFE96DDD6E3C78DF9669B66F26C422CC7F6DD2F91F3572E97890E6C9EB0F27307A26F63FB9E736EF7E89FDC70D1BFFF925FBE4F5674EE1F8271C0FC6A64D9CFF96D04C0B132E26BF40B832D73569319B36F0C53DF3DF3A7B3613D23ECC7F6DF2F91FFC01A631D47EDBE4FEB91ADA33997F5FF797F9CF385827F3EF4FE0CDFE39916A9EBCFECC291EFFB8DAB4AC0DF6E61671FE5B526EA64997541713E912FC6B837F6DF0AF0DFEB5C1BF36F8D706FFDAE05F1BE7BF2534D3C2B098B4C1BF36F8D706FFDAE05F1BFC6B837F6DF0AF0DFEB571FE5B42332D0C8B491BFC6B837F6DF0AF0DFEB5C1BF36F8D706FFDAE05F1BE7BF2534D3C2B098B4C1BF36F8D706FFDAE05F1BFC6B837F6DF0AF0DFEB571FE5B42332D0C8B491BFC6B837F6DF0AF0DFEB5C1BF36F8D706FFDAE05F1BE7BF2534D3C2B098B4C1BF36F8D706FFDAE05F1BFC6B837F6DF0AF0DFEB571FE5B72E39E90104208218410420879EF69C9CDFCFF20A0F560C23EF0AF05FF5AF0AF05FF5AF0AF05FF5AF0AF05FF5A5AFBA79916C262D2827F2DF8D7827F2DF8D7827F2DF8D7827F2DF8D7D2DA3FCDB410169316FC6BC1BF16FC6BC1BF16FC6BC1BF16FC6BC1BF96D6FE69A685B098B4E05F0BFEB5E05F0BFEB5E05F0BFEB5E05F0BFEB5B4F65F6EA63F3F0D77A787E175FE106CC806D37B3F0DA7390F0C802999FFD787B3FBD3E96E78FA3C7F1E4CA81633EA4F17AED59FD3DDD3C012B0239FFF9F87A7BB8BFF3B0A902991FFA8F633063D58AF3FECBFD6ACFAA7F69B93D7FF99E2F14FB837706CD482AAFF83149AE9D7E18101EB423C9893F77303ED377736144B22FFBE8005BEBD7FD68025B562F6FA40FDE941E6DFCD79CEE07523F5EFE7FD72109BD623684EADFE78A8FFE6C4FEE3E39FCF4F77F837A6E47F3979E4FDB3179852AE3FE5FECBEF0DF37884FF86E3ACD6FF0344CDF454C0C605F5F050383302AD8906D36DDED1D9C0E94C146BC68EF5C5E48A1A07B39614FDFB757047FDE940EADF6DD25C89EB47EC9F7AD39B7AFD8F1B3BB021F29F5D8D633D58837F2D69FDA9F75FC95814AF5CC35EEAF5FF187133FDFA1A9C1567B0AC591F4C36746BD6FCFBC2C6AD4EA6E4FEDD09A4B1EE507FBA10FB77EE3978EA49E49F39DF9D5AFDA7F6F721AF3FC99D798C8129EBF58766DA9AB4FE54FB2FC6C6845AFD3F0AEF9916B236986CE8F614FDFBB9EF6EB3A15859936D26E39CF75746A93F5D88FD4F1BF4DDF97D59CC7F6B22FF73F3F03A5F9D70E144AA2DE5FD973BC27A91FB9FDCFBF9CFB18F3979FDBFCCFBE52A29EBC08E72FD19A199EE42D5FF4168A685D406732A64F8B7667531F19E3973B2CD7C3980A2FE7421F2EF9D871BB4DBB019034B22FFBEDE04B7D9FB8F3960B2A458FFA93DDDC8EA7F30FF3906B2279BFF7EEE4F2733EE9E5E39A9644CB1FE38D21A94D5249AE91654FD1F84665A486930A74D8485D283F5C544C1B226F4EFDEAF7BDEB8A93F5D60FE6B89FC67B7B57285D49AEAFE8BF42E44FE6918BA43FDD752F54F33DD85F5F9BF1F9A6921E9607236B62F6C265A2EFE9DEBF9F6BE241CD7DAC1FCD712F9CFF65C9A696B4AF39F3FC2D78FF5F94FFDB166B5FED3039853F57F6D2D30364D589DFF07A09916926F266C1E3D89FCA7B775BBF1E07D5BA66CDF4CC002E6BF9674FE478D5C3A1ED09CBCFE7002A327B1FFC93DB779F723F61F376CFCE797ECC9EBCF4CE1F8271C0FC6A60D55FF07A19916120EA65F205C99EB4ABA98A60D7C71CFFCB766CF6602ED61FE6BC9E77FF00798C650FB6DC9FD7335B427997F5FF797F9CF385893F9F727F066FF9C483527AF3F33C5E31F579B96B5C1DEDC82AAFF83949B69E842EBC1847DE05F0BFEB5E05F0BFEB5E05F0BFEB5E05F0BFEB5B4F64F332D84C5A405FF5AF0AF05FF5AF0AF05FF5AF0AF05FF5AF0AFA5B57F9A69212C262DF8D7827F2DF8D7827F2DF8D7827F2DF8D7827F2DADFDD34C0B613169C1BF16FC6BC1BF16FC6BC1BF16FC6BC1BF16FC6B69ED9F665A088B490BFEB5E05F0BFEB5E05F0BFEB5E05F0BFEB5E05F4B6BFF34D342584C5AF0AF05FF5AF0AF05FF5AF0AF05FF5AF0AF05FF5A5AFBBF714F480821841042082184BCF7B4E4E6D3A74F03D1C40D66E9F3A44FF0AF0DFEB5C1BF36F8D706FFDAE05F1BFC6B837F6D9CFF96D04C0BC362D206FFDAE05F1BFC6B837F6DF0AF0DFEB5C1BF36F8D7C6F96F09CDB4302C266DF0AF0DFEB5C1BF36F8D706FFDAE05F1BFC6B837F6D9CFF96D04C0BC362D206FFDAE05F1BFC6B837F6DF0AF0DFEB5C1BF36F8D7C6F96F09CDB4302C266DF0AF0DFEB5C1BF36F8D706FFDAE05F1BFC6B837F6D9CFF96949BE997C7E1F6743F3C97BE469A255B4CDEFB6938CDB97F0EBE469A27F3FF7C7F767F3ADD0E8F2FC1D748F3543713EA4F975CAB3FA7DBC7E125FC3A699A7CFEBF0C8FB717FFB78F2FC9D749CB44FEA3DACF18F4C87AFD61FFB5CEAA7F6ABF79F2FA3FA778FC13EE0D1C1BB588F3DF924233FD3CDC33605D122FA6C9FBB981F69B3B1B8A6522FFBE8005BEBD7FD680656A9BC9F33DF5A74732FF6ECEDF3FC79F236649FDFB79BF1CC4A6F588344FADFEF850FFCD13FB8F8F7F5E1E6FF16F9C92FFE5E491F7CF5E609A72FD29F75F7E6F98C723FC37391EE7BF2551333D15B07141DDDF17CE8C90D6891693DBBCA3B381D39928AE4EDBA55CCC96B8A2C6C1AC658AFEFD3AB8A5FE7448EADF6DD25C89EB97D83FF5A677EAF53F6EEC884D22FFD9D538D68375F0AF4D5A7FEAFD573216C52BD7646F9CFF96C4CDF4F37370569CC1B24E7D33776143B7CE9A7F5FD8B8D5C934B97F770269AC3BD49F2E89FD3BF71C3CF54CE49F39DF3DB5FA4FEDEF93BCFE2477E63106A659AF3F34D3D649EB4FB5FF626C4CE2FCB784F74C0B53DBCC5DD8D0ED53F4EFE7BEBBCD8662659D6C3319E7BCBF324AFDE992D8FFB441DF9EDF97C5FCB74EE47F6E1E9EE7AB132E9C48B54D79FFE58EB05EC9FD4FEEFDFCE7D8C73C79FDBFCCFBE52A29EBC02EE5FA338666BA4B9CFF96D04C0B535B4C5321C3BF75AAC5CC85F7CC9927DBCC970328EA4F9744FEBDF37083761B36636099C8BFAF37C16DF6FE630E982C53ACFFD49E6EC9EA7F30FF3906B24F36FFFDDC9F4E66DC3E3E7352C938C5FAE392D6A0AC26D14CB788F3DF129A69614A8B69DA4458283D522D663E142CEB84FEDDFB75CF1B37F5A74B98FFDA44FEB3DB5AB9426A9DEAFECB1FF7E992C83F0D43F750FFB5A9FAA799EE12E7BF2534D3C2A48B89B3B17DC366A2CDC5BF733DDFDE978466C22ECC7F6D22FFD99E4B336D9DD2FCE78FF0F5CBFAFCA7FE5867B5FED30398A7EAFFDA5A606C9AC4F96F09CDB430F966C2E6D13391FFF4B66E371EBC6FCB34DB37136211E6BF36E9FC8F1AB9743C48F3E4F58713183D13FB9FDC739B77BFC4FEE3868DFFFC927DF2FA33A770FC138E0763D326CE7F4B68A6850917935F205C99EB9AB4984D1BF8E29EF96F9D3D9B09691FE6BF36F9FC0FFE00D3186ABF6D72FF5C0DED99CCBFAFFBCBFC671CAC93F9F727F066FF9C48354F5E7FE6148F7F5C6D5AD6067B738B38FF2D2937D3A44BAA8B897409FEB5C1BF36F8D706FFDAE05F1BFC6B837F6DF0AF8DF3DF129A6961584CDAE05F1BFC6B837F6DF0AF0DFEB5C1BF36F8D706FFDA38FF2DA1991686C5A40DFEB5C1BF36F8D706FFDAE05F1BFC6B837F6DF0AF8DF3DF129A6961584CDAE05F1BFC6B837F6DF0AF0DFEB5C1BF36F8D706FFDA38FF2DA1991686C5A40DFEB5C1BF36F8D706FFDAE05F1BFC6B837F6DF0AF8DF3DF921BF7848410420821841042C87B4F4B6EE6FF0701AD0713F6817F2DF8D7827F2DF8D7827F2DF8D7827F2DF8D7D2DA3FCDB410169316FC6BC1BF16FC6BC1BF16FC6BC1BF16FC6BC1BF96D6FE69A685B098B4E05F0BFEB5E05F0BFEB5E05F0BFEB5E05F0BFEB5B4F64F332D84C5A405FF5AF0AF05FF5AF0AF05FF5AF0AF05FF5AF0AFA5B57F9A69212C262DF8D7827F2DF8D7827F2DF8D7827F2DF8D7827F2DADFD979BE9CF4FC3DDE961789D3F041BB2C1F4DE4FC369CE0303604AE6FFF5E1ECFE74BA1B9E3ECF9F0713AAC58CFAD3856BF5E774F734B004ECC8E7FFE7E1E9EEE2FF8E02644AE43FAAFD8C410FD6EB0FFBAF35ABFEA9FDE6E4F57FA678FC13EE0D1C1BB5A0EAFF208566FA757860C0BA100FE6E4FDDC40FBCD9D0DC592C8BF2F60816FEF9F356049AD98BD3E507F7A90F977739E3378DD48FDFB79BF1CC4A6F5089A53AB3F1EEABF39B1FFF8F8E7F3D31DFE8D29F95F4E1E79FFEC05A694EB4FB9FFF27BC33C1EE1BFE138ABF5FF0051333D15B071413D3C14CE8C406BA2C1749B777436703A13C59AB1637D31B9A2C6C1AC2545FF7E1DDC517F3A90FA779B3457E2FA11FBA7DEF4A65EFFE3C60E6C88FC6757E3580FD6E05F4B5A7FEAFD573216C52BD7B0977AFD3F46DC4CBFBE0667C5192C6BD607930DDD9A35FFBEB071AB9329B97F770269AC3BD49F2EC4FE9D7B0E9E7A12F967CE77A756FFA9FD7DC8EB4F72671E6360CA7AFDA199B626AD3FD5FE8BB131A156FF8FC27BA685AC0D261BBA3D45FF7EEEBBDB6C2856D6649BC938E7FD9551EA4F1762FFD3067D777E5F16F3DF9AC8FFDC3CBCCE57275C38916A4B79FFE58EB05EE4FE27F77EFE73EC634E5EFF2FF37EB94ACA3AB0A35C7F4668A6BB50F57F109A6921B5C19C0A19FEAD595D4CBC67CE9C6C335F0EA0A83F5D88FC7BE7E106ED366CC6C092C8BFAF37C16DF6FE630E982C29D67F6A4F37B2FA1FCC7F8E81ECC9E6BF9FFBD3C98CBBA7574E2A1953AC3F8EB40665358966BA0555FF07A19916521ACC691361A1F4607D3151B0AC09FDBBF7EB9E376EEA4F1798FF5A22FFD96DAD5C21B5A6BAFF22BD0B917F1A86EE50FFB554FDD34C77617DFEEF87665A483A989C8DED0B9B89968B7FE77ABEBD2F09C7B57630FFB544FEB33D9766DA9AD2FCE78FF0F5637DFE537FAC59ADFFF400E654FD5F5B0B8C4D1356E7FF0168A685E49B099B474F22FFE96DDD6E3C78DF9629DB3713B080F9AF259DFF5123978E073427AF3F9CC0E849EC7F72CF6DDEFD88FDC70D1BFFF9257BF2FA335338FE09C783B16943D5FF4168A6858483E9170857E6BA922EA669035FDC33FFADD9B399407B98FF5AF2F91FFC01A631D47E5B72FF5C0DED49E6DFD7FD65FE330ED664FEFD09BCD93F2752CDC9EBCF4CF1F8C7D5A6656DB037B7A0EAFF20E5661ABAD07A30611FF8D7827F2DF8D7827F2DF8D7827F2DF8D7827F2DADFDD34C0B613169C1BF16FC6BC1BF16FC6BC1BF16FC6BC1BF16FC6B69ED9F665A088B490BFEB5E05F0BFEB5E05F0BFEB5E05F0BFEB5E05F4B6BFF34D342584C5AF0AF05FF5AF0AF05FF5AF0AF05FF5AF0AF05FF5A5AFBA79916C262D2827F2DF8D7827F2DF8D7827F2DF8D7827F2DF8D7D2DA3FCDB410169316FC6BC1BF16FC6BC1BF16FC6BC1BF16FC6BC1BF96D6FE6FDC13124208218410420821EF3D2DB9F9F4E9D34034718359FA3CE913FC6B837F6DF0AF0DFEB5C1BF36F8D706FFDAE05F1BE7BF2534D3C2B098B4C1BF36F8D706FFDAE05F1BFC6B837F6DF0AF0DFEB571FE5B42332D0C8B491BFC6B837F6DF0AF0DFEB5C1BF36F8D706FFDAE05F1BE7BF2534D3C2B098B4C1BF36F8D706FFDAE05F1BFC6B837F6DF0AF0DFEB571FE5B526EA65F1E87DBD3FDF05CFA1A69966C3179EFA7E134E7FE39F81A699ECCFFF3FDD9FDE9743B3CBE045F23CD53DD4CA83F5D72ADFE9C6E1F8797F0EBA469F2F9FF323CDE5EFCDF3EBE245F272D13F98F6A3F63D023EBF587FDD73AABFEA9FDE6C9EBFF9CE2F14FB837706CD422CE7F4B0ACDF4F370CF807549BC9826EFE706DA6FEE6C289689FCFB0216F8F6FE590396A96D26CFF7D49F1EC9FCBB397FFF1C7F8E9825F5EFE7FD72109BD623D23CB5FAE343FD374FEC3F3EFE7979BCC5BF714AFE979347DE3F7B8169CAF5A7DC7FF9BD611E8FF0DFE4789CFF9644CDF454C0C605757F5F3833425A275A4C6EF38ECE064E67A2B83A6D9772315BE28A1A07B39629FAF7EBE096FAD321A97FB7497325AE5F62FFD49BDEA9D7FFB8B1233689FC6757E3580FD6C1BF3669FDA9F75FC95814AF5C93BD71FE5B1237D3CFCFC1597106CB3AF5CDDC850DDD3A6BFE7D61E35627D3E4FEDD09A4B1EE507FBA24F6EFDC73F0D433917FE67CF7D4EA3FB5BF4FF2FA93DC99C7189866BDFED04C5B27AD3FD5FE8BB13189F3DF12DE332D4C6D33776143B74FD1BF9FFBEE361B8A9575B2CD649CF3FECA28F5A74B62FFD3067D7B7E5F16F3DF3A91FFB979789EAF4EB87022D536E5FD973BC27A25F73FB9F7F39F631FF3E4F5FF32EF97ABA4AC03BB94EBCF189AE92E71FE5B42332D4C6D314D850CFFD6A9163317DE33679E6C335F0EA0A83F5D12F9F7CEC30DDA6DD88C816522FFBEDE04B7D9FB8F3960B24CB1FE537BBA25ABFFC1FCE718C83ED9FCF7737F3A9971FBF8CC4925E314EB8F4B5A83B29A4433DD22CE7F4B68A685292DA6691361A1F448B598F950B0AC13FA77EFD73D6FDCD49F2E61FE6B13F9CF6E6BE50AA975AAFB2F7FDCA74B22FF340CDD43FDD7A6EA9F66BA4B9CFF96D04C0B932E26CEC6F60D9B893617FFCEF57C7B5F129A09BB30FFB589FC677B2ECDB4754AF39F3FC2D72FEBF39FFA639DD5FA4F0F609EAAFF6B6B81B16912E7BF2534D3C2E49B099B47CF44FED3DBBADD78F0BE2DD36CDF4C884598FFDAA4F33F6AE4D2F120CD93D71F4E60F44CEC7F72CF6DDEFD12FB8F1B36FEF34BF6C9EBCF9CC2F14F381E8C4D9B38FF2DA19916265C4C7E817065AE6BD262366DE08B7BE6BF75F66C26A47D98FFDAE4F33FF8034C63A8FDB6C9FD7335B46732FFBEEE2FF39F71B04EE6DF9FC09BFD7322D53C79FD99533CFE71B569591BECCD2DE2FCB7A4DC4C932EA92E26D225F8D706FFDAE05F1BFC6B837F6DF0AF0DFEB5C1BF36CE7F4B68A685613169837F6DF0AF0DFEB5C1BF36F8D706FFDAE05F1BFC6BE3FCB784665A18169336F8D706FFDAE05F1BFC6B837F6DF0AF0DFEB5C1BF36CE7F4B68A685613169837F6DF0AF0DFEB5C1BF36F8D706FFDAE05F1BFC6BE3FCB784665A18169336F8D706FFDAE05F1BFC6B837F6DF0AF0DFEB5C1BF36CE7F4B68A685613169837F6DF0AF0DFEB5C1BF36F8D706FFDAE05F1BFC6BE3FCB7E4C63D212184104208218410F2DED3929BF9FF4140EBC1847DE05F0BFEB5E05F0BFEB5E05F0BFEB5E05F0BFEB5B4F64F332D84C5A405FF5AF0AF05FF5AF0AF05FF5AF0AF05FF5AF0AFA5B57F9A69212C262DF8D7827F2DF8D7827F2DF8D7827F2DF8D7827F2DADFDD34C0B613169C1BF16FC6BC1BF16FC6BC1BF16FC6BC1BF16FC6B69ED9F665A088B490BFEB5E05F0BFEB5E05F0BFEB5E05F0BFEB5E05F4B6BFFE566FAF3D370777A185EE70FC1866C30BDF7D3709AF3C0009892F97F7D38BB3F9DEE86A7CFF3E7C1846A31A3FE74E15AFD39DD3D0D2C013BF2F9FF7978BABBF8BFA3009912F98F6A3F63D083F5FAC3FE6BCDAA7F6ABF3979FD9F291EFF847B03C7462DA8FA3F48A1997E1D1E18B02EC48339793F37D07E736743B124F2EF0B58E0DBFB670D58522B66AF0FD49F1E64FEDD9CE70C5E3752FF7EDE2F07B1693D82E6D4EA8F87FA6F4EEC3F3EFEF9FC74877F634AFE979347DE3F7B8129E5FA53EEBFFCDE308F47F86F38CE6AFD3F40D44C4F056C5C500F0F853323D09A6830DDE61D9D0D9CCE44B166EC585F4CAEA871306B49D1BF5F0777D49F0EA4FEDD26CD95B87EC4FEA937BDA9D7FFB8B1031B22FFD9D538D68335F8D792D69F7AFF958C45F1CA35ECA55EFF8F1137D3AFAFC1597106CB9AF5C16443B766CDBF2F6CDCEA644AEEDF9D401AEB0EF5A70BB17FE79E83A79E44FE99F3DDA9D57F6A7F1FF2FA93DC99C71898B25E7F68A6AD49EB4FB5FF626C4CA8D5FFA3F09E69216B83C9866E4FD1BF9FFBEE361B8A9535D96632CE797F6594FAD385D8FFB441DF9DDF97C5FCB726F23F370FAFF3D509174EA4DA52DE7FB923AC17B9FFC9BD9FFF1CFB9893D7FFCBBC5FAE92B20EEC28D79F119AE92E54FD1F84665A486D30A742867F6B561713EF993327DBCC970328EA4F1722FFDE79B841BB0D9B31B024F2EFEB4D709BBDFF9803264B8AF59FDAD38DACFE07F39F63207BB2F9EFE7FE7432E3EEE995934AC614EB8F23AD41594DA2996E41D5FF4168A685940673DA4458283D585F4C142C6B42FFEEFDBAE78D9BFAD305E6BF96C87F765B2B5748ADA9EEBF48EF42E49F86A13BD47F2D55FF34D35D589FFFFBA19916920E266763FBC266A2E5E2DFB99E6FEF4BC271AD1DCC7F2D91FF6CCFA599B6A634FFF9237CFD589FFFD41F6B56EB3F3D803955FFD7D60263D384D5F97F009A6921F966C2E6D193C87F7A5BB71B0FDEB765CAF6CD042C60FE6B49E77FD4C8A5E301CDC9EB0F27307A12FB9FDC739B773F62FF71C3C67F7EC99EBCFECC148E7FC2F1606CDA50F57F109A6921E160FA05C295B9AEA48B69DAC017F7CC7F6BF66C26D01EE6BF967CFE077F80690CB5DF96DC3F57437B92F9F7757F99FF8C8335997F7F026FF6CF895473F2FA33533CFE71B569591BECCD2DA8FA3F48B999862EB41E4CD807FEB5E05F0BFEB5E05F0BFEB5E05F0BFEB5E05F4B6BFF34D342584C5AF0AF05FF5AF0AF05FF5AF0AF05FF5AF0AF05FF5A5AFBA79916C262D2827F2DF8D7827F2DF8D7827F2DF8D7827F2DF8D7D2DA3FCDB410169316FC6BC1BF16FC6BC1BF16FC6BC1BF16FC6BC1BF96D6FE69A685B098B4E05F0BFEB5E05F0BFEB5E05F0BFEB5E05F0BFEB5B4F67FE39E90104208218410420879EF69C9CDA74F9F06A2891BCCD2E7499FE05F1BFC6B837F6DF0AF0DFEB5C1BF36F8D706FFDA38FF2DA1991686C5A40DFEB5C1BF36F8D706FFDAE05F1BFC6B837F6DF0AF8DF3DF129A6961584CDAE05F1BFC6B837F6DF0AF0DFEB5C1BF36F8D706FFDA38FF2DA1991686C5A40DFEB5C1BF36F8D706FFDAE05F1BFC6B837F6DF0AF8DF3DF129A6961584CDAE05F1BFC6B837F6DF0AF0DFEB5C1BF36F8D706FFDA38FF2D2937D32F8FC3EDE97E782E7D8D344BB698BCF7D3709A73FF1C7C8D344FE6FFF9FEECFE74BA1D1E5F82AF91E6A96E26D49F2EB9567F4EB78FC34BF875D234F9FC7F191E6F2FFE6F1F5F92AF939689FC47B59F31E891F5FAC3FE6B9D55FFD47EF3E4F57F4EF1F827DC1B38366A11E7BF258566FA79B867C0BA245E4C93F77303ED37773614CB44FE7D010B7C7BFFAC01CBD43693E77BEA4F8F64FEDD9CBF7F8E3F47CC92FAF7F37E39884DEB11699E5AFDF1A1FE9B27F61F1FFFBC3CDEE2DF3825FFCBC923EF9FBDC034E5FA53EEBFFCDE308F47F86F723CCE7F4BA2667A2A60E382BABF2F9C1921AD132D26B779476703A733515C9DB64BB9982D71458D8359CB14FDFB75704BFDE990D4BFDBA4B912D72FB17FEA4DEFD4EB7FDCD8119B44FEB3AB71AC07EBE05F9BB4FED4FBAF642C8A57AEC9DE38FF2D899BE9E7E7E0AC3883659DFA66EEC2866E9D35FFBEB071AB936972FFEE04D25877A83F5D12FB77EE3978EA99C83F73BE7B6AF59FDADF2779FD49EECC630C4CB35E7F68A6AD93D69F6AFFC5D898C4F96F09EF9916A6B699BBB0A1DBA7E8DFCF7D779B0DC5CA3AD96632CE797F6594FAD325B1FF6983BE3DBF2F8BF96F9DC8FFDC3C3CCF57275C38916A9BF2FECB1D61BD92FB9FDCFBF9CFB18F79F2FA7F99F7CB5552D6815DCAF5670CCD749738FF2DA19916A6B698A642867FEB548B990BEF99334FB6992F0750D49F2E89FC7BE7E106ED366CC6C032917F5F6F82DBECFDC71C3059A658FFA93DDD92D5FF60FE730C649F6CFEFBB93F9DCCB87D7CE6A492718AF5C725AD41594DA2996E11E7BF2534D3C29416D3B489B0507AA45ACC7C2858D609FDBBF7EB9E376EEA4F9730FFB589FC67B7B57285D43AD5FD973FEED325917F1A86EEA1FE6B53F54F33DD25CE7F4B68A6854917136763FB86CD449B8B7FE77ABEBD2F09CD845D98FFDA44FEB33D9766DA3AA5F9CF1FE1EB97F5F94FFDB1CE6AFDA707304FD5FFB5B5C0D83489F3DF129A6961F2CD84CDA36722FFE96DDD6E3C78DF9669B66F26C422CC7F6DD2F91F3572E97890E6C9EB0F27307A26F63FB9E736EF7E89FDC70D1BFFF925FBE4F5674EE1F8271C0FC6A64D9CFF96D04C0B132E26BF40B832D73569319B36F0C53DF3DF3A7B3613D23ECC7F6DF2F91FFC01A631D47EDBE4FEB91ADA33997F5FF797F9CF385827F3EF4FE0CDFE39916A9EBCFECC291EFFB8DAB4AC0DF6E61671FE5B526EA64997541713E912FC6B837F6DF0AF0DFEB5C1BF36F8D706FFDAE05F1BE7BF2534D3C2B098B4C1BF36F8D706FFDAE05F1BFC6B837F6DF0AF0DFEB571FE5B42332D0C8B491BFC6B837F6DF0AF0DFEB5C1BF36F8D706FFDAE05F1BE7BF2534D3C2B098B4C1BF36F8D706FFDAE05F1BFC6B837F6DF0AF0DFEB571FE5B42332D0C8B491BFC6B837F6DF0AF0DFEB5C1BF36F8D706FFDAE05F1BE7BF2534D3C2B098B4C1BF36F8D706FFDAE05F1BFC6B837F6DF0AF0DFEB571FE5B72E39E90104208218410420879EF69C9CDFCFF20A0F560C23EF0AF05FF5AF0AF05FF5AF0AF05FF5AF0AF05FF5A5AFBA79916C262D2827F2DF8D7827F2DF8D7827F2DF8D7827F2DF8D7D2DA3FCDB410169316FC6BC1BF16FC6BC1BF16FC6BC1BF16FC6BC1BF96D6FE69A685B098B4E05F0BFEB5E05F0BFEB5E05F0BFEB5E05F0BFEB5B4F65F6EA63F3F0D77A787E175FE106CC806D37B3F0DA7390F0C802999FFD787B3FBD3E96E78FA3C7F1E4CA81633EA4F17AED59FD3DDD3C012B0239FFF9F87A7BB8BFF3B0A902991FFA8F633063D58AF3FECBFD6ACFAA7F69B93D7FF99E2F14FB837706CD482AAFF83149AE9D7E18101EB423C9893F77303ED377736144B22FFBE8005BEBD7FD68025B562F6FA40FDE941E6DFCD79CEE07523F5EFE7FD72109BD623684EADFE78A8FFE6C4FEE3E39FCF4F77F837A6E47F3979E4FDB3179852AE3FE5FECBEF0DF37884FF86E3ACD6FF0344CDF454C0C605F5F050383302AD8906D36DDED1D9C0E94C146BC68EF5C5E48A1A07B39614FDFB757047FDE940EADF6DD25C89EB47EC9F7AD39B7AFD8F1B3BB021F29F5D8D633D58837F2D69FDA9F75FC95814AF5CC35EEAF5FF187133FDFA1A9C1567B0AC591F4C36746BD6FCFBC2C6AD4EA6E4FEDD09A4B1EE507FBA10FB77EE3978EA49E49F39DF9D5AFDA7F6F721AF3FC99D798C8129EBF58766DA9AB4FE54FB2FC6C6845AFD3F0AEF9916B236986CE8F614FDFBB9EF6EB3A15859936D26E39CF75746A93F5D88FD4F1BF4DDF97D59CC7F6B22FF73F3F03A5F9D70E144AA2DE5FD973BC27A91FB9FDCFBF9CFB18F3979FDBFCCFBE52A29EBC08E72FD19A199EE42D5FF4168A685D406732A64F8B7667531F19E3973B2CD7C3980A2FE7421F2EF9D871BB4DBB019034B22FFBEDE04B7D9FB8F3960B2A458FFA93DDDC8EA7F30FF3906B2279BFF7EEE4F2733EE9E5E39A9644CB1FE38D21A94D5249AE91654FD1F84665A486930A74D8485D283F5C544C1B226F4EFDEAF7BDEB8A93F5D60FE6B89FC67B7B57285D49AEAFE8BF42E44FE6918BA43FDD752F54F33DD85F5F9BF1F9A6921E9607236B62F6C265A2EFE9DEBF9F6BE241CD7DAC1FCD712F9CFF65C9A696B4AF39F3FC2D78FF5F94FFDB166B5FED3039853F57F6D2D30364D589DFF07A09916926F266C1E3D89FCA7B775BBF1E07D5BA66CDF4CC002E6BF9674FE478D5C3A1ED09CBCFE7002A327B1FFC93DB779F723F61F376CFCE797ECC9EBCF4CE1F8271C0FC6A60D55FF07A19916120EA65F205C99EB4ABA98A60D7C71CFFCB766CF6602ED61FE6BC9E77FF00798C650FB6DC9FD7335B427997F5FF797F9CF385893F9F727F066FF9C483527AF3F33C5E31F579B96B5C1DEDC82AAFF83949B69E842EBC1847DE05F0BFEB5E05F0BFEB5E05F0BFEB5E05F0BFEB5B4F64F332D84C5A405FF5AF0AF05FF5AF0AF05FF5AF0AF05FF5AF0AFA5B57F9A69212C262DF8D7827F2DF8D7827F2DF8D7827F2DF8D7827F2DADFDD34C0B613169C1BF16FC6BC1BF16FC6BC1BF16FC6BC1BF16FC6B69ED9F665A088B490BFEB5E05F0BFEB5E05F0BFEB5E05F0BFEB5E05F4B6BFF34D342584C5AF0AF05FF5AF0AF05FF5AF0AF05FF5AF0AF05FF5A5AFBBF714F480821841042082184BCF7B4E4E6D3A74F03D1C40D66E9F3A44FF0AF0DFEB5C1BF36F8D706FFDAE05F1BFC6B837F6D9CFF96D04C0BC362D206FFDAE05F1BFC6B837F6DF0AF0DFEB5C1BF36F8D7C6F96F09CDB4302C266DF0AF0DFEB5C1BF36F8D706FFDAE05F1BFC6B837F6D9CFF96D04C0BC362D206FFDAE05F1BFC6B837F6DF0AF0DFEB5C1BF36F8D7C6F96F09CDB4302C266DF0AF0DFEB5C1BF36F8D706FFDAE05F1BFC6B837F6D9CFF760CC3FF0F41A3ECD8696B97BF0000000049454E44AE426082 --GO */ -- run packages to load search data & run data DECLARE @RC int -<<<<<<< HEAD -EXECUTE @RC = [atlas].[app].[Search_MasterDataUpdate] -======= -EXECUTE @RC = [Data_Governance_Pub].[app].[Search_MasterDataUpdate] ->>>>>>> dev + +if object_id('app.Search_MasterDataUpdate', 'P') is not null +begin + EXECUTE @RC = [app].[Search_MasterDataUpdate] +end GO DECLARE @RC int -EXECUTE @RC = [atlas].[app].[CalculateReportRunTimeData] + +if object_id('app.CalculateReportRunTimeData', 'P') is not null +begin + EXECUTE @RC = [app].[CalculateReportRunTimeData] +end GO DECLARE @RC int -EXECUTE @RC = [atlas].[app].[CalculateReportRunData] + +if object_id('app.CalculateReportRunData', 'P') is not null +begin + EXECUTE @RC = [app].[CalculateReportRunData] +end GO select 'completed'; diff --git a/web/web.csproj b/web/web.csproj index 4085f89a..e3a67163 100644 --- a/web/web.csproj +++ b/web/web.csproj @@ -37,32 +37,32 @@ - - - + + + - - - - - - - - + + + + + + + + all runtime; build; native; contentfiles; analyzers; buildtransitive - - + + - + - - + + runtime; build; native; contentfiles; analyzers; buildtransitive all @@ -88,6 +88,9 @@ + + +